mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 11:50:42 +00:00
e68d48c3a8
## Description: https://github.com/openfrontio/OpenFrontIO/issues/1035 Fixes #1035 ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced - [x] I understand that submitting code with bugs that could have been caught through manual testing blocks releases and new features for all contributors ## Please put your Discord username so you can be contacted if a bug or regression is found: .w. --------- Co-authored-by: Scott Anderson <scottanderson@users.noreply.github.com> Co-authored-by: evanpelle <evanpelle@gmail.com>
201 lines
4.0 KiB
TypeScript
201 lines
4.0 KiB
TypeScript
import { AllPlayersStats, ClientID } from "../Schemas";
|
|
import {
|
|
EmojiMessage,
|
|
GameUpdates,
|
|
Gold,
|
|
MessageType,
|
|
NameViewData,
|
|
PlayerID,
|
|
PlayerType,
|
|
Team,
|
|
Tick,
|
|
UnitType,
|
|
} from "./Game";
|
|
import { TileRef, TileUpdate } from "./GameMap";
|
|
|
|
export interface GameUpdateViewData {
|
|
tick: number;
|
|
updates: GameUpdates;
|
|
packedTileUpdates: BigUint64Array;
|
|
playerNameViewData: Record<number, NameViewData>;
|
|
}
|
|
|
|
export interface ErrorUpdate {
|
|
errMsg: string;
|
|
stack?: string;
|
|
}
|
|
|
|
export enum GameUpdateType {
|
|
Tile,
|
|
Unit,
|
|
Player,
|
|
DisplayEvent,
|
|
DisplayChatEvent,
|
|
AllianceRequest,
|
|
AllianceRequestReply,
|
|
BrokeAlliance,
|
|
AllianceExpired,
|
|
TargetPlayer,
|
|
Emoji,
|
|
Win,
|
|
Hash,
|
|
UnitIncoming,
|
|
}
|
|
|
|
export type GameUpdate =
|
|
| TileUpdateWrapper
|
|
| UnitUpdate
|
|
| PlayerUpdate
|
|
| AllianceRequestUpdate
|
|
| AllianceRequestReplyUpdate
|
|
| BrokeAllianceUpdate
|
|
| AllianceExpiredUpdate
|
|
| DisplayMessageUpdate
|
|
| DisplayChatMessageUpdate
|
|
| TargetPlayerUpdate
|
|
| EmojiUpdate
|
|
| WinUpdate
|
|
| HashUpdate
|
|
| UnitIncomingUpdate;
|
|
|
|
export interface TileUpdateWrapper {
|
|
type: GameUpdateType.Tile;
|
|
update: TileUpdate;
|
|
}
|
|
|
|
export interface UnitUpdate {
|
|
type: GameUpdateType.Unit;
|
|
unitType: UnitType;
|
|
troops: number;
|
|
id: number;
|
|
ownerID: number;
|
|
lastOwnerID?: number;
|
|
// TODO: make these tilerefs
|
|
pos: TileRef;
|
|
lastPos: TileRef;
|
|
isActive: boolean;
|
|
reachedTarget: boolean;
|
|
retreating: boolean;
|
|
targetUnitId?: number; // Only for trade ships
|
|
targetTile?: TileRef; // Only for nukes
|
|
health?: number;
|
|
constructionType?: UnitType;
|
|
missileTimerQueue: number[];
|
|
readyMissileCount: number;
|
|
level: number;
|
|
}
|
|
|
|
export interface AttackUpdate {
|
|
attackerID: number;
|
|
targetID: number;
|
|
troops: number;
|
|
id: string;
|
|
retreating: boolean;
|
|
}
|
|
|
|
export interface PlayerUpdate {
|
|
type: GameUpdateType.Player;
|
|
nameViewData?: NameViewData;
|
|
clientID: ClientID | null;
|
|
flag: string | undefined;
|
|
name: string;
|
|
displayName: string;
|
|
id: PlayerID;
|
|
team?: Team;
|
|
smallID: number;
|
|
playerType: PlayerType;
|
|
isAlive: boolean;
|
|
isDisconnected: boolean;
|
|
tilesOwned: number;
|
|
gold: Gold;
|
|
population: number;
|
|
workers: number;
|
|
troops: number;
|
|
targetTroopRatio: number;
|
|
allies: number[];
|
|
embargoes: Set<PlayerID>;
|
|
isTraitor: boolean;
|
|
targets: number[];
|
|
outgoingEmojis: EmojiMessage[];
|
|
outgoingAttacks: AttackUpdate[];
|
|
incomingAttacks: AttackUpdate[];
|
|
outgoingAllianceRequests: PlayerID[];
|
|
hasSpawned: boolean;
|
|
betrayals?: bigint;
|
|
}
|
|
|
|
export interface AllianceRequestUpdate {
|
|
type: GameUpdateType.AllianceRequest;
|
|
requestorID: number;
|
|
recipientID: number;
|
|
createdAt: Tick;
|
|
}
|
|
|
|
export interface AllianceRequestReplyUpdate {
|
|
type: GameUpdateType.AllianceRequestReply;
|
|
request: AllianceRequestUpdate;
|
|
accepted: boolean;
|
|
}
|
|
|
|
export interface BrokeAllianceUpdate {
|
|
type: GameUpdateType.BrokeAlliance;
|
|
traitorID: number;
|
|
betrayedID: number;
|
|
}
|
|
|
|
export interface AllianceExpiredUpdate {
|
|
type: GameUpdateType.AllianceExpired;
|
|
player1ID: number;
|
|
player2ID: number;
|
|
}
|
|
|
|
export interface TargetPlayerUpdate {
|
|
type: GameUpdateType.TargetPlayer;
|
|
playerID: number;
|
|
targetID: number;
|
|
}
|
|
|
|
export interface EmojiUpdate {
|
|
type: GameUpdateType.Emoji;
|
|
emoji: EmojiMessage;
|
|
}
|
|
|
|
export interface DisplayMessageUpdate {
|
|
type: GameUpdateType.DisplayEvent;
|
|
message: string;
|
|
messageType: MessageType;
|
|
goldAmount?: bigint;
|
|
playerID: number | null;
|
|
}
|
|
|
|
export type DisplayChatMessageUpdate = {
|
|
type: GameUpdateType.DisplayChatEvent;
|
|
key: string;
|
|
category: string;
|
|
target: string | undefined;
|
|
playerID: number | null;
|
|
isFrom: boolean;
|
|
recipient: string;
|
|
};
|
|
|
|
export interface WinUpdate {
|
|
type: GameUpdateType.Win;
|
|
allPlayersStats: AllPlayersStats;
|
|
// Player id or team name.
|
|
winner: ["player", number] | ["team", Team];
|
|
}
|
|
|
|
export interface HashUpdate {
|
|
type: GameUpdateType.Hash;
|
|
tick: Tick;
|
|
hash: number;
|
|
}
|
|
|
|
export interface UnitIncomingUpdate {
|
|
type: GameUpdateType.UnitIncoming;
|
|
unitID: number;
|
|
message: string;
|
|
messageType: MessageType;
|
|
playerID: number;
|
|
}
|