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) } }) }