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 } // UpdateTrainPositionFromDynamics 更新列车所在的物理区段 func UpdateTrainPositionFromDynamics(w ecs.World, tpi TrainPositionInfo) error { result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] { wd := entity.GetWorldData(w) te, find := wd.EntityMap[tpi.TrainId] if find { train := component.TrainPositionInfoType.Get(te) train.Up = tpi.Up train.Len = int64(tpi.Len) train.HeadLink = tpi.HeadLink train.HeadLinkOffset = int64(tpi.TailLinkOffset) train.TailLink = tpi.TailLink train.TailLinkOffset = int64(tpi.HeadLinkOffset) return ecs.NewOkEmptyResult() } else { return ecs.NewErrResult(fmt.Errorf("列车[%s]实体不存在", tpi.TrainId)) } }) return result.Err } type TrainPositionInfo struct { //列车id TrainId string //列车头当前运行方向(true偏移量增大/false减小方向) Up bool //列车长度 mm Len uint32 //列车所在轨道link HeadLink string //列车所在link偏移量(mm) HeadLinkOffset uint32 //列车所在轨道link TailLink string //列车所在link偏移量(mm) TailLinkOffset uint32 }