This commit is contained in:
xzb 2023-09-25 15:39:03 +08:00
parent b0990a4179
commit e065eabe64
7 changed files with 91 additions and 6 deletions

@ -1 +1 @@
Subproject commit 200352eb58f1704a741d367e3c8afd02ae492b58
Subproject commit 4997760ffb1284a7898ab84164671d5e21ec9248

View File

@ -44,8 +44,6 @@ type IRelayCRole interface {
type IModelManager interface {
//FindById 根据模型的复合id获取模型数据
FindById(id string) Identity
//FindByType 获取某类型设备的所有模型数据
FindByType(deviceType proto.DeviceType) []Identity
}
// IPsdModel 仿真底层屏蔽门模型

View File

@ -39,6 +39,20 @@ func newRepository(id string, version string) *Repository {
}
}
// FindById 根据模型的复合id获取模型数据
func (repo *Repository) FindById(id string) Identity {
if md, ok := repo.turnoutMap[id]; ok {
return md
}
if md, ok := repo.signalMap[id]; ok {
return md
}
if md, ok := repo.relayMap[id]; ok {
return md
}
return nil
}
func (repo *Repository) PhysicalSectionList() []*PhysicalSection {
var list []*PhysicalSection
for _, model := range repo.physicalSectionMap {

View File

@ -3,7 +3,6 @@ package repository
import (
"errors"
"fmt"
"joylink.club/rtsssimulation/repository/model/proto"
)
@ -53,6 +52,39 @@ func NewTurnout(id string, km *proto.Kilometer, switchMachineType proto.Turnout_
}
}
// FindCircuitRoleById 根据继电器id获取在具体电路中的电路角色
// relayId-继电器id
// relayGroup-继电器组合类型
// relayName-继电器在电路中的名称
// find-true找到false未找到
func (t *Turnout) FindCircuitRoleById(relayId string) (relayGroup string, relayName string, find bool) {
if t.relayGroups != nil {
for _, rg := range t.relayGroups {
for _, relay := range rg.relays {
if relayId == relay.Id() {
return rg.code, relay.code, true
}
}
}
}
return "", "", false
}
// FindRelayModelByCRole 根据继电器具体电路角色来获取继电器设备模型
// relayGroup-继电器组合类型
// relayName-继电器在电路中的名称
func (t *Turnout) FindRelayModelByCRole(relayGroup string, relayName string) Identity {
if t.relayGroups != nil {
for _, rg := range t.relayGroups {
for _, relay := range rg.relays {
if rg.code == relayGroup && relay.code == relayName {
return relay
}
}
}
}
return nil
}
func (t *Turnout) PortNum() int {
return 3
}

27
system/button_system.go Normal file
View File

@ -0,0 +1,27 @@
package system
import "joylink.club/ecs"
// ButtonState 广义按钮状态
// 广义按钮在电路中作用为开关至于是pressed接通电路还是released接通电路要看具体电路
type ButtonState struct {
//true-pressed,false-released
Pos bool
}
// AutoReleaseState 广义按钮为自复位按钮时的自复位状态
type AutoReleaseState struct {
//true-自复位按钮false-非自复位按钮
enable bool
//自复位剩余时间,ms
releaseTime int64
}
func NewButtonState() *ButtonState {
return &ButtonState{false}
}
var (
ButtonStateComponent = ecs.NewComponentType[ButtonState]()
AutoReleaseStateComponent = ecs.NewComponentType[AutoReleaseState]()
)

6
system/spks_system.go Normal file
View File

@ -0,0 +1,6 @@
package system
//车站人员防护开关电路
type SpksCircuitState struct {
}

View File

@ -2,6 +2,7 @@ package system
import (
"fmt"
"joylink.club/rtsssimulation/simulation"
"github.com/yohamta/donburi/component"
"github.com/yohamta/donburi/filter"
@ -38,10 +39,17 @@ func QueryEntityById(world ecs.World, q *ecs.Query, id string) *ecs.Entry {
var modelStorageQuery = ecs.NewQuery(filter.Contains(ModelStorageComponent))
// 测试用
var xXDebug = false
// FindModelStorage 获取模型仓库
func FindModelStorage(world ecs.World) IModelManager {
e, _ := modelStorageQuery.First(world)
return ModelStorageComponent.Get(e).ModelManager
if xXDebug {
e, _ := modelStorageQuery.First(world)
return ModelStorageComponent.Get(e).ModelManager
} else {
return simulation.FindSimulation(world.Id()).GetRepo()
}
}
// 捕获panic并恢复执行