Files
OpenFrontIO/src/core/game/GameUpdates.ts
T
Aotumuri e68d48c3a8 Fixed quick chat text injection (#1144)
## 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>
2025-06-13 09:21:22 -07:00

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;
}