go-susapp/state.go
2021-09-12 00:25:10 +01:00

112 lines
2.7 KiB
Go

package main
import (
"fmt"
"os"
"codehub.onpointcoding.net/sean/go-susapp/enum"
"codehub.onpointcoding.net/sean/go-susapp/innernetobjects"
"codehub.onpointcoding.net/sean/go-susapp/protocol"
)
type State struct {
Screen int
Version int32
PosX float32
PosY float32
Settings *SettingsJSON
CurrentGame *CurrentGameData
TypedGameID string
IsTypingReady bool
IsLobbyMenuOpen bool
DisconnectReason byte
DisconnectStringReason string
HoldingUp bool
HoldingLeft bool
HoldingDown bool
HoldingRight bool
MovementX float32
MovementY float32
}
type CurrentGameData struct {
GameID int32
ClientID uint32
ClientPlayerNetID uint32
HostClientID uint32
OtherClientIDs []uint32
GamePrivacy byte
GameOptions *protocol.GameOptionsData
NetObjects map[uint32]*innernetobjects.InnerNetObject
PlayerNetObjects *PlayerNetObjectMaps
MapNetObjectNetID uint32
GameDataNetID uint32
StartGameTimer byte
CheckNameNonce uint16
CheckColorNonce uint16
CheckPetHatAndSkinNonce uint16
CheckedNameAndColor byte
HasSetStartCounter bool
}
type PlayerNetObjectMaps struct {
ByPlayerClientID map[uint32]*PlayerObject
ByPlayerNetID map[uint32]*PlayerObject
}
type PlayerObject struct {
PlayerClientNetID uint32
PlayerControllerNetID uint32
PlayerPhysicsNetID uint32
PlayerNetworkTransform uint32
PlayerName string
PlayerColor byte
PlayerPet uint32
PlayerHat uint32
PlayerSkin uint32
}
var settingsFilename string = "SusSettings.json"
func CreateAppState(version int32) *State {
forceSave := false
settings, err := readJson(settingsFilename)
if err != nil {
if os.IsNotExist(err) {
forceSave = true
} else {
fmt.Printf("Error loading settings: %v\n", err)
return nil
}
}
s := &State{
Screen: enum.SCREEN_TITLE,
Version: version,
Settings: &settings,
}
if forceSave {
s.SaveSettings()
}
return s
}
func (state *State) SaveSettings() error {
return writeJson(settingsFilename, *state.Settings)
}
func readJson(filename string) (SettingsJSON, error) {
b, err := os.ReadFile(filename)
if err != nil {
return NewDefaultSettingsJSON(), err
}
return UnmarshalSettings(b)
}
func writeJson(filename string, settings SettingsJSON) error {
b, err := settings.Marshal()
if err != nil {
return err
}
return os.WriteFile(filename, b, 0644)
}