diff options
author | Santo Cariotti <santo@dcariotti.me> | 2025-04-18 12:46:00 +0200 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2025-04-18 12:46:00 +0200 |
commit | fafd0111465ded6bfec5c0d91d7dd9c19ddac50b (patch) | |
tree | 17908eae0e0d3292798b7d98777ff8fb22722cfe /pkg/ui/views/game_keymap.go | |
parent | 0f21452248783d627ec1a3b4e8a3f8f0d9a69a10 (diff) |
Close connection on end game
Diffstat (limited to 'pkg/ui/views/game_keymap.go')
-rw-r--r-- | pkg/ui/views/game_keymap.go | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/pkg/ui/views/game_keymap.go b/pkg/ui/views/game_keymap.go index 5c65a57..6f363d7 100644 --- a/pkg/ui/views/game_keymap.go +++ b/pkg/ui/views/game_keymap.go @@ -35,15 +35,18 @@ var defaultGameKeyMap = gameKeyMap{ func (m GameModel) handleKeyMsg(msg tea.KeyMsg) (GameModel, tea.Cmd) { switch { case key.Matches(msg, m.keys.Abandon): - var outcome string - if m.network.Me() == "peer-1" { - outcome = string(chess.BlackWon) - } else { - outcome = string(chess.WhiteWon) - } + // Abandon game only if it is not finished + if m.game.Outcome == "*" { + var outcome string + if m.network.Me() == "peer-1" { + outcome = string(chess.BlackWon) + } else { + outcome = string(chess.WhiteWon) + } - m.network.Send([]byte("🏳️")) - return m, m.endGame(outcome) + m.network.Send([]byte("🏳️")) + return m, m.endGame(outcome) + } case key.Matches(msg, m.keys.Quit): return m, SwitchModelCmd(NewPlayModel(m.width, m.height)) } @@ -52,9 +55,12 @@ func (m GameModel) handleKeyMsg(msg tea.KeyMsg) (GameModel, tea.Cmd) { } func (m GameModel) renderNavigationButtons() string { - abandonKey := fmt.Sprintf("%s %s", - altCodeStyle.Render(m.keys.Abandon.Help().Key), - m.keys.Abandon.Help().Desc) + var abandonKey string + if m.game.Outcome == "*" { + abandonKey = fmt.Sprintf("%s %s", + altCodeStyle.Render(m.keys.Abandon.Help().Key), + m.keys.Abandon.Help().Desc) + } quitKey := fmt.Sprintf("%s %s", altCodeStyle.Render(m.keys.Quit.Help().Key), |