rts-sim-module/entity/balise.go

59 lines
1.9 KiB
Go
Raw Normal View History

2023-11-23 11:17:40 +08:00
package entity
2023-11-23 13:17:09 +08:00
import (
"joylink.club/ecs"
"joylink.club/rtsssimulation/component"
2024-01-10 14:17:11 +08:00
"joylink.club/rtsssimulation/component/component_data"
2023-11-23 13:17:09 +08:00
"joylink.club/rtsssimulation/repository"
"joylink.club/rtsssimulation/repository/model/proto"
)
2023-11-23 11:17:40 +08:00
var BaliseBaseComponentTypeArr = []ecs.IComponentType{component.UidType, component.BaliseFixedTelegramType,
component.LinkPositionType, component.KmType, component.BaliseWorkStateType}
2023-11-23 11:17:40 +08:00
// LoadBalises 加载应答器实体
func LoadBalises(w ecs.World) error {
2023-11-23 13:17:09 +08:00
data := GetWorldData(w)
2024-01-10 14:17:11 +08:00
balises := data.Repo.ResponderList()
2023-11-23 13:17:09 +08:00
for _, b := range balises {
be := newBaliseEntity(w, b, data)
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)
}
}
2023-11-23 11:19:39 +08:00
return nil
2023-11-23 11:17:40 +08:00
}
2023-11-23 13:17:09 +08:00
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(BaliseBaseComponentTypeArr...))
2023-11-23 13:17:09 +08:00
component.UidType.SetValue(entry, component.Uid{Id: uid})
component.BaliseWorkStateType.SetValue(entry, component.BaliseWorkState{Work: true})
component.BaliseFixedTelegramType.Set(entry, &component.BaliseTelegram{
Telegram: td.FixedTelegram(),
UserTelegram: td.FixedUserTelegram(),
})
if proto.Transponder_IB == td.BaliseType() || proto.Transponder_VB == td.BaliseType() {
entry.AddComponent(component.BaliseVariableTelegramType)
}
2024-01-10 14:17:11 +08:00
component.LinkPositionType.SetValue(entry, component_data.LinkPosition{
LinkId: td.LinkPosition().Link().Id(),
Offset: td.LinkPosition().Offset(),
})
component.KmType.Set(entry, td.Km())
2023-11-23 13:17:09 +08:00
worldData.EntityMap[uid] = entry
}
return entry
}