Send animation triggers on win/loss/draw

This commit is contained in:
sepia 2025-07-29 18:02:58 -05:00
parent e7221390f3
commit f6b64fc569
4 changed files with 16 additions and 2 deletions

View File

@ -1,6 +1,6 @@
const animations = {}; const animations = {};
// animations['victory'] = TODO: implement victory animation // animations['black-victory'] = TODO: implement black victory animation
// animations['defeat'] = TODO: implement defeat animation // animations['white-victory'] = TODO: implement white victory animation
// animations['draw'] = TODO: implement draw animation // animations['draw'] = TODO: implement draw animation
document.addEventListener('htmx:wsAfterMessage', function (e) { document.addEventListener('htmx:wsAfterMessage', function (e) {

View File

@ -2,6 +2,7 @@ import { PlayerConnection } from '../player-connection';
import { broadcastBoard } from '../view/board-renderer'; import { broadcastBoard } from '../view/board-renderer';
import { broadcastButtons } from '../view/button-renderer'; import { broadcastButtons } from '../view/button-renderer';
import { broadcastSound } from '../view/sound-renderer'; import { broadcastSound } from '../view/sound-renderer';
import { broadcastAnimation } from '../view/animation-renderer';
import { broadcastTitle } from '../view/title-renderer'; import { broadcastTitle } from '../view/title-renderer';
import { GameServer } from '../game-server'; import { GameServer } from '../game-server';
import { ActionType, Message } from './messages'; import { ActionType, Message } from './messages';
@ -67,6 +68,7 @@ function handleAcceptDraw(server: GameServer): void {
broadcastButtons(server); broadcastButtons(server);
broadcastTitle(server); broadcastTitle(server);
broadcastSound(server, 'draw'); broadcastSound(server, 'draw');
broadcastAnimation(server, 'draw');
} }
function handleDeclineDraw(server: GameServer): void { function handleDeclineDraw(server: GameServer): void {

View File

@ -2,6 +2,7 @@ import { PlayerConnection } from '../player-connection';
import { broadcastBoard } from '../view/board-renderer'; import { broadcastBoard } from '../view/board-renderer';
import { broadcastButtons } from '../view/button-renderer'; import { broadcastButtons } from '../view/button-renderer';
import { broadcastSound, broadcastSoundToPlayer } from '../view/sound-renderer'; import { broadcastSound, broadcastSoundToPlayer } from '../view/sound-renderer';
import { broadcastAnimation } from '../view/animation-renderer';
import { broadcastTitle } from '../view/title-renderer'; import { broadcastTitle } from '../view/title-renderer';
import { GameServer } from '../game-server'; import { GameServer } from '../game-server';
import { Message } from './messages'; import { Message } from './messages';
@ -72,6 +73,8 @@ export function handleMakeMove(
switch (server.gomoku.winnerColor) { switch (server.gomoku.winnerColor) {
case 'draw': case 'draw':
broadcastSound(server, 'draw'); broadcastSound(server, 'draw');
broadcastAnimation(server, 'draw');
break;
case 'white': case 'white':
if (whiteConn) { if (whiteConn) {
broadcastSoundToPlayer(whiteConn, 'victory'); broadcastSoundToPlayer(whiteConn, 'victory');
@ -79,6 +82,7 @@ export function handleMakeMove(
if (blackConn) { if (blackConn) {
broadcastSoundToPlayer(blackConn, 'defeat'); broadcastSoundToPlayer(blackConn, 'defeat');
} }
broadcastAnimation(server, 'white-victory');
break; break;
case 'black': case 'black':
if (whiteConn) { if (whiteConn) {
@ -87,6 +91,7 @@ export function handleMakeMove(
if (blackConn) { if (blackConn) {
broadcastSoundToPlayer(blackConn, 'victory'); broadcastSoundToPlayer(blackConn, 'victory');
} }
broadcastAnimation(server, 'black-victory');
break; break;
} }
} }

View File

@ -2,6 +2,7 @@ import { PlayerConnection } from '../player-connection';
import { broadcastBoard } from '../view/board-renderer'; import { broadcastBoard } from '../view/board-renderer';
import { broadcastButtons } from '../view/button-renderer'; import { broadcastButtons } from '../view/button-renderer';
import { broadcastSoundToPlayer } from '../view/sound-renderer'; import { broadcastSoundToPlayer } from '../view/sound-renderer';
import { broadcastAnimation } from '../view/animation-renderer';
import { broadcastTitle } from '../view/title-renderer'; import { broadcastTitle } from '../view/title-renderer';
import { GameServer } from '../game-server'; import { GameServer } from '../game-server';
import { Message } from './messages'; import { Message } from './messages';
@ -41,6 +42,12 @@ export function handleResignation(
const otherPlayer = server.connections.get(otherPlayerId); const otherPlayer = server.connections.get(otherPlayerId);
if (otherPlayer) { if (otherPlayer) {
broadcastSoundToPlayer(otherPlayer, 'victory'); broadcastSoundToPlayer(otherPlayer, 'victory');
// Broadcast animation for the winning player's color
if (resigningPlayerColor === 'white') {
broadcastAnimation(server, 'black-victory');
} else {
broadcastAnimation(server, 'white-victory');
}
} }
} }