diff --git a/src/client/graphics/layers/ChatIntegration.ts b/src/client/graphics/layers/ChatIntegration.ts
index b81e5caca..f8993604b 100644
--- a/src/client/graphics/layers/ChatIntegration.ts
+++ b/src/client/graphics/layers/ChatIntegration.ts
@@ -1,16 +1,16 @@
-import { EventBus } from "../../../core/EventBus";
+import { COLORS, MenuElement, MenuElementParams } from "./RadialMenuElements";
+import { ChatModal, QuickChatPhrase, quickChatPhrases } from "./ChatModal";
import { GameView, PlayerView } from "../../../core/game/GameView";
+import { EventBus } from "../../../core/EventBus";
import { SendQuickChatEvent } from "../../Transport";
import { translateText } from "../../Utils";
-import { ChatModal, QuickChatPhrase, quickChatPhrases } from "./ChatModal";
-import { COLORS, MenuElement, MenuElementParams } from "./RadialMenuElements";
export class ChatIntegration {
- private ctModal: ChatModal;
+ private readonly ctModal: ChatModal;
constructor(
- private game: GameView,
- private eventBus: EventBus,
+ private readonly game: GameView,
+ private readonly eventBus: EventBus,
) {
this.ctModal = document.querySelector("chat-modal") as ChatModal;
diff --git a/src/client/graphics/layers/ChatModal.ts b/src/client/graphics/layers/ChatModal.ts
index 020ee8ac1..aed36bfa8 100644
--- a/src/client/graphics/layers/ChatModal.ts
+++ b/src/client/graphics/layers/ChatModal.ts
@@ -1,13 +1,11 @@
+import { GameView, PlayerView } from "../../../core/game/GameView";
import { LitElement, html } from "lit";
import { customElement, query } from "lit/decorators.js";
-
-import { PlayerType } from "../../../core/game/Game";
-import { GameView, PlayerView } from "../../../core/game/GameView";
-
-import quickChatData from "../../../../resources/QuickChat.json";
-import { EventBus } from "../../../core/EventBus";
import { CloseViewEvent } from "../../InputHandler";
+import { EventBus } from "../../../core/EventBus";
+import { PlayerType } from "../../../core/game/Game";
import { SendQuickChatEvent } from "../../Transport";
+import quickChatData from "../../../../resources/QuickChat.json";
import { translateText } from "../../Utils";
export type QuickChatPhrase = {
@@ -21,7 +19,7 @@ export const quickChatPhrases: QuickChatPhrases = quickChatData;
@customElement("chat-modal")
export class ChatModal extends LitElement {
- @query("o-modal") private modalEl!: HTMLElement & {
+ @query("o-modal") private readonly modalEl!: HTMLElement & {
open: () => void;
close: () => void;
};
diff --git a/src/client/graphics/layers/ControlPanel.ts b/src/client/graphics/layers/ControlPanel.ts
index ea3ed9fdc..1e790f216 100644
--- a/src/client/graphics/layers/ControlPanel.ts
+++ b/src/client/graphics/layers/ControlPanel.ts
@@ -1,14 +1,14 @@
import { LitElement, html } from "lit";
import { customElement, state } from "lit/decorators.js";
-import { translateText } from "../../../client/Utils";
-import { EventBus } from "../../../core/EventBus";
-import { Gold } from "../../../core/game/Game";
-import { GameView } from "../../../core/game/GameView";
-import { ClientID } from "../../../core/Schemas";
-import { AttackRatioEvent } from "../../InputHandler";
import { renderNumber, renderTroops } from "../../Utils";
-import { UIState } from "../UIState";
+import { AttackRatioEvent } from "../../InputHandler";
+import { ClientID } from "../../../core/Schemas";
+import { EventBus } from "../../../core/EventBus";
+import { GameView } from "../../../core/game/GameView";
+import { Gold } from "../../../core/game/Game";
import { Layer } from "./Layer";
+import { UIState } from "../UIState";
+import { translateText } from "../../../client/Utils";
@customElement("control-panel")
export class ControlPanel extends LitElement implements Layer {
@@ -162,7 +162,8 @@ export class ControlPanel extends LitElement implements Layer {
e.preventDefault()}
>
diff --git a/src/client/graphics/layers/EmojiTable.ts b/src/client/graphics/layers/EmojiTable.ts
index aefec7ade..441cfc130 100644
--- a/src/client/graphics/layers/EmojiTable.ts
+++ b/src/client/graphics/layers/EmojiTable.ts
@@ -1,12 +1,12 @@
+import { CloseViewEvent, ShowEmojiMenuEvent } from "../../InputHandler";
+import { GameView, PlayerView } from "../../../core/game/GameView";
import { LitElement, html } from "lit";
import { customElement, state } from "lit/decorators.js";
-import { EventBus } from "../../../core/EventBus";
-import { AllPlayers } from "../../../core/game/Game";
-import { GameView, PlayerView } from "../../../core/game/GameView";
-import { TerraNulliusImpl } from "../../../core/game/TerraNulliusImpl";
import { emojiTable, flattenedEmojiTable } from "../../../core/Util";
-import { CloseViewEvent, ShowEmojiMenuEvent } from "../../InputHandler";
+import { AllPlayers } from "../../../core/game/Game";
+import { EventBus } from "../../../core/EventBus";
import { SendEmojiIntentEvent } from "../../Transport";
+import { TerraNulliusImpl } from "../../../core/game/TerraNulliusImpl";
import { TransformHandler } from "../TransformHandler";
@customElement("emoji-table")
@@ -64,16 +64,17 @@ export class EmojiTable extends LitElement {
return html`
e.preventDefault()}
@wheel=${(e: WheelEvent) => e.stopPropagation()}
>
`
@@ -1015,7 +1015,9 @@ export class EventsDisplay extends LitElement implements Layer {
html`
{
+ private readonly handleMouseDown = (e: MouseEvent) => {
// Don't start dragging if clicking on close button
if ((e.target as HTMLElement).classList.contains("close-button")) {
return;
@@ -135,7 +135,7 @@ export class FPSDisplay extends LitElement implements Layer {
e.preventDefault();
};
- private handleMouseMove = (e: MouseEvent) => {
+ private readonly handleMouseMove = (e: MouseEvent) => {
if (!this.isDragging) return;
const newX = e.clientX - this.dragStart.x;
@@ -153,7 +153,7 @@ export class FPSDisplay extends LitElement implements Layer {
this.requestUpdate();
};
- private handleMouseUp = () => {
+ private readonly handleMouseUp = () => {
this.isDragging = false;
document.removeEventListener("mousemove", this.handleMouseMove);
document.removeEventListener("mouseup", this.handleMouseUp);
diff --git a/src/client/graphics/layers/FxLayer.ts b/src/client/graphics/layers/FxLayer.ts
index 877ece3da..982c204bb 100644
--- a/src/client/graphics/layers/FxLayer.ts
+++ b/src/client/graphics/layers/FxLayer.ts
@@ -1,34 +1,35 @@
-import { Theme } from "../../../core/configuration/Config";
-import { UnitType } from "../../../core/game/Game";
import {
BonusEventUpdate,
ConquestUpdate,
GameUpdateType,
RailroadUpdate,
} from "../../../core/game/GameUpdates";
-import { GameView, UnitView } from "../../../core/game/GameView";
-import { renderNumber } from "../../Utils";
-import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader";
-import { conquestFxFactory } from "../fx/ConquestFx";
import { Fx, FxType } from "../fx/Fx";
-import { nukeFxFactory, ShockwaveFx } from "../fx/NukeFx";
+import { GameView, UnitView } from "../../../core/game/GameView";
+import { ShockwaveFx, nukeFxFactory } from "../fx/NukeFx";
+import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader";
+import { Layer } from "./Layer";
import { SpriteFx } from "../fx/SpriteFx";
import { TextFx } from "../fx/TextFx";
+import { Theme } from "../../../core/configuration/Config";
import { UnitExplosionFx } from "../fx/UnitExplosionFx";
-import { Layer } from "./Layer";
+import { UnitType } from "../../../core/game/Game";
+import { conquestFxFactory } from "../fx/ConquestFx";
+import { renderNumber } from "../../Utils";
+
export class FxLayer implements Layer {
private canvas: HTMLCanvasElement;
private context: CanvasRenderingContext2D;
private lastRefresh = 0;
- private refreshRate = 10;
- private theme: Theme;
- private animatedSpriteLoader: AnimatedSpriteLoader =
+ private readonly refreshRate = 10;
+ private readonly theme: Theme;
+ private readonly animatedSpriteLoader: AnimatedSpriteLoader =
new AnimatedSpriteLoader();
private allFx: Fx[] = [];
- constructor(private game: GameView) {
+ constructor(private readonly game: GameView) {
this.theme = this.game.config().theme();
}
@@ -70,11 +71,11 @@ export class FxLayer implements Layer {
// Only display text fx for the current player
return;
}
- const tile = bonus.tile;
+ const { tile } = bonus;
const x = this.game.x(tile);
let y = this.game.y(tile);
- const gold = bonus.gold;
- const troops = bonus.troops;
+ const { gold } = bonus;
+ const { troops } = bonus;
if (gold > 0) {
const shortened = renderNumber(gold, 0);
@@ -148,7 +149,7 @@ export class FxLayer implements Layer {
}
onRailroadEvent(railroad: RailroadUpdate) {
- const railTiles = railroad.railTiles;
+ const { railTiles } = railroad;
for (const rail of railTiles) {
// No need for pseudorandom, this is fx
const chanceFx = Math.floor(Math.random() * 3);
diff --git a/src/client/graphics/layers/GameLeftSidebar.ts b/src/client/graphics/layers/GameLeftSidebar.ts
index dd9b00e98..fd85aeb2b 100644
--- a/src/client/graphics/layers/GameLeftSidebar.ts
+++ b/src/client/graphics/layers/GameLeftSidebar.ts
@@ -1,14 +1,14 @@
-import { Colord } from "colord";
-import { html, LitElement } from "lit";
+import { LitElement, html } from "lit";
import { customElement, state } from "lit/decorators.js";
+import { Colord } from "colord";
+import { GameMode } from "../../../core/game/Game";
+import { GameView } from "../../../core/game/GameView";
+import { Layer } from "./Layer";
import leaderboardRegularIcon from "../../../../resources/images/LeaderboardIconRegularWhite.svg";
import leaderboardSolidIcon from "../../../../resources/images/LeaderboardIconSolidWhite.svg";
import teamRegularIcon from "../../../../resources/images/TeamIconRegularWhite.svg";
import teamSolidIcon from "../../../../resources/images/TeamIconSolidWhite.svg";
-import { GameMode } from "../../../core/game/Game";
-import { GameView } from "../../../core/game/GameView";
import { translateText } from "../../Utils";
-import { Layer } from "./Layer";
@customElement("game-left-sidebar")
export class GameLeftSidebar extends LitElement implements Layer {
@@ -87,9 +87,11 @@ export class GameLeftSidebar extends LitElement implements Layer {
render() {
return html`