mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 15:20:43 +00:00
171 lines
4.3 KiB
TypeScript
171 lines
4.3 KiB
TypeScript
import {
|
|
BuildableUnit,
|
|
PlayerActions,
|
|
PlayerBorderTiles,
|
|
PlayerBuildableUnitType,
|
|
PlayerID,
|
|
PlayerProfile,
|
|
} from "../game/Game";
|
|
import { TileRef } from "../game/GameMap";
|
|
import { GameUpdateViewData } from "../game/GameUpdates";
|
|
import { ClientID, GameStartInfo, Turn } from "../Schemas";
|
|
|
|
export type WorkerMessageType =
|
|
| "init"
|
|
| "initialized"
|
|
| "turn"
|
|
| "game_update"
|
|
| "game_update_batch"
|
|
| "player_actions"
|
|
| "player_actions_result"
|
|
| "player_buildables"
|
|
| "player_buildables_result"
|
|
| "player_profile"
|
|
| "player_profile_result"
|
|
| "player_border_tiles"
|
|
| "player_border_tiles_result"
|
|
| "attack_average_position"
|
|
| "attack_average_position_result"
|
|
| "attack_cluster_positions"
|
|
| "attack_cluster_positions_result"
|
|
| "transport_ship_spawn"
|
|
| "transport_ship_spawn_result";
|
|
|
|
// Base interface for all messages
|
|
interface BaseWorkerMessage {
|
|
type: WorkerMessageType;
|
|
id?: string;
|
|
}
|
|
|
|
// Messages from main thread to worker
|
|
export interface InitMessage extends BaseWorkerMessage {
|
|
type: "init";
|
|
gameStartInfo: GameStartInfo;
|
|
clientID: ClientID | undefined;
|
|
}
|
|
|
|
export interface TurnMessage extends BaseWorkerMessage {
|
|
type: "turn";
|
|
turn: Turn;
|
|
}
|
|
|
|
// Messages from worker to main thread
|
|
export interface InitializedMessage extends BaseWorkerMessage {
|
|
type: "initialized";
|
|
}
|
|
|
|
export interface GameUpdateMessage extends BaseWorkerMessage {
|
|
type: "game_update";
|
|
gameUpdate: GameUpdateViewData;
|
|
}
|
|
|
|
export interface GameUpdateBatchMessage extends BaseWorkerMessage {
|
|
type: "game_update_batch";
|
|
gameUpdates: GameUpdateViewData[];
|
|
}
|
|
|
|
export interface PlayerActionsMessage extends BaseWorkerMessage {
|
|
type: "player_actions";
|
|
playerID: PlayerID;
|
|
x?: number;
|
|
y?: number;
|
|
units?: readonly PlayerBuildableUnitType[] | null;
|
|
}
|
|
|
|
export interface PlayerActionsResultMessage extends BaseWorkerMessage {
|
|
type: "player_actions_result";
|
|
result: PlayerActions;
|
|
}
|
|
|
|
export interface PlayerBuildablesMessage extends BaseWorkerMessage {
|
|
type: "player_buildables";
|
|
playerID: PlayerID;
|
|
x?: number;
|
|
y?: number;
|
|
units?: readonly PlayerBuildableUnitType[];
|
|
}
|
|
|
|
export interface PlayerBuildablesResultMessage extends BaseWorkerMessage {
|
|
type: "player_buildables_result";
|
|
result: BuildableUnit[];
|
|
}
|
|
|
|
export interface PlayerProfileMessage extends BaseWorkerMessage {
|
|
type: "player_profile";
|
|
playerID: number;
|
|
}
|
|
|
|
export interface PlayerProfileResultMessage extends BaseWorkerMessage {
|
|
type: "player_profile_result";
|
|
result: PlayerProfile;
|
|
}
|
|
|
|
export interface PlayerBorderTilesMessage extends BaseWorkerMessage {
|
|
type: "player_border_tiles";
|
|
playerID: PlayerID;
|
|
}
|
|
|
|
export interface PlayerBorderTilesResultMessage extends BaseWorkerMessage {
|
|
type: "player_border_tiles_result";
|
|
result: PlayerBorderTiles;
|
|
}
|
|
|
|
export interface AttackAveragePositionMessage extends BaseWorkerMessage {
|
|
type: "attack_average_position";
|
|
playerID: number;
|
|
attackID: string;
|
|
}
|
|
|
|
export interface AttackAveragePositionResultMessage extends BaseWorkerMessage {
|
|
type: "attack_average_position_result";
|
|
x: number | null;
|
|
y: number | null;
|
|
}
|
|
|
|
export interface AttackClusterPositionsMessage extends BaseWorkerMessage {
|
|
type: "attack_cluster_positions";
|
|
playerID: number;
|
|
attackID?: string;
|
|
}
|
|
|
|
export interface AttackClusterPositionsResultMessage extends BaseWorkerMessage {
|
|
type: "attack_cluster_positions_result";
|
|
attacks: { id: string; clusters: { x: number; y: number }[] }[];
|
|
}
|
|
|
|
export interface TransportShipSpawnMessage extends BaseWorkerMessage {
|
|
type: "transport_ship_spawn";
|
|
playerID: PlayerID;
|
|
targetTile: TileRef;
|
|
}
|
|
|
|
export interface TransportShipSpawnResultMessage extends BaseWorkerMessage {
|
|
type: "transport_ship_spawn_result";
|
|
result: TileRef | false;
|
|
}
|
|
|
|
// Union types for type safety
|
|
export type MainThreadMessage =
|
|
| InitMessage
|
|
| TurnMessage
|
|
| PlayerActionsMessage
|
|
| PlayerBuildablesMessage
|
|
| PlayerProfileMessage
|
|
| PlayerBorderTilesMessage
|
|
| AttackAveragePositionMessage
|
|
| AttackClusterPositionsMessage
|
|
| TransportShipSpawnMessage;
|
|
|
|
// Message send from worker
|
|
export type WorkerMessage =
|
|
| InitializedMessage
|
|
| GameUpdateMessage
|
|
| GameUpdateBatchMessage
|
|
| PlayerActionsResultMessage
|
|
| PlayerBuildablesResultMessage
|
|
| PlayerProfileResultMessage
|
|
| PlayerBorderTilesResultMessage
|
|
| AttackAveragePositionResultMessage
|
|
| AttackClusterPositionsResultMessage
|
|
| TransportShipSpawnResultMessage;
|