package component import ( "joylink.club/ecs" "joylink.club/rtsssimulation/component/component_data" "joylink.club/rtsssimulation/component/component_proto" "joylink.club/rtsssimulation/consts" ) var ( UidType = ecs.NewComponentType[Uid]() // 固定位置转换组件类型 FixedPositionTransformType = ecs.NewComponentType[FixedPositionTransform]() // 电机状态组件类型 MotorStateType = ecs.NewComponentType[component_data.Motor]() BitStateType = ecs.NewComponentType[BitState]() ) // 唯一ID组件 type Uid struct { Id string } // 两个稳态位置转换组件 // type TwoPositionTransform struct { // Pos int // 当前位置百分比,[0, 10000],两位小数 // Speed int // } type FixedPositionTransform struct { component_proto.TwoPositionTransform } // 当前位置百分比值 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]()