package entity import ( "joylink.club/ecs" "joylink.club/rtsssimulation/component" "joylink.club/rtsssimulation/component/component_data" "joylink.club/rtsssimulation/repository" "joylink.club/rtsssimulation/repository/model/proto" ) // LoadBalises 加载应答器实体 func LoadBalises(w ecs.World) error { data := GetWorldData(w) balises := data.Repo.ResponderList() for _, b := range balises { be := newBaliseEntity(w, b, data) //应答器位置 be.AddComponent(component.LinkPositionType) component.LinkPositionType.SetValue(be, component_data.LinkPosition{ LinkId: b.LinkPosition().Link().Id(), Offset: b.LinkPosition().Offset(), }) //应答器类型 switch b.TransponderType() { case proto.Transponder_FB: be.AddComponent(component.BaliseFB) case proto.Transponder_WB: be.AddComponent(component.BaliseWB) case proto.Transponder_DB: be.AddComponent(component.BaliseDB) case proto.Transponder_VB: be.AddComponent(component.BaliseVB) case proto.Transponder_IB: be.AddComponent(component.BaliseIB) } } return nil } func newBaliseEntity(w ecs.World, td *repository.Transponder, worldData *component.WorldData) *ecs.Entry { uid := td.Id() entry, ok := worldData.EntityMap[uid] if !ok { entry = w.Entry(w.Create(component.UidType, component.BaliseStateType)) component.UidType.SetValue(entry, component.Uid{Id: uid}) component.BaliseStateType.Set(entry, &component.BaliseState{}) worldData.EntityMap[uid] = entry } return entry }