package entity import ( "log/slog" "joylink.club/ecs" "joylink.club/rtsssimulation/component" ) func newCiQC(w ecs.World, data *component.WorldData) *ecs.Entry { entry := w.Entry(w.Create(component.CiQcTableType, component.CiQcStateType)) data.CiQcEntities = append(data.CiQcEntities, entry) return entry } // 加载联锁驱动、采集卡 func LoadCiQC(w ecs.World) error { data := GetWorldData(w) for _, csr := range data.Repo.CiQcList() { // if len(csr.CjList) == 0 { // return fmt.Errorf("加载联锁驱采卡实体失败,车站'%s'无采集码表数据", csr.StationId) // } // if len(csr.QdList) == 0 { // return fmt.Errorf("加载联锁驱采卡实体失败,车站'%s'无驱动码表数据", csr.StationId) // } // 加载联锁驱采卡实体 if len(csr.CjList) == 0 || len(csr.QdList) == 0 { slog.Warn("加载联锁驱采卡实体失败,无驱动/采集码表数据", "车站", csr.StationId) continue } entry := newCiQC(w, data) qctable := &component.CiQcTable{ QdBits: csr.QdList, CjBits: csr.CjList, } err := qctable.BuildQcIndex() if err != nil { return err } component.CiQcTableType.Set(entry, qctable) component.CiQcStateType.Set(entry, component.NewCiQcState(len(csr.QdList), len(csr.CjList))) } // TODO: 不同联锁驱动码位索引唯一检查 return nil }