summaryrefslogtreecommitdiff
path: root/pkg/ui/views/game_keymap.go
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2025-04-18 12:46:00 +0200
committerSanto Cariotti <santo@dcariotti.me>2025-04-18 12:46:00 +0200
commitfafd0111465ded6bfec5c0d91d7dd9c19ddac50b (patch)
tree17908eae0e0d3292798b7d98777ff8fb22722cfe /pkg/ui/views/game_keymap.go
parent0f21452248783d627ec1a3b4e8a3f8f0d9a69a10 (diff)
Close connection on end game
Diffstat (limited to 'pkg/ui/views/game_keymap.go')
-rw-r--r--pkg/ui/views/game_keymap.go28
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),