65 lines
2.2 KiB
Go
65 lines
2.2 KiB
Go
package memory
|
||
|
||
import (
|
||
"time"
|
||
|
||
"joylink.club/ecs"
|
||
"joylink.club/rtsssimulation/components"
|
||
"joylink.club/rtsssimulation/state"
|
||
"joylink.club/rtsssimulation/system"
|
||
)
|
||
|
||
// 初始化world,添加一些内置的组件和系统
|
||
func InitializeWorld(w ecs.World, worldTime time.Time) *system.FaceSystem {
|
||
//初始化world时钟
|
||
timeEntry := w.Create(components.SystemTimerComponent)
|
||
components.SystemTimerComponent.Set(timeEntry, state.NewSystemTimer(&worldTime))
|
||
w.AddSystem(system.NewTimerSystem())
|
||
//初始化world与外界交互的门面
|
||
faceSystem := system.NewFaceSystem(w)
|
||
w.AddSystem(faceSystem)
|
||
//添加百分比设备系统
|
||
w.AddSystem(system.NewPercentageSystem())
|
||
//添加调试系统
|
||
w.AddSystem(system.NewDebugSystem())
|
||
//
|
||
return faceSystem
|
||
}
|
||
|
||
// 创建道岔实体
|
||
func CreateSwitchEntity(w ecs.World) *ecs.Entry {
|
||
return w.Create(components.DeviceIdentityComponent, components.SwitchRelayStateComponent, components.PercentageDeviceComponent)
|
||
}
|
||
|
||
// 创建信号机实体
|
||
func CreateSignalEntity(w ecs.World) *ecs.Entry {
|
||
return w.Create(components.DeviceIdentityComponent, components.SignalStateComponent)
|
||
}
|
||
|
||
// 创建物理区段实体
|
||
func CreatePhysicalSectionEntity(w ecs.World) *ecs.Entry {
|
||
return w.Create(components.DeviceIdentityComponent, components.PhysicalSectionStateComponent)
|
||
}
|
||
|
||
// 创建站台单侧屏蔽门实体
|
||
func CreatePsdEntity(w ecs.World) *ecs.Entry {
|
||
e := w.Create(components.DeviceIdentityComponent, components.PsdStateComponent, components.EntityTagHandlerComponent)
|
||
components.EntityTagHandlerComponent.Set(e, &state.EntityTagHandler{Tag: ecs.NewComponentType[struct{}]()})
|
||
return e
|
||
}
|
||
|
||
// 创建屏蔽门cell实体
|
||
func CreatePsdCellEntity(w ecs.World, psdEntry *ecs.Entry) *ecs.Entry {
|
||
return w.Create(components.DeviceIdentityComponent, components.PercentageDeviceComponent, components.EntityTagHandlerComponent.Get(psdEntry).Tag)
|
||
}
|
||
|
||
// 创建应答器实体
|
||
func CreateBaliseEntity(w ecs.World) *ecs.Entry {
|
||
return w.Create(components.DeviceIdentityComponent, components.BaliseStateComponent)
|
||
}
|
||
|
||
// 创建列车实体
|
||
func CreateTrainEntity(w ecs.World) *ecs.Entry {
|
||
return w.Create(components.DeviceIdentityComponent, components.TrainStateComponent)
|
||
}
|