rts-sim-module/sys/device_sys/asd.go

78 lines
2.0 KiB
Go

package device_sys
import (
"joylink.club/ecs"
"joylink.club/ecs/filter"
"joylink.club/rtsssimulation/component"
"joylink.club/rtsssimulation/consts"
)
type AsdSys struct {
query *ecs.Query
}
func NewAsdSys() *AsdSys {
return &AsdSys{
query: ecs.NewQuery(filter.Contains(component.AsdMotorStateType, component.FixedPositionTransformType)),
}
}
func (s *AsdSys) Update(world ecs.World) {
var speed int32 = int32(consts.TwoPosMax / (4 * 1000 / world.Tick()))
s.query.Each(world, func(entry *ecs.Entry) {
//设置两位置转换速度
psdMotorState := component.AsdMotorStateType.Get(entry)
twoPosition := component.FixedPositionTransformType.Get(entry)
asdState := component.AsdStateType.Get(entry)
pos := twoPosition.Pos
if entry.HasComponent(component.AsdCannotOpenTag) {
pos = consts.TwoPosMin
speed = 0
psdMotorState.TD = false
} else if entry.HasComponent(component.AsdCannotCloseTag) {
pos = consts.TwoPosMax
speed = 0
psdMotorState.TD = false
} else if psdMotorState.TD {
if psdMotorState.KM {
if pos == consts.TwoPosMax {
psdMotorState.TD = false
twoPosition.Speed = 0
} else {
twoPosition.Speed = speed
}
} else {
if pos == consts.TwoPosMin { //关门到位后断电
psdMotorState.TD = false
twoPosition.Speed = 0
} else {
twoPosition.Speed = -speed
}
}
}
//门关继电器状态
if entry.HasComponent(component.AsdForceType) {
force := component.AsdForceType.Get(entry)
psdMotorState.MG = !force.Val
} else {
psdMotorState.MG = pos == consts.TwoPosMin
}
asdState.Mgj = psdMotorState.MG
//滑动门状态
if pos == consts.TwoPosMax {
asdState.Kmdw = true
asdState.Gmdw = false
} else if pos == consts.TwoPosMin {
asdState.Kmdw = false
asdState.Gmdw = true
} else {
asdState.Kmdw = false
asdState.Gmdw = false
}
//障碍物
asdState.Zaw = entry.HasComponent(component.AsdHasObstacleTag)
//强制开/关门
asdState.Force = entry.HasComponent(component.AsdForceType)
})
}