列车添加参数调整,列车全部删除,摁钮旁路,旁路复位功能
This commit is contained in:
parent
b54224351f
commit
4adeaedd5a
@ -16,6 +16,11 @@ var (
|
|||||||
BitStateType = ecs.NewComponentType[BitState]()
|
BitStateType = ecs.NewComponentType[BitState]()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Bypass struct {
|
||||||
|
BypassEnable bool // 摁钮,钥匙 是否旁路
|
||||||
|
OldVal bool //摁钮旁路旧值
|
||||||
|
}
|
||||||
|
|
||||||
// 唯一ID组件
|
// 唯一ID组件
|
||||||
type Uid struct {
|
type Uid struct {
|
||||||
Id string
|
Id string
|
||||||
@ -45,6 +50,7 @@ func CalculateTwoPositionAvgSpeed(t int, tick int) int32 {
|
|||||||
|
|
||||||
// 仅有两状态的组件
|
// 仅有两状态的组件
|
||||||
type BitState struct {
|
type BitState struct {
|
||||||
|
Bypass
|
||||||
Val bool
|
Val bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +45,7 @@ var AlarmDriveType = ecs.NewComponentType[AlarmDrive]()
|
|||||||
|
|
||||||
// 挡位组件
|
// 挡位组件
|
||||||
type GearState struct {
|
type GearState struct {
|
||||||
|
Bypass
|
||||||
Val int32
|
Val int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
44
fi/ibp.go
44
fi/ibp.go
@ -2,6 +2,7 @@ package fi
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"joylink.club/bj-rtsts-server/dto/request_proto"
|
||||||
|
|
||||||
"joylink.club/ecs"
|
"joylink.club/ecs"
|
||||||
"joylink.club/rtsssimulation/component"
|
"joylink.club/rtsssimulation/component"
|
||||||
@ -16,6 +17,7 @@ func PressDownButton(w ecs.World, id string) error {
|
|||||||
if ok {
|
if ok {
|
||||||
state := component.BitStateType.Get(entry)
|
state := component.BitStateType.Get(entry)
|
||||||
state.Val = true
|
state.Val = true
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的按钮", id))
|
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的按钮", id))
|
||||||
}
|
}
|
||||||
@ -32,6 +34,7 @@ func PressUpButton(w ecs.World, id string) error {
|
|||||||
if ok {
|
if ok {
|
||||||
state := component.BitStateType.Get(entry)
|
state := component.BitStateType.Get(entry)
|
||||||
state.Val = false
|
state.Val = false
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的按钮", id))
|
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的按钮", id))
|
||||||
}
|
}
|
||||||
@ -48,6 +51,7 @@ func SwitchKeyGear(w ecs.World, id string, gear int32) error {
|
|||||||
if ok {
|
if ok {
|
||||||
state := component.GearStateType.Get(entry)
|
state := component.GearStateType.Get(entry)
|
||||||
state.Val = gear
|
state.Val = gear
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的钥匙开关", id))
|
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的钥匙开关", id))
|
||||||
}
|
}
|
||||||
@ -55,3 +59,43 @@ func SwitchKeyGear(w ecs.World, id string, gear int32) error {
|
|||||||
})
|
})
|
||||||
return result.Err
|
return result.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetBypassBtn(w ecs.World, id string, p request_proto.BypassOperationReq_Operation) error {
|
||||||
|
|
||||||
|
result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
|
||||||
|
wd := entity.GetWorldData(w)
|
||||||
|
entry, ok := wd.EntityMap[id]
|
||||||
|
if ok {
|
||||||
|
state := component.BitStateType.Get(entry)
|
||||||
|
state.Bypass.BypassEnable = convertBypassBoolVal(p)
|
||||||
|
state.Bypass.OldVal = state.Val
|
||||||
|
} else {
|
||||||
|
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的按钮", id))
|
||||||
|
}
|
||||||
|
return ecs.NewOkEmptyResult()
|
||||||
|
})
|
||||||
|
return result.Err
|
||||||
|
}
|
||||||
|
func SetBypassSwitchKey(w ecs.World, id string, p request_proto.BypassOperationReq_Operation) error {
|
||||||
|
result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
|
||||||
|
wd := entity.GetWorldData(w)
|
||||||
|
entry, ok := wd.EntityMap[id]
|
||||||
|
if ok {
|
||||||
|
state := component.GearStateType.Get(entry)
|
||||||
|
state.BypassEnable = convertBypassBoolVal(p)
|
||||||
|
state.OldVal = state.Val == 0
|
||||||
|
} else {
|
||||||
|
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的钥匙开关", id))
|
||||||
|
}
|
||||||
|
return ecs.NewOkEmptyResult()
|
||||||
|
})
|
||||||
|
return result.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func convertBypassBoolVal(p request_proto.BypassOperationReq_Operation) bool {
|
||||||
|
val := true
|
||||||
|
if p == request_proto.BypassOperationReq_bypass_reset {
|
||||||
|
val = false
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
@ -113,12 +113,20 @@ func (ibp *IBPSys) empState(entry *ecs.Entry, s *component.EmpElectronic) {
|
|||||||
// 获取按钮状态
|
// 获取按钮状态
|
||||||
func getIbpBtnVal(entry *ecs.Entry) bool {
|
func getIbpBtnVal(entry *ecs.Entry) bool {
|
||||||
btn := component.BitStateType.Get(entry)
|
btn := component.BitStateType.Get(entry)
|
||||||
|
//旁路后返回之前的值
|
||||||
|
if btn.BypassEnable {
|
||||||
|
return btn.OldVal
|
||||||
|
}
|
||||||
return btn.Val
|
return btn.Val
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取按钮状态
|
// 获取按钮状态
|
||||||
func getIbpKeyVal(entry *ecs.Entry) bool {
|
func getIbpKeyVal(entry *ecs.Entry) bool {
|
||||||
btn := component.GearStateType.Get(entry)
|
btn := component.GearStateType.Get(entry)
|
||||||
|
//旁路后返回之前的值
|
||||||
|
if btn.BypassEnable {
|
||||||
|
return btn.OldVal
|
||||||
|
}
|
||||||
return btn.Val == 0
|
return btn.Val == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,16 +70,27 @@ func (p *PsdSys) Update(world ecs.World) {
|
|||||||
var pabTd bool
|
var pabTd bool
|
||||||
for _, mkxEntry := range pmc.MkxList {
|
for _, mkxEntry := range pmc.MkxList {
|
||||||
mkx := component.MkxType.Get(mkxEntry)
|
mkx := component.MkxType.Get(mkxEntry)
|
||||||
if mkx.PCB != nil && component.BitStateType.Get(mkx.PCB).Val {
|
pcb := component.BitStateType.Get(mkx.PCB)
|
||||||
|
if !pcb.BypassEnable {
|
||||||
|
if mkx.PCB != nil && pcb.Val {
|
||||||
pcbTd = true
|
pcbTd = true
|
||||||
}
|
}
|
||||||
if mkx.POB != nil && component.BitStateType.Get(mkx.POB).Val {
|
}
|
||||||
|
|
||||||
|
pob := component.BitStateType.Get(mkx.POB)
|
||||||
|
if !pob.BypassEnable {
|
||||||
|
if mkx.POB != nil && pob.Val {
|
||||||
pobTd = true
|
pobTd = true
|
||||||
}
|
}
|
||||||
if mkx.PAB != nil && component.BitStateType.Get(mkx.PAB).Val {
|
}
|
||||||
|
|
||||||
|
pab := component.BitStateType.Get(mkx.PAB)
|
||||||
|
if !pab.BypassEnable {
|
||||||
|
if mkx.PAB != nil && pab.Val {
|
||||||
pabTd = true
|
pabTd = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if pmc.PCBJ != nil {
|
if pmc.PCBJ != nil {
|
||||||
component.RelayDriveType.Get(pmc.PCBJ).Td = pcbTd
|
component.RelayDriveType.Get(pmc.PCBJ).Td = pcbTd
|
||||||
psc.MkxGM = component.BitStateType.Get(pmc.PCBJ).Val
|
psc.MkxGM = component.BitStateType.Get(pmc.PCBJ).Val
|
||||||
|
Loading…
Reference in New Issue
Block a user