rts-sim-module/entity/light.go

76 lines
1.9 KiB
Go
Raw Permalink Normal View History

2023-10-11 13:22:14 +08:00
package entity
2023-10-11 13:38:33 +08:00
import (
"joylink.club/ecs"
"joylink.club/rtsssimulation/component"
)
2023-10-11 13:22:14 +08:00
2023-10-11 13:38:33 +08:00
// NewLightEntity 创建无色灯实体
func NewLightEntity(w ecs.World) *ecs.Entry {
return w.Entry(w.Create(component.LightDriveType, component.BitStateType))
2023-10-11 13:22:14 +08:00
}
2023-10-11 13:46:34 +08:00
// NewLightLEntity 创建绿色灯实体
func NewLightLEntity(w ecs.World) *ecs.Entry {
e := NewLightEntity(w)
e.AddComponent(component.LdTag)
return e
}
// NewLightHEntity 创建红色灯实体
func NewLightHEntity(w ecs.World) *ecs.Entry {
e := NewLightEntity(w)
e.AddComponent(component.HdTag)
return e
}
// NewLightUEntity 创建黄色灯实体
func NewLightUEntity(w ecs.World) *ecs.Entry {
e := NewLightEntity(w)
e.AddComponent(component.UdTag)
return e
}
// NewLightBEntity 创建白色灯实体
func NewLightBEntity(w ecs.World) *ecs.Entry {
e := NewLightEntity(w)
e.AddComponent(component.BdTag)
return e
}
// NewLightAEntity 创建蓝色灯实体
func NewLightAEntity(w ecs.World) *ecs.Entry {
e := NewLightEntity(w)
e.AddComponent(component.AdTag)
return e
}
2023-10-12 11:00:56 +08:00
// NewLights 创建灯位列表(灯位顺序与lightTags一致)
2023-10-12 11:06:20 +08:00
func NewLights(w ecs.World, lightTags ...component.DsTag) []*ecs.Entry {
2023-10-12 11:00:56 +08:00
ls := make([]*ecs.Entry, 0, len(lightTags))
for _, lightTag := range lightTags {
lightEntry := NewLightEntity(w)
lightEntry.AddComponent(lightTag)
ls = append(ls, lightEntry)
}
return ls
}
2023-10-12 15:13:13 +08:00
2023-10-20 10:21:35 +08:00
// NewLight 创建灯位,并打标
func NewLight(w ecs.World, lightTags ...component.DsTag) *ecs.Entry {
lightEntry := NewLightEntity(w)
for _, lightTag := range lightTags {
lightEntry.AddComponent(lightTag)
}
return lightEntry
}
2023-10-12 15:13:13 +08:00
// IsLightFd 灯是否被封(如Signal 3xh3 红绿黄三显示封绿灯)
func IsLightFd(lightEntry *ecs.Entry) bool {
if lightEntry.HasComponent(component.LightDriveType) && lightEntry.HasComponent(component.BitStateType) {
return lightEntry.HasComponent(component.FdTag)
} else {
panic("IsLightFd 参数lightEntry的值非灯实体")
}
}