修改断相保护器系统逻辑bug
修改道岔挤岔故障bug 修改计数器系统逻辑bug
This commit is contained in:
parent
93725ce934
commit
97b2880c7b
@ -13,31 +13,40 @@ import (
|
||||
|
||||
// 设置道岔故障
|
||||
func SetTurnoutFault(w ecs.World, id string, fault component_proto.Turnout_Fault) error {
|
||||
result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
|
||||
wd := entity.GetWorldData(w)
|
||||
entry, ok := wd.EntityMap[id]
|
||||
if ok {
|
||||
ct := component.GetTurnoutFaultType(fault)
|
||||
if !entry.HasComponent(ct) {
|
||||
entry.AddComponent(ct)
|
||||
}
|
||||
} else {
|
||||
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的道岔", id))
|
||||
}
|
||||
return ecs.NewOkEmptyResult()
|
||||
})
|
||||
return result.Err
|
||||
return updateTrunoutFault(w, id, fault, true)
|
||||
}
|
||||
|
||||
// 取消道岔故障
|
||||
func CancelTurnoutFault(w ecs.World, id string, fault component_proto.Turnout_Fault) error {
|
||||
return updateTrunoutFault(w, id, fault, false)
|
||||
}
|
||||
|
||||
func updateTrunoutFault(w ecs.World, id string, fault component_proto.Turnout_Fault, set bool) error {
|
||||
result := <-ecs.Request[ecs.EmptyType](w, func() ecs.Result[ecs.EmptyType] {
|
||||
wd := entity.GetWorldData(w)
|
||||
entry, ok := wd.EntityMap[id]
|
||||
if ok {
|
||||
ct := component.GetTurnoutFaultType(fault)
|
||||
if entry.HasComponent(ct) {
|
||||
entry.RemoveComponent(ct)
|
||||
switch fault {
|
||||
case component_proto.Turnout_JC: // 挤岔故障
|
||||
zzjs := component.TurnoutZzjType.Get(entry)
|
||||
for _, e := range zzjs.ZzjList {
|
||||
if set {
|
||||
if !e.HasComponent(ct) {
|
||||
e.AddComponent(ct)
|
||||
}
|
||||
} else {
|
||||
e.RemoveComponent(ct)
|
||||
}
|
||||
}
|
||||
default:
|
||||
if set {
|
||||
if !entry.HasComponent(ct) {
|
||||
entry.AddComponent(ct)
|
||||
}
|
||||
} else {
|
||||
entry.RemoveComponent(ct)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return ecs.NewErrResult(fmt.Errorf("未找到id=%s的道岔", id))
|
||||
|
@ -10,6 +10,7 @@ import (
|
||||
// 添加系统到World
|
||||
func BindSystem(w ecs.World) {
|
||||
w.AddSystem(NewWorldTimeSys(),
|
||||
common_sys.NewCounterSys(),
|
||||
common_sys.NewCounterDownSys(),
|
||||
common_sys.NewTwoPositionMovementSys(),
|
||||
device_sys.NewRelaySys(),
|
||||
|
@ -10,8 +10,8 @@ type CounterSys struct {
|
||||
query *ecs.Query
|
||||
}
|
||||
|
||||
func NewCounterSys() *CounterDownSys {
|
||||
return &CounterDownSys{
|
||||
func NewCounterSys() *CounterSys {
|
||||
return &CounterSys{
|
||||
query: ecs.NewQuery(filter.Contains(component.CounterType)),
|
||||
}
|
||||
}
|
||||
|
@ -22,29 +22,24 @@ func (q *DBQSys) Update(w ecs.World) {
|
||||
q.query.Each(w, func(entry *ecs.Entry) {
|
||||
// 电路是否通电
|
||||
dbq := component.DBQStateType.Get(entry)
|
||||
if dbq.Td && !dbq.Dzkg { // 通电但开关未开,启动
|
||||
// 定时器处理
|
||||
counter := component.CounterType.Get(entry)
|
||||
if dbq.Td && counter.Val < consts.DBQTimeout && counter.Step == 0 { // 通电但开关未开,启动
|
||||
// 定时器启动
|
||||
counter.Step = w.Tick()
|
||||
} else if dbq.Td && counter.Val >= consts.DBQTimeout && counter.Step != 0 { // 已经启动,判定延时切断
|
||||
// 判断定时器是否超时,如果超时,断开电子开关
|
||||
counter.Step = 0
|
||||
} else if !dbq.Td && counter.Val > 0 { // 断电,数字计时器
|
||||
counter.Val = 0
|
||||
counter.Step = 0
|
||||
}
|
||||
|
||||
// 电子开关状态变化
|
||||
if !dbq.Dzkg && dbq.Td && counter.Val < consts.DBQTimeout {
|
||||
dbq.Dzkg = true
|
||||
if entry.HasComponent(component.CounterType) {
|
||||
// 定时器启动
|
||||
counter := component.CounterType.Get(entry)
|
||||
counter.Val = 0
|
||||
counter.Step = w.Tick()
|
||||
}
|
||||
} else if dbq.Td && dbq.Dzkg { // 已经启动,判定延时切断
|
||||
if entry.HasComponent(component.CounterType) {
|
||||
// 判断定时器是否超时,如果超时,断开电子开关
|
||||
counter := component.CounterType.Get(entry)
|
||||
if counter.Val >= consts.DBQTimeout {
|
||||
counter.Step = 0
|
||||
dbq.Dzkg = false
|
||||
}
|
||||
}
|
||||
} else if !dbq.Td && dbq.Dzkg { // 断电,断开电子开关
|
||||
} else if dbq.Dzkg && !(dbq.Td && counter.Val < consts.DBQTimeout) {
|
||||
dbq.Dzkg = false
|
||||
if entry.HasComponent(component.CounterType) { // 断电,停止计时
|
||||
counter := component.CounterType.Get(entry)
|
||||
counter.Step = 0
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user