/**
* events
* ソケット通信で利用するイベント名定数を定義する
* クライアントとサーバー間のイベント契約を共有する
*/
import type { TickData } from "../domains/game/game.type";
/** ソケットイベント名の一覧定数 */
export const SocketEvents = {
// 接続・切断イベント名
CONNECT: "connect",
DISCONNECT: "disconnect",
// ロビー・ルーム関連イベント名
JOIN_ROOM: "join-room",
ROOM_JOIN_REJECTED: "room-join-rejected",
ROOM_UPDATE: "room-update",
START_GAME: "start-game",
GAME_START: "game-start",
READY_FOR_GAME: "ready-for-game",
// ゲームプレイ関連イベント名
CURRENT_PLAYERS: "current_players",
NEW_PLAYER: "new_player",
// 1ティック分のプレイヤー状態を配列でまとめて通知する
UPDATE_PLAYERS: "update_players",
REMOVE_PLAYER: "remove_player",
MOVE: "move",
UPDATE_MAP_CELLS: "update_map_cells",
// 時間同期・ゲーム進行関連
PING: "ping", // クライアントからの時刻同期リクエスト(ラグ計算用)
PONG: "pong", // サーバーからの現在時刻レスポンス
GAME_END: "game-end", // 3分経過時のゲーム終了通知
} as const;
/** UPDATE_PLAYERS イベントで送受信するプレイヤー差分配列 */
export type UpdatePlayersPayload = TickData["playerUpdates"];