commit 4dc7c352221c0620fa799ae2629bd375a97eb1c7
parent 3cba458e2b08f60d0e81087e8672573448b88b72
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sun, 11 Jun 2023 21:27:12 -0700
Fix "en passant" ui bug
Diffstat:
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"