rts-sim-module/component/common.go

67 lines
1.5 KiB
Go
Raw Normal View History

package component
import (
"joylink.club/ecs"
"joylink.club/rtsssimulation/component/component_data"
"joylink.club/rtsssimulation/consts"
)
var (
UidType = ecs.NewComponentType[Uid]()
// 固定位置转换组件类型
FixedPositionTransformType = ecs.NewComponentType[FixedPositionTransform]()
// 电机状态组件类型
MotorStateType = ecs.NewComponentType[component_data.MotorState]()
BitStateType = ecs.NewComponentType[BitState]()
)
2023-12-29 17:48:57 +08:00
// 唯一ID组件
type Uid struct {
Id string
}
// 两个稳态位置转换组件
// type TwoPositionTransform struct {
// Pos int // 当前位置百分比,[0, 10000],两位小数
// Speed int
// }
2023-12-29 17:48:57 +08:00
type FixedPositionTransform struct {
component_data.FixedPositionTransform
}
// 当前位置百分比值
2023-12-29 17:48:57 +08:00
func (tp *FixedPositionTransform) Percentage() float32 {
return float32(tp.Pos) / consts.TwoPosMax
}
// 计算两位置动作的平均速度
// 总时间t和tick的单位都应该是ms
// t - 总时间tick - 执行间隔
func CalculateTwoPositionAvgSpeed(t int, tick int) int32 {
return int32(consts.TwoPosMax / (t / tick))
}
// 仅有两状态的组件
type BitState struct {
Val bool
}
// 倒数/倒计时组件
type CounterDown struct {
Val int // 当前值
Step int // 步长
}
var CounterDownType = ecs.NewComponentType[CounterDown]()
// 计数/计时组件
type Counter struct {
Val int // 当前值
Step int // 步长
}
var CounterType = ecs.NewComponentType[Counter]()
var LinkPositionType = ecs.NewComponentType[component_proto.LinkPosition]()