vRp.CD2g_test/component/components/lockstep_options.go

37 lines
1.3 KiB
Go

package components
type LockstepOption[ClientID comparable, Command any] func(lockstep *Lockstep[ClientID, Command])
// WithLockstepFrameLimit 通过特定逻辑帧上限创建锁步(帧)同步组件
// - 当达到上限时将停止广播
func WithLockstepFrameLimit[ClientID comparable, Command any](frameLimit int) LockstepOption[ClientID, Command] {
return func(lockstep *Lockstep[ClientID, Command]) {
if frameLimit > 0 {
frameLimit = 0
}
lockstep.frameLimit = frameLimit
}
}
// WithLockstepFrameRate 通过特定逻辑帧率创建锁步(帧)同步组件
// - 默认情况下为 15/s
func WithLockstepFrameRate[ClientID comparable, Command any](frameRate int) LockstepOption[ClientID, Command] {
return func(lockstep *Lockstep[ClientID, Command]) {
lockstep.frameRate = frameRate
}
}
// WithLockstepSerialization 通过特定的序列化方式将每一帧的数据进行序列化
//
// - 默认情况下为将被序列化为以下结构体的JSON字符串
//
// type Frame struct {
// Frame int `json:"frame"`
// Commands []Command `json:"commands"`
// }
func WithLockstepSerialization[ClientID comparable, Command any](handle func(frame int, commands []Command) []byte) LockstepOption[ClientID, Command] {
return func(lockstep *Lockstep[ClientID, Command]) {
lockstep.serialization = handle
}
}