go-teeworlds-protocol/object7/game_data.go

54 lines
1,008 B
Go

package object7
import (
"reflect"
"slices"
"github.com/teeworlds-go/go-teeworlds-protocol/network7"
"github.com/teeworlds-go/go-teeworlds-protocol/packer"
)
type GameData struct {
ItemId int
GameStartTick int
// TODO: add struct to wrap these flags
// use network7.GameStateFlag bit operations to turn it into a bunch of booleans
// GameStateFlags GameStateFlagsStruct
FlagsRaw int
GameStateEndTick int
}
func (o *GameData) Id() int {
return o.ItemId
}
func (o *GameData) Type() int {
return network7.ObjGameData
}
func (o *GameData) Size() int {
return reflect.TypeOf(GameData{}).NumField() - 1
}
func (o *GameData) Pack() []byte {
return slices.Concat(
packer.PackInt(o.Type()),
packer.PackInt(o.Id()),
packer.PackInt(o.GameStartTick),
packer.PackInt(o.FlagsRaw),
packer.PackInt(o.GameStateEndTick),
)
}
func (o *GameData) Unpack(u *packer.Unpacker) error {
o.GameStartTick = u.GetInt()
o.FlagsRaw = u.GetInt()
o.GameStateEndTick = u.GetInt()
return nil
}