@battle-racing/br-common-lib
Version:
Common library for all Battle Racing Repositorios
50 lines (43 loc) • 1.91 kB
text/typescript
import type { Game, GameType } from '../../game';
import type { GameTrack } from '../../gameTrack';
import type { Kart, KartStatus } from '../../kart';
import type { Response } from '../../response';
import type { SocketPowerUpEventsParams } from '../SocketPowerUpEventsParams';
interface BaseGameEventParams {
gameId: Game['id'];
gameType: GameType;
}
// Add the kart: prefix to the SocketPowerUpEventsParams
export type SocketKartPowerUpEventsParams = {
[Key in keyof SocketPowerUpEventsParams as `kart:${Key}`]: SocketPowerUpEventsParams[Key];
};
export interface SocketKartEventsParams {
'kart:updated': { kart: Kart };
// Response from server
'kart:init:response': Response<Kart>;
/** Whenever the Game Track config changed */
'kart:gameTrack:updated': { gameTrack: GameTrack };
/** When the physical button of the game track is pressed */
'kart:gameTrack:emergency:started': undefined;
/** When the physical button of the game track is released */
'kart:gameTrack:emergency:stopped': undefined;
/** Force kart to change status */
'kart:status:change': { status: KartStatus };
}
export interface SocketGameEventParams {
/** Kart is selected for a game */
'kart:game:selected': BaseGameEventParams;
/** Kart Is eliminated from a game (game is in progress) */
'kart:game:eliminated': BaseGameEventParams;
'kart:game:yellow-flag:started': BaseGameEventParams;
'kart:game:yellow-flag:stopped': BaseGameEventParams;
'kart:game:red-flag:started': BaseGameEventParams;
'kart:game:red-flag:stopped': BaseGameEventParams;
// Critical Game Events that require the whole game state to be sent
'kart:game:started': { game: Game };
'kart:game:finished': { game: Game; isWinner: boolean };
'kart:game:sync': { game: Game };
}
export type SocketKartServerToClientEventsParams = SocketKartEventsParams &
SocketGameEventParams &
SocketKartPowerUpEventsParams;