rts-sim-module/sys/device_sys/ci_qc.go
walker a0352ee5e8 实现联锁驱采卡系统功能
调整道岔驱动电路逻辑
2023-11-03 17:26:32 +08:00

53 lines
1.3 KiB
Go

package device_sys
import (
"fmt"
"joylink.club/ecs"
"joylink.club/ecs/filter"
"joylink.club/rtsssimulation/component"
"joylink.club/rtsssimulation/consts"
"joylink.club/rtsssimulation/entity"
)
type CiQcSys struct {
query *ecs.Query
}
func NewCiQcSys() *CiQcSys {
return &CiQcSys{
query: ecs.NewQuery(filter.Contains(component.CiQcTableType, component.CiQcStateType)),
}
}
func (s *CiQcSys) Update(w ecs.World) {
s.query.Each(w, func(entry *ecs.Entry) {
// 采集设备状态
data := entity.GetWorldData(w)
table := component.CiQcTableType.Get(entry)
state := component.CiQcStateType.Get(entry)
for i, cj := range table.CjBits {
bit := true
if len(cj.RefRelays) > 0 {
for _, cdi := range cj.RefRelays {
re, ok := data.EntityMap[cdi.RelayId]
if !ok {
panic(fmt.Errorf("联锁码位采集系统运行异常,没有id=%s的继电器实体", cdi.RelayId))
}
if !re.HasComponent(component.BitStateType) {
panic(fmt.Errorf("联锁码位采集系统运行异常,id=%s的继电器实体没有BitState组件", cdi.RelayId))
}
s := component.BitStateType.Get(re)
if cdi.Q != s.Val {
bit = false
break
}
}
} else {
bit = false
}
consts.SetBitOfBytes(state.Cbs, i, bit)
}
})
}