rts-sim-module/examples/test1/main.go

213 lines
9.8 KiB
Go
Raw Normal View History

2023-09-14 15:03:16 +08:00
package main
2023-09-15 10:13:25 +08:00
import (
"fmt"
2023-09-15 13:07:31 +08:00
sysEvent "joylink.club/rtsssimulation/system/event"
2023-09-15 10:13:25 +08:00
"time"
"github.com/yohamta/donburi/filter"
"joylink.club/ecs"
"joylink.club/rtsssimulation/entities"
"joylink.club/rtsssimulation/examples/test1/tmodel"
"joylink.club/rtsssimulation/examples/test1/tstorages"
"joylink.club/rtsssimulation/simulation"
"joylink.club/rtsssimulation/system"
"joylink.club/rtsssimulation/umi"
)
2023-09-14 15:03:16 +08:00
func main() {
2023-09-15 10:13:25 +08:00
//模型仓库
modelStorage := tstorages.NewModelStorage()
addRelays(modelStorage)
addSwitchs(modelStorage)
worldStorage := &tstorages.WorldModelStorage{Share: modelStorage, Links: tstorages.NewModelStorage()}
//
worldConfig := simulation.WorldConfig{
ModelManager: worldStorage,
2023-09-15 13:48:48 +08:00
Systems: []ecs.ISystem{system.NewSwitch2jZdj9System(), system.NewRelaySystem(), system.NewDebugSystem()},
2023-09-15 10:13:25 +08:00
Tick: 100,
InitTime: time.Now(),
}
world := simulation.InitializeWorld(&worldConfig)
addEntities(world, modelStorage)
initComponents(world)
//
2023-09-15 13:07:31 +08:00
//ecs.EventsDebugEnable()
//
system.Switch2jzdj9AddListeners(world)
system.RelayAddListeners(world)
//
2023-09-15 10:13:25 +08:00
world.StartUp()
2023-09-15 13:07:31 +08:00
time.Sleep(1 * time.Second)
//反操
sysEvent.RelayNeedChangeEventBus.PublishOutWorld(world, &sysEvent.RelayNeedChangeEvent{Id: "sw1-sjzdj9-ycj", Xh: true})
sysEvent.RelayNeedChangeEventBus.PublishOutWorld(world, &sysEvent.RelayNeedChangeEvent{Id: "sw1-sjzdj9-fcj", Xh: true})
2023-09-15 10:13:25 +08:00
//
2023-09-15 13:07:31 +08:00
time.Sleep(10 * time.Second)
2023-09-15 10:13:25 +08:00
world.Close()
}
func addEntities(w ecs.World, modelStorage *tstorages.ModelStorage) {
modelStorage.ForEachModelsByType(umi.Switch, func(md tstorages.ModelData) {
entities.CreateSwitch2jzdj9Entity(w, md.GetId())
})
modelStorage.ForEachModelsByType(umi.Relay, func(md tstorages.ModelData) {
entities.CreateRelayEntity(w, md.GetId())
})
}
// //////////////////////////////////////////////////////////////////
func addRelays(modelStorage *tstorages.ModelStorage) {
//道岔sw1,双机zdj9
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-dcj", umi.JWXC_1700))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-fcj", umi.JWXC_1700))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-ycj", umi.JWXC_1700))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-zdbj", umi.JPXC_1000))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-zfbj", umi.JPXC_1000))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j1-1dqj", umi.JWJXC_H125_80))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j1-bhj", umi.JWXC_1700))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j1-2dqj", umi.JYJXC_160_260))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j1-1dqjf", umi.JWJXC_480))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j1-dbj", umi.JPXC_1000))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j1-fbj", umi.JPXC_1000))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j1-qdj", umi.JWXC_1700))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j1-zbhj", umi.JWXC_1700))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-1dqj", umi.JWJXC_H125_80))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-bhj", umi.JWXC_1700))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-2dqj", umi.JYJXC_160_260))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-1dqjf", umi.JWJXC_480))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-dbj", umi.JPXC_1000))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-fbj", umi.JPXC_1000))
}
func findRelayModel(modelStorage *tstorages.ModelStorage, id string) umi.IRelayModel {
return modelStorage.FindModelById(id).(umi.IRelayModel)
}
func addSwitchs(modelStorage *tstorages.ModelStorage) {
sw1 := tmodel.NewSwitchModel("sw1")
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDC, RelayName: system.SJZDJ9_DCJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-dcj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDC, RelayName: system.SJZDJ9_FCJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-fcj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDC, RelayName: system.SJZDJ9_YCJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-ycj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDC, RelayName: system.SJZDJ9_ZDBJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-zdbj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDC, RelayName: system.SJZDJ9_ZFBJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-zfbj")})
//
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ1, RelayName: system.SJZDJ9_1DQJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j1-1dqj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ1, RelayName: system.SJZDJ9_BHJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j1-bhj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ1, RelayName: system.SJZDJ9_2DQJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j1-2dqj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ1, RelayName: system.SJZDJ9_1DQJF, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j1-1dqjf")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ1, RelayName: system.SJZDJ9_DBJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j1-dbj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ1, RelayName: system.SJZDJ9_FBJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j1-fbj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ1, RelayName: system.SJZDJ9_QDJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j1-qdj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ1, RelayName: system.SJZDJ9_ZBHJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j1-zbhj")})
//
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ2, RelayName: system.SJZDJ9_1DQJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j2-1dqj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ2, RelayName: system.SJZDJ9_BHJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j2-bhj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ2, RelayName: system.SJZDJ9_2DQJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j2-2dqj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ2, RelayName: system.SJZDJ9_1DQJF, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j2-1dqjf")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ2, RelayName: system.SJZDJ9_DBJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j2-dbj")})
sw1.AddRelay(&tmodel.SwitchRelay{RelayGroup: system.SJZDJ9_TDFJ2, RelayName: system.SJZDJ9_FBJ, Relay: findRelayModel(modelStorage, "sw1-sjzdj9-j2-fbj")})
//
modelStorage.AddModel(sw1)
}
2023-09-14 15:03:16 +08:00
2023-09-15 10:13:25 +08:00
// 初始化组件状态
func initComponents(w ecs.World) {
//双机zdj9道岔相关继电器的状态初始化
switchQuery := ecs.NewQuery(filter.Contains(system.Switch2jZdj9StateComponent))
switchQuery.Each(w, func(e *ecs.Entry) {
swId := system.EntityIdentityComponent.Get(e).Id
swState := system.Switch2jZdj9StateComponent.Get(e)
swMd := system.FindModelStorage(w).FindById(swId).(*tmodel.SwitchModel)
for _, relay := range swMd.Relays {
relayId := relay.Relay.(umi.IDeviceModel).GetId()
relayEntry := system.FindEntityById(w, relayId)
relayState := system.RelayStateComponent.Get(relayEntry)
relayGroup := relay.RelayGroup
relayName := relay.RelayName
switch relayGroup {
case system.SJZDJ9_TDC:
{
switch relayName {
case system.SJZDJ9_DCJ:
relayState.Xh = swState.DCJ
relayState.ResetNeedXh()
case system.SJZDJ9_FCJ:
relayState.Xh = swState.FCJ
relayState.ResetNeedXh()
case system.SJZDJ9_YCJ:
relayState.Xh = swState.YCJ
relayState.ResetNeedXh()
case system.SJZDJ9_ZDBJ:
relayState.Xh = swState.ZDBJ
relayState.ResetNeedXh()
case system.SJZDJ9_ZFBJ:
relayState.Xh = swState.ZFBJ
relayState.ResetNeedXh()
default:
panic(fmt.Sprintf("SwitchZdj9的模型[%s]中继电器功能名称[%s]无法识别", swId, relayName))
}
}
case system.SJZDJ9_TDFJ1:
{
switch relayName {
case system.SJZDJ9_1DQJ:
relayState.Xh = swState.J1_1DQJ
relayState.ResetNeedXh()
case system.SJZDJ9_BHJ:
relayState.Xh = swState.J1_BHJ
relayState.ResetNeedXh()
case system.SJZDJ9_2DQJ:
relayState.Xh = swState.J1_2DQJ
relayState.ResetNeedXh()
case system.SJZDJ9_1DQJF:
relayState.Xh = swState.J1_1DQJF
relayState.ResetNeedXh()
case system.SJZDJ9_DBJ:
relayState.Xh = swState.J1_DBJ
relayState.ResetNeedXh()
case system.SJZDJ9_FBJ:
relayState.Xh = swState.J1_FBJ
relayState.ResetNeedXh()
case system.SJZDJ9_QDJ:
relayState.Xh = swState.J1_QDJ
relayState.ResetNeedXh()
case system.SJZDJ9_ZBHJ:
relayState.Xh = swState.J1_ZBHJ
relayState.ResetNeedXh()
default:
panic(fmt.Sprintf("SwitchZdj9的模型[%s]中继电器功能名称[%s]无法识别", swId, relayName))
}
}
case system.SJZDJ9_TDFJ2:
{
switch relayName {
case system.SJZDJ9_1DQJ:
relayState.Xh = swState.J2_1DQJ
relayState.ResetNeedXh()
case system.SJZDJ9_BHJ:
relayState.Xh = swState.J2_BHJ
relayState.ResetNeedXh()
case system.SJZDJ9_2DQJ:
relayState.Xh = swState.J2_2DQJ
relayState.ResetNeedXh()
case system.SJZDJ9_1DQJF:
relayState.Xh = swState.J2_1DQJF
relayState.ResetNeedXh()
case system.SJZDJ9_DBJ:
relayState.Xh = swState.J2_DBJ
relayState.ResetNeedXh()
case system.SJZDJ9_FBJ:
relayState.Xh = swState.J2_FBJ
relayState.ResetNeedXh()
default:
panic(fmt.Sprintf("SwitchZdj9的模型[%s]中继电器功能名称[%s]无法识别", swId, relayName))
}
}
default:
panic(fmt.Sprintf("SwitchZdj9的模型[%s]中继电器组合类型[%s]无法识别", swId, relayGroup))
}
} //for
})
2023-09-14 15:03:16 +08:00
}