dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 4dc7c352221c0620fa799ae2629bd375a97eb1c7
parent 3cba458e2b08f60d0e81087e8672573448b88b72
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 11 Jun 2023 21:27:12 -0700

Fix "en passant" ui bug

Diffstat:
Mpkg/web/handlers/handlers.go | 11+++++++++++
Mpkg/web/handlers/interceptors/chess.go | 38++++++++++++++++++++++++++------------
2 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -4918,6 +4918,13 @@ func chessGameQueenSideCastle(g *interceptors.ChessGame) { g.MoveStr("Nc6") } +func chessGameEnPassant(g *interceptors.ChessGame) { + g.MoveStr("d4") + g.MoveStr("f6") + g.MoveStr("d5") + g.MoveStr("e5") +} + func ChessGameFormHandler(c echo.Context) error { key := c.Param("key") out := cssReset @@ -5196,6 +5203,10 @@ Loop: } else if payload.Turn == chess.Black && payload.Move.HasTag(chess.QueenSideCastle) { animate(chess.A8, chess.D8, blackQueenSideRookID) } + // En passant + if payload.EnPassant != "" { + send(fmt.Sprintf(`<style>#%s { display: none; }</style>`, payload.EnPassant)) + } // Render last move send(`<style>.square { background-color: transparent !important; }</style>`) diff --git a/pkg/web/handlers/interceptors/chess.go b/pkg/web/handlers/interceptors/chess.go @@ -25,12 +25,13 @@ import ( ) type ChessMove struct { - IDStr1 string - IDStr2 string - CheckW bool - CheckB bool - Move chess.Move - Turn chess.Color + IDStr1 string + IDStr2 string + EnPassant string + CheckW bool + CheckB bool + Move chess.Move + Turn chess.Color } var ChessPubSub = pubsub.NewPubSub[ChessMove]() @@ -497,16 +498,24 @@ func (b *Chess) SendMove(gameKey string, userID database.UserID, g *ChessGame, c g.lastUpdated = time.Now() idStr2 := g.PiecesCache[mov.S2()] idStr1 := g.PiecesCache[mov.S1()] + idStr3 := "" + + if mov.S1().Rank() == 4 && mov.S2().Rank() == 5 && mov.HasTag(chess.EnPassant) { + idStr3 = g.PiecesCache[chess.NewSquare(mov.S2().File(), 4)] + } else if mov.S1().Rank() == 3 && mov.S2().Rank() == 2 && mov.HasTag(chess.EnPassant) { + idStr3 = g.PiecesCache[chess.NewSquare(mov.S2().File(), 3)] + } g.updatePiecesCache(mov) chessMov := ChessMove{ - IDStr1: idStr1, - IDStr2: idStr2, - CheckW: g.Game.Position().Turn() == chess.White && mov.HasTag(chess.Check), - CheckB: g.Game.Position().Turn() == chess.Black && mov.HasTag(chess.Check), - Move: mov, - Turn: turn, + IDStr1: idStr1, + IDStr2: idStr2, + EnPassant: idStr3, + CheckW: g.Game.Position().Turn() == chess.White && mov.HasTag(chess.Check), + CheckB: g.Game.Position().Turn() == chess.Black && mov.HasTag(chess.Check), + Move: mov, + Turn: turn, } ChessPubSub.Pub(gameKey, chessMov) @@ -545,6 +554,11 @@ func (g *ChessGame) updatePiecesCache(mov chess.Move) { delete(g.PiecesCache, mov.S1()) delete(g.PiecesCache, mov.S2()) g.PiecesCache[mov.S2()] = idStr1 + if mov.S1().Rank() == 5 && mov.S2().Rank() == 6 && mov.HasTag(chess.EnPassant) { + delete(g.PiecesCache, chess.NewSquare(mov.S2().File(), 5)) + } else if mov.S1().Rank() == 4 && mov.S2().Rank() == 3 && mov.HasTag(chess.EnPassant) { + delete(g.PiecesCache, chess.NewSquare(mov.S2().File(), 4)) + } if mov.S1() == chess.E1 && mov.HasTag(chess.KingSideCastle) { delete(g.PiecesCache, chess.H1) g.PiecesCache[chess.F1] = "img_7"