Newer
Older
PixelPaintWar / packages / shared / src / protocol / payloads / gamePayloads.ts
/**
 * gamePayloads
 * ゲーム進行イベントで利用するペイロード型を定義する
 * プレイヤー差分,マップ差分,開始終了系の契約を集約する
 */
import type { TickData } from "../../domains/game/game.type";
import type { MovePayload as PlayerMovePayload, PlayerData } from "../../domains/player/player.type";

/** GAME_RESULT イベントで送受信するランキング1行 */
export type GameResultRanking = {
  rank: number;
  teamId: number;
  teamName: string;
  paintRate: number;
};

/** GAME_RESULT イベントで送受信する最終結果 */
export type GameResultPayload = {
  rankings: GameResultRanking[];
};

/** UPDATE_PLAYERS イベントで送受信するプレイヤー差分配列 */
export type UpdatePlayersPayload = TickData["playerUpdates"];

/** CURRENT_PLAYERS イベントで送受信するプレイヤー一覧 */
export type CurrentPlayersPayload = TickData["playerUpdates"];

/** UPDATE_MAP_CELLS イベントで送受信するマップ差分配列 */
export type UpdateMapCellsPayload = TickData["cellUpdates"];

/** NEW_PLAYER イベントで送受信するプレイヤー情報 */
export type NewPlayerPayload = PlayerData;

/** REMOVE_PLAYER イベントで送受信するプレイヤーID */
export type RemovePlayerPayload = PlayerData["id"];

/** GAME_START イベントで送受信するゲーム開始情報 */
export type GameStartPayload = { startTime: number };

/** MOVE イベントで送受信する移動入力情報 */
export type MovePayload = PlayerMovePayload;

/** PLACE_BOMB / BOMB_PLACED イベントで送受信する爆弾情報 */
export type BombPlacedPayload = {
  x: number;
  y: number;
  explodeAtElapsedMs: number;
};