52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
|
package fi
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"joylink.club/ecs"
|
||
|
"joylink.club/rtsssimulation/component"
|
||
|
"joylink.club/rtsssimulation/entity"
|
||
|
)
|
||
|
|
||
|
// AddTrainToWorld 添加列车
|
||
|
func AddTrainToWorld(w ecs.World, trainId string) error {
|
||
|
result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
|
||
|
wd := entity.GetWorldData(w)
|
||
|
_, find := wd.EntityMap[trainId]
|
||
|
if !find {
|
||
|
entity.NewTrainEntity(w, trainId)
|
||
|
}
|
||
|
return ecs.NewOkEmptyResult()
|
||
|
})
|
||
|
return result.Err
|
||
|
}
|
||
|
|
||
|
// RemoveTrainFromWorld 移除列车
|
||
|
func RemoveTrainFromWorld(w ecs.World, trainId string) error {
|
||
|
result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
|
||
|
wd := entity.GetWorldData(w)
|
||
|
te, find := wd.EntityMap[trainId]
|
||
|
if find {
|
||
|
te.Remove()
|
||
|
delete(wd.EntityMap, trainId)
|
||
|
}
|
||
|
return ecs.NewOkEmptyResult()
|
||
|
})
|
||
|
return result.Err
|
||
|
}
|
||
|
|
||
|
// UpdateTrainFromDynamics 更新列车所在的物理区段
|
||
|
func UpdateTrainFromDynamics(w ecs.World, trainId string, sectionIds []string) error {
|
||
|
result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
|
||
|
wd := entity.GetWorldData(w)
|
||
|
te, find := wd.EntityMap[trainId]
|
||
|
if find {
|
||
|
tp := component.TrainPositionInfoType.Get(te)
|
||
|
tp.SectionIds = sectionIds
|
||
|
return ecs.NewOkEmptyResult()
|
||
|
} else {
|
||
|
return ecs.NewErrResult(fmt.Errorf("列车[%s]实体不存在", trainId))
|
||
|
}
|
||
|
})
|
||
|
return result.Err
|
||
|
}
|