65 lines
1.1 KiB
Go
65 lines
1.1 KiB
Go
package state
|
|
|
|
import (
|
|
_ "embed"
|
|
"encoding/base64"
|
|
"fmt"
|
|
"sync"
|
|
)
|
|
|
|
// Global Game State Manager
|
|
|
|
type GameManager struct {
|
|
mu sync.Mutex
|
|
hasActiveGame bool
|
|
activeGameID int64
|
|
activeGameData []byte
|
|
}
|
|
|
|
var GlobalManager *GameManager
|
|
|
|
func init() {
|
|
GlobalManager = &GameManager{
|
|
hasActiveGame: false,
|
|
activeGameID: 0,
|
|
}
|
|
// Pre-decode the embedded game data
|
|
data, err := base64.StdEncoding.DecodeString(MockGameDataBase64)
|
|
if err != nil {
|
|
fmt.Printf("Error decoding mock game data: %v\n", err)
|
|
} else {
|
|
GlobalManager.activeGameData = data
|
|
}
|
|
}
|
|
|
|
func (m *GameManager) HasActiveGame() bool {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
return m.hasActiveGame
|
|
}
|
|
|
|
func (m *GameManager) GetActiveGameID() int64 {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
return m.activeGameID
|
|
}
|
|
|
|
func (m *GameManager) GetActiveGameData() []byte {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
return m.activeGameData
|
|
}
|
|
|
|
func (m *GameManager) CreateGame(id int64) {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
m.hasActiveGame = true
|
|
m.activeGameID = id
|
|
m.activeGameData = GetMockIronGameStateBytes()
|
|
}
|
|
|
|
// Embeds
|
|
|
|
//go:embed mock_gamedata.b64
|
|
var MockGameDataBase64 string
|