diff --git a/plugins/games/battleship.go b/plugins/games/battleship.go index e6cfc00..f635167 100644 --- a/plugins/games/battleship.go +++ b/plugins/games/battleship.go @@ -89,7 +89,16 @@ func (b *BattleshipRules) InitBoards(players []*structs.Player, cfg GameConfigur // Assign player boards // ------------------------------ func (b *BattleshipRules) AssignPlayerSymbols(players []*structs.Player) { - // nothing needed for classic mode + // nothing needed for battleship +} + +// ------------------------------ +// Attach Game Metadata +// ------------------------------ +func (b *BattleshipRules) AttachGameMetadata(state *structs.MatchState) { + state.Metadata["phase"] = "placement" + state.Metadata["p0_ready"] = false + state.Metadata["p1_ready"] = false } // ------------------------------ diff --git a/plugins/games/rules.go b/plugins/games/rules.go index 9ae9e96..c7d2807 100644 --- a/plugins/games/rules.go +++ b/plugins/games/rules.go @@ -21,6 +21,8 @@ type GameRules interface { // Assign symbols/colors/pieces at start. AssignPlayerSymbols(players []*structs.Player) + // Attach Game Metadata + AttachGameMetadata(state *structs.MatchState) // Apply a move. // Returns: (changed, gameOver, winnerIndex) ApplyMove( diff --git a/plugins/games/tictactoe.go b/plugins/games/tictactoe.go index 7d99096..bec931a 100644 --- a/plugins/games/tictactoe.go +++ b/plugins/games/tictactoe.go @@ -31,6 +31,13 @@ func (t *TicTacToeRules) AssignPlayerSymbols(players []*structs.Player) { players[1].Metadata["symbol"] = "O" } +// ------------------------------ +// Attach Game Metadata +// ------------------------------ +func (b *TicTacToeRules) AttachGameMetadata(state *structs.MatchState) { + // nothing needed for tictactoe +} + // ValidateMove checks bounds and empty cell. func (t *TicTacToeRules) ValidateMove(state *structs.MatchState, playerIdx int, payload MovePayload) bool { diff --git a/plugins/modules/match.go b/plugins/modules/match.go index b833c5a..9b28353 100644 --- a/plugins/modules/match.go +++ b/plugins/modules/match.go @@ -130,9 +130,9 @@ func (m *GenericMatch) MatchInit( GameOver: false, Metadata: map[string]interface{}{}, } - state.Metadata["phase"] = "placement" - state.Metadata["p0_ready"] = false - state.Metadata["p1_ready"] = false + state.Metadata["game"] = m.GameName + state.Metadata["mode"] = m.Mode + m.Rules.AttachGameMetadata(state) label := fmt.Sprintf("%s:%s", m.GameName, m.Mode) diff --git a/plugins/structs/match_state.go b/plugins/structs/match_state.go index 2848d10..ce29538 100644 --- a/plugins/structs/match_state.go +++ b/plugins/structs/match_state.go @@ -7,5 +7,5 @@ type MatchState struct { Turn int `json:"turn"` // index in Players[] Winner int `json:"winner"` // -1 = none, >=0 = winner index GameOver bool `json:"game_over"` // true when the match ends - Metadata map[string]interface{} `json:metadata` // metadata + Metadata map[string]interface{} `json:"metadata"` // metadata }