diff --git a/eslint.config.js b/eslint.config.js index 1de7f5897..55ec53e65 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,13 +1,13 @@ import eslintConfigPrettier from "eslint-config-prettier/flat"; +import eslintPluginLocal from "./eslint-plugin-local/plugin.js"; +import { fileURLToPath } from "node:url"; import globals from "globals"; +import { includeIgnoreFile } from "@eslint/compat"; +import jest from "eslint-plugin-jest"; import path from "node:path"; import pluginJs from "@eslint/js"; import stylistic from "@stylistic/eslint-plugin"; -import jest from "eslint-plugin-jest"; import tseslint from "typescript-eslint"; -import { fileURLToPath } from "node:url"; -import { includeIgnoreFile } from "@eslint/compat"; -import eslintPluginLocal from "./eslint-plugin-local/plugin.js"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -116,7 +116,7 @@ export default [ "no-undef": "error", "no-unused-vars": "off", // @typescript-eslint/no-unused-vars "quote-props": ["error", "consistent-as-needed"], - // 'sort-imports': 'error', // TODO: Enable this rule, https://github.com/openfrontio/OpenFrontIO/issues/1787 + 'sort-imports': 'error', "space-before-blocks": ["error", "always"], "space-before-function-paren": ["error", { anonymous: "always", diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index 907dfd4f6..7379e267f 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -1,30 +1,3 @@ -import { translateText } from "../client/Utils"; -import { EventBus } from "../core/EventBus"; -import { - ClientID, - GameID, - GameRecord, - GameStartInfo, - PlayerRecord, - ServerMessage, -} from "../core/Schemas"; -import { createGameRecord } from "../core/Util"; -import { ServerConfig } from "../core/configuration/Config"; -import { getConfig } from "../core/configuration/ConfigLoader"; -import { PlayerActions, UnitType } from "../core/game/Game"; -import { TileRef } from "../core/game/GameMap"; -import { GameMapLoader } from "../core/game/GameMapLoader"; -import { - ErrorUpdate, - GameUpdateType, - GameUpdateViewData, - HashUpdate, - WinUpdate, -} from "../core/game/GameUpdates"; -import { GameView, PlayerView } from "../core/game/GameView"; -import { loadTerrainMap, TerrainMapData } from "../core/game/TerrainMapLoader"; -import { UserSettings } from "../core/game/UserSettings"; -import { WorkerClient } from "../core/worker/WorkerClient"; import { AutoUpgradeEvent, DoBoatAttackEvent, @@ -33,9 +6,24 @@ import { MouseMoveEvent, MouseUpEvent, } from "./InputHandler"; -import { endGame, startGame, startTime } from "./LocalPersistantStats"; -import { getPersistentID } from "./Main"; -import { terrainMapFileLoader } from "./TerrainMapFileLoader"; +import { + ClientID, + GameID, + GameRecord, + GameStartInfo, + PlayerRecord, + ServerMessage, +} from "../core/Schemas"; +import { + ErrorUpdate, + GameUpdateType, + GameUpdateViewData, + HashUpdate, + WinUpdate, +} from "../core/game/GameUpdates"; +import { GameRenderer, createRenderer } from "./graphics/GameRenderer"; +import { GameView, PlayerView } from "../core/game/GameView"; +import { PlayerActions, UnitType } from "../core/game/Game"; import { SendAttackIntentEvent, SendBoatAttackIntentEvent, @@ -44,8 +32,20 @@ import { SendUpgradeStructureIntentEvent, Transport, } from "./Transport"; +import { TerrainMapData, loadTerrainMap } from "../core/game/TerrainMapLoader"; +import { endGame, startGame, startTime } from "./LocalPersistantStats"; +import { EventBus } from "../core/EventBus"; +import { GameMapLoader } from "../core/game/GameMapLoader"; +import { ServerConfig } from "../core/configuration/Config"; +import { TileRef } from "../core/game/GameMap"; +import { UserSettings } from "../core/game/UserSettings"; +import { WorkerClient } from "../core/worker/WorkerClient"; import { createCanvas } from "./Utils"; -import { createRenderer, GameRenderer } from "./graphics/GameRenderer"; +import { createGameRecord } from "../core/Util"; +import { getConfig } from "../core/configuration/ConfigLoader"; +import { getPersistentID } from "./Main"; +import { terrainMapFileLoader } from "./TerrainMapFileLoader"; +import { translateText } from "../client/Utils"; export type LobbyConfig = { serverConfig: ServerConfig; diff --git a/src/client/Cosmetics.ts b/src/client/Cosmetics.ts index 1d5389f57..bc9f9948b 100644 --- a/src/client/Cosmetics.ts +++ b/src/client/Cosmetics.ts @@ -1,10 +1,10 @@ -import { z } from "zod"; +import { Cosmetics, CosmeticsSchema, Pattern } from "../core/CosmeticSchemas"; import { StripeCreateCheckoutSessionResponseSchema, UserMeResponse, } from "../core/ApiSchemas"; -import { Cosmetics, CosmeticsSchema, Pattern } from "../core/CosmeticSchemas"; import { getApiBase, getAuthHeader } from "./jwt"; +import { z } from "zod"; export async function patterns( userMe: UserMeResponse | null, diff --git a/src/client/HelpModal.ts b/src/client/HelpModal.ts index 2c9e33cbb..ba75a2fda 100644 --- a/src/client/HelpModal.ts +++ b/src/client/HelpModal.ts @@ -1,8 +1,8 @@ +import "./components/Difficulties"; +import "./components/Maps"; import { LitElement, html } from "lit"; import { customElement, query } from "lit/decorators.js"; import { getAltKey, getModifierKey, translateText } from "../client/Utils"; -import "./components/Difficulties"; -import "./components/Maps"; @customElement("help-modal") export class HelpModal extends LitElement { diff --git a/src/client/HostLobbyModal.ts b/src/client/HostLobbyModal.ts index 2d125eeb3..df63aca3c 100644 --- a/src/client/HostLobbyModal.ts +++ b/src/client/HostLobbyModal.ts @@ -1,9 +1,14 @@ /* eslint-disable max-lines */ -import { LitElement, html } from "lit"; -import { customElement, query, state } from "lit/decorators.js"; -import randomMap from "../../resources/images/RandomMap.webp"; -import { translateText } from "../client/Utils"; -import { getServerConfigFromClient } from "../core/configuration/ConfigLoader"; +import "./components/Difficulties"; +import "./components/Maps"; +import "./components/baseComponents/Modal"; +import { + ClientInfo, + GameConfig, + GameInfo, + GameInfoSchema, + TeamCountConfig, +} from "../core/Schemas"; import { Difficulty, Duos, @@ -14,21 +19,16 @@ import { UnitType, mapCategories, } from "../core/game/Game"; -import { UserSettings } from "../core/game/UserSettings"; -import { - ClientInfo, - GameConfig, - GameInfo, - GameInfoSchema, - TeamCountConfig, -} from "../core/Schemas"; -import { generateID } from "../core/Util"; -import "./components/baseComponents/Modal"; -import "./components/Difficulties"; +import { LitElement, html } from "lit"; +import { customElement, query, state } from "lit/decorators.js"; import { DifficultyDescription } from "./components/Difficulties"; -import "./components/Maps"; import { JoinLobbyEvent } from "./Main"; +import { UserSettings } from "../core/game/UserSettings"; +import { generateID } from "../core/Util"; +import { getServerConfigFromClient } from "../core/configuration/ConfigLoader"; +import randomMap from "../../resources/images/RandomMap.webp"; import { renderUnitTypeOptions } from "./utilities/RenderUnitTypeOptions"; +import { translateText } from "../client/Utils"; @customElement("host-lobby-modal") export class HostLobbyModal extends LitElement { diff --git a/src/client/InputHandler.ts b/src/client/InputHandler.ts index eaaf4fec6..8e85cbbf5 100644 --- a/src/client/InputHandler.ts +++ b/src/client/InputHandler.ts @@ -1,8 +1,8 @@ import { EventBus, GameEvent } from "../core/EventBus"; +import { ReplaySpeedMultiplier } from "./utilities/ReplaySpeedMultiplier"; import { UnitType } from "../core/game/Game"; import { UnitView } from "../core/game/GameView"; import { UserSettings } from "../core/game/UserSettings"; -import { ReplaySpeedMultiplier } from "./utilities/ReplaySpeedMultiplier"; export class MouseUpEvent implements GameEvent { constructor( @@ -70,7 +70,7 @@ export class AlternateViewEvent implements GameEvent { export class CloseViewEvent implements GameEvent {} -export class RefreshGraphicsEvent implements GameEvent {} +export class RedrawGraphicsEvent implements GameEvent {} export class TogglePerformanceOverlayEvent implements GameEvent {} @@ -302,7 +302,7 @@ export class InputHandler { if (e.key.toLowerCase() === "r" && e.altKey && !e.ctrlKey) { e.preventDefault(); - this.eventBus.emit(new RefreshGraphicsEvent()); + this.eventBus.emit(new RedrawGraphicsEvent()); } if (e.code === this.keybinds.boatAttack) { diff --git a/src/client/JoinPrivateLobbyModal.ts b/src/client/JoinPrivateLobbyModal.ts index 10dfbec0b..8f4d3a4fe 100644 --- a/src/client/JoinPrivateLobbyModal.ts +++ b/src/client/JoinPrivateLobbyModal.ts @@ -1,16 +1,16 @@ -import { LitElement, html } from "lit"; -import { customElement, query, state } from "lit/decorators.js"; -import { translateText } from "../client/Utils"; +import "./components/baseComponents/Button"; +import "./components/baseComponents/Modal"; import { GameInfo, GameInfoSchema } from "../core/Schemas"; -import { generateID } from "../core/Util"; +import { LitElement, html } from "lit"; import { WorkerApiArchivedGameLobbySchema, WorkerApiGameIdExistsSchema, } from "../core/WorkerSchemas"; -import { getServerConfigFromClient } from "../core/configuration/ConfigLoader"; +import { customElement, query, state } from "lit/decorators.js"; import { JoinLobbyEvent } from "./Main"; -import "./components/baseComponents/Button"; -import "./components/baseComponents/Modal"; +import { generateID } from "../core/Util"; +import { getServerConfigFromClient } from "../core/configuration/ConfigLoader"; +import { translateText } from "../client/Utils"; @customElement("join-private-lobby-modal") export class JoinPrivateLobbyModal extends LitElement { diff --git a/src/client/LangSelector.ts b/src/client/LangSelector.ts index 073e81d88..367d5603f 100644 --- a/src/client/LangSelector.ts +++ b/src/client/LangSelector.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import "./LanguageModal"; import { LitElement, html } from "lit"; import { customElement, state } from "lit/decorators.js"; -import "./LanguageModal"; import ar from "../../resources/lang/ar.json"; import bg from "../../resources/lang/bg.json"; diff --git a/src/client/LocalPersistantStats.ts b/src/client/LocalPersistantStats.ts index e08a2ff34..e060a8b91 100644 --- a/src/client/LocalPersistantStats.ts +++ b/src/client/LocalPersistantStats.ts @@ -1,4 +1,3 @@ -import { z } from "zod"; import { GameConfig, GameConfigSchema, @@ -8,6 +7,7 @@ import { ID, } from "../core/Schemas"; import { replacer } from "../core/Util"; +import { z } from "zod"; const LocalStatsDataSchema = z.record( ID, diff --git a/src/client/LocalServer.ts b/src/client/LocalServer.ts index cf9f91645..45b5d036d 100644 --- a/src/client/LocalServer.ts +++ b/src/client/LocalServer.ts @@ -1,5 +1,3 @@ -import { z } from "zod"; -import { EventBus } from "../core/EventBus"; import { AllPlayersStats, ClientMessage, @@ -12,10 +10,12 @@ import { Turn, } from "../core/Schemas"; import { createGameRecord, decompressGameRecord, replacer } from "../core/Util"; +import { EventBus } from "../core/EventBus"; import { LobbyConfig } from "./ClientGameRunner"; import { ReplaySpeedChangeEvent } from "./InputHandler"; -import { getPersistentID } from "./Main"; import { defaultReplaySpeedMultiplier } from "./utilities/ReplaySpeedMultiplier"; +import { getPersistentID } from "./Main"; +import { z } from "zod"; export class LocalServer { // All turns from the game record on replay. diff --git a/src/client/Main.ts b/src/client/Main.ts index 67a2015c8..b7d683408 100644 --- a/src/client/Main.ts +++ b/src/client/Main.ts @@ -1,46 +1,42 @@ -import version from "../../resources/version.txt"; -import { UserMeResponse } from "../core/ApiSchemas"; -import { EventBus } from "../core/EventBus"; -import { GameRecord, GameStartInfo, ID } from "../core/Schemas"; -import { ServerConfig } from "../core/configuration/Config"; -import { getServerConfigFromClient } from "../core/configuration/ConfigLoader"; -import { GameType } from "../core/game/Game"; -import { UserSettings } from "../core/game/UserSettings"; -import { joinLobby } from "./ClientGameRunner"; import "./DarkModeButton"; -import { DarkModeButton } from "./DarkModeButton"; import "./FlagInput"; +import "./GoogleAdElement"; +import "./LangSelector"; +import "./PublicLobby"; +import "./UsernameInput"; +import "./components/NewsButton"; +import "./components/baseComponents/Button"; +import "./components/baseComponents/Modal"; +import "./styles.css"; +import { GameRecord, GameStartInfo, ID } from "../core/Schemas"; +import { discordLogin, getUserMe, isLoggedIn, logOut } from "./jwt"; +import { generateCryptoRandomUUID, incrementGamesPlayed, translateText } from "./Utils"; +import { DarkModeButton } from "./DarkModeButton"; +import { EventBus } from "../core/EventBus"; import { FlagInput } from "./FlagInput"; import { FlagInputModal } from "./FlagInputModal"; import { GameStartingModal } from "./GameStartingModal"; -import "./GoogleAdElement"; +import { GameType } from "../core/game/Game"; import { HelpModal } from "./HelpModal"; -import { HostLobbyModal as HostPrivateLobbyModal } from "./HostLobbyModal"; +import { HostLobbyModal } from "./HostLobbyModal"; import { JoinPrivateLobbyModal } from "./JoinPrivateLobbyModal"; -import "./LangSelector"; import { LangSelector } from "./LangSelector"; import { LanguageModal } from "./LanguageModal"; +import { NewsButton } from "./components/NewsButton"; import { NewsModal } from "./NewsModal"; -import "./PublicLobby"; +import { OButton } from "./components/baseComponents/Button"; import { PublicLobby } from "./PublicLobby"; +import { SendKickPlayerIntentEvent } from "./Transport"; +import { ServerConfig } from "../core/configuration/Config"; import { SinglePlayerModal } from "./SinglePlayerModal"; import { TerritoryPatternsModal } from "./TerritoryPatternsModal"; -import { SendKickPlayerIntentEvent } from "./Transport"; +import { UserMeResponse } from "../core/ApiSchemas"; import { UserSettingModal } from "./UserSettingModal"; -import "./UsernameInput"; +import { UserSettings } from "../core/game/UserSettings"; import { UsernameInput } from "./UsernameInput"; -import { - generateCryptoRandomUUID, - incrementGamesPlayed, - translateText, -} from "./Utils"; -import "./components/NewsButton"; -import { NewsButton } from "./components/NewsButton"; -import "./components/baseComponents/Button"; -import { OButton } from "./components/baseComponents/Button"; -import "./components/baseComponents/Modal"; -import { discordLogin, getUserMe, isLoggedIn, logOut } from "./jwt"; -import "./styles.css"; +import { getServerConfigFromClient } from "../core/configuration/ConfigLoader"; +import { joinLobby } from "./ClientGameRunner"; +import version from "../../resources/version.txt"; declare global { // eslint-disable-next-line @typescript-eslint/consistent-type-definitions @@ -360,8 +356,8 @@ class Client { const hostModal = document.querySelector( "host-lobby-modal", - ) as HostPrivateLobbyModal; - hostModal instanceof HostPrivateLobbyModal; + ) as HostLobbyModal; + hostModal instanceof HostLobbyModal; const hostLobbyButton = document.getElementById("host-lobby-button"); if (hostLobbyButton === null) throw new Error("Missing host-lobby-button"); hostLobbyButton.addEventListener("click", () => { diff --git a/src/client/NewsModal.ts b/src/client/NewsModal.ts index e3aeef95a..c5c617bbd 100644 --- a/src/client/NewsModal.ts +++ b/src/client/NewsModal.ts @@ -1,10 +1,10 @@ -import { LitElement, css, html } from "lit"; -import { resolveMarkdown } from "lit-markdown"; -import { customElement, property, query } from "lit/decorators.js"; -import changelog from "../../resources/changelog.md"; -import { translateText } from "../client/Utils"; import "./components/baseComponents/Button"; import "./components/baseComponents/Modal"; +import { LitElement, css, html } from "lit"; +import { customElement, property, query } from "lit/decorators.js"; +import changelog from "../../resources/changelog.md"; +import { resolveMarkdown } from "lit-markdown"; +import { translateText } from "../client/Utils"; @customElement("news-modal") export class NewsModal extends LitElement { diff --git a/src/client/PublicLobby.ts b/src/client/PublicLobby.ts index 1e961fdc4..f24f63598 100644 --- a/src/client/PublicLobby.ts +++ b/src/client/PublicLobby.ts @@ -1,12 +1,12 @@ +import { GameID, GameInfo } from "../core/Schemas"; +import { GameMapType, GameMode } from "../core/game/Game"; import { LitElement, html } from "lit"; import { customElement, state } from "lit/decorators.js"; -import { translateText } from "../client/Utils"; import { ApiPublicLobbiesResponseSchema } from "../core/ExpressSchemas"; -import { GameMapType, GameMode } from "../core/game/Game"; -import { GameID, GameInfo } from "../core/Schemas"; -import { generateID } from "../core/Util"; import { JoinLobbyEvent } from "./Main"; +import { generateID } from "../core/Util"; import { terrainMapFileLoader } from "./TerrainMapFileLoader"; +import { translateText } from "../client/Utils"; @customElement("public-lobby") export class PublicLobby extends LitElement { diff --git a/src/client/SinglePlayerModal.ts b/src/client/SinglePlayerModal.ts index 8c5cd687a..d1ae96a39 100644 --- a/src/client/SinglePlayerModal.ts +++ b/src/client/SinglePlayerModal.ts @@ -1,7 +1,7 @@ -import { LitElement, html } from "lit"; -import { customElement, query, state } from "lit/decorators.js"; -import randomMap from "../../resources/images/RandomMap.webp"; -import { translateText } from "../client/Utils"; +import "./components/Difficulties"; +import "./components/Maps"; +import "./components/baseComponents/Button"; +import "./components/baseComponents/Modal"; import { Difficulty, Duos, @@ -13,18 +13,18 @@ import { UnitType, mapCategories, } from "../core/game/Game"; -import { UserSettings } from "../core/game/UserSettings"; -import { TeamCountConfig } from "../core/Schemas"; -import { generateID } from "../core/Util"; -import "./components/baseComponents/Button"; -import "./components/baseComponents/Modal"; -import "./components/Difficulties"; +import { LitElement, html } from "lit"; +import { customElement, query, state } from "lit/decorators.js"; import { DifficultyDescription } from "./components/Difficulties"; -import "./components/Maps"; import { FlagInput } from "./FlagInput"; import { JoinLobbyEvent } from "./Main"; +import { TeamCountConfig } from "../core/Schemas"; +import { UserSettings } from "../core/game/UserSettings"; import { UsernameInput } from "./UsernameInput"; +import { generateID } from "../core/Util"; +import randomMap from "../../resources/images/RandomMap.webp"; import { renderUnitTypeOptions } from "./utilities/RenderUnitTypeOptions"; +import { translateText } from "../client/Utils"; @customElement("single-player-modal") export class SinglePlayerModal extends LitElement { diff --git a/src/client/TerrainMapFileLoader.ts b/src/client/TerrainMapFileLoader.ts index 957a5ea1c..768824526 100644 --- a/src/client/TerrainMapFileLoader.ts +++ b/src/client/TerrainMapFileLoader.ts @@ -1,4 +1,4 @@ -import version from "../../resources/version.txt"; import { FetchGameMapLoader } from "../core/game/FetchGameMapLoader"; +import version from "../../resources/version.txt"; export const terrainMapFileLoader = new FetchGameMapLoader(`/maps`, version); diff --git a/src/client/TerritoryPatternsModal.ts b/src/client/TerritoryPatternsModal.ts index 367ffa929..c171b630b 100644 --- a/src/client/TerritoryPatternsModal.ts +++ b/src/client/TerritoryPatternsModal.ts @@ -1,14 +1,14 @@ -import { base64url } from "jose"; -import type { TemplateResult } from "lit"; -import { html, LitElement, render } from "lit"; -import { customElement, query, state } from "lit/decorators.js"; -import { UserMeResponse } from "../core/ApiSchemas"; -import { Pattern } from "../core/CosmeticSchemas"; -import { UserSettings } from "../core/game/UserSettings"; -import { PatternDecoder } from "../core/PatternDecoder"; import "./components/Difficulties"; import "./components/Maps"; +import { LitElement, html, render } from "lit"; +import { customElement, query, state } from "lit/decorators.js"; import { handlePurchase, patterns } from "./Cosmetics"; +import { Pattern } from "../core/CosmeticSchemas"; +import { PatternDecoder } from "../core/PatternDecoder"; +import type { TemplateResult } from "lit"; +import { UserMeResponse } from "../core/ApiSchemas"; +import { UserSettings } from "../core/game/UserSettings"; +import { base64url } from "jose"; import { translateText } from "./Utils"; @customElement("territory-patterns-modal") diff --git a/src/client/Transport.ts b/src/client/Transport.ts index dc488c84b..b26fa6a97 100644 --- a/src/client/Transport.ts +++ b/src/client/Transport.ts @@ -1,5 +1,3 @@ -import { z } from "zod"; -import { EventBus, GameEvent } from "../core/EventBus"; import { AllPlayers, GameType, @@ -9,8 +7,6 @@ import { Tick, UnitType, } from "../core/game/Game"; -import { TileRef } from "../core/game/GameMap"; -import { PlayerView } from "../core/game/GameView"; import { AllPlayersStats, ClientHashMessage, @@ -24,9 +20,13 @@ import { ServerMessageSchema, Winner, } from "../core/Schemas"; -import { replacer } from "../core/Util"; +import { EventBus, GameEvent } from "../core/EventBus"; import { LobbyConfig } from "./ClientGameRunner"; import { LocalServer } from "./LocalServer"; +import { PlayerView } from "../core/game/GameView"; +import { TileRef } from "../core/game/GameMap"; +import { replacer } from "../core/Util"; +import { z } from "zod"; export class PauseGameEvent implements GameEvent { constructor(public readonly paused: boolean) {} diff --git a/src/client/UserSettingModal.ts b/src/client/UserSettingModal.ts index 60d7d7f03..d1a6a40f3 100644 --- a/src/client/UserSettingModal.ts +++ b/src/client/UserSettingModal.ts @@ -1,13 +1,13 @@ -import { LitElement, html } from "lit"; -import { customElement, query, state } from "lit/decorators.js"; -import { z } from "zod"; -import { translateText } from "../client/Utils"; -import { UserSettings } from "../core/game/UserSettings"; import "./components/baseComponents/setting/SettingKeybind"; -import { SettingKeybind } from "./components/baseComponents/setting/SettingKeybind"; import "./components/baseComponents/setting/SettingNumber"; import "./components/baseComponents/setting/SettingSlider"; import "./components/baseComponents/setting/SettingToggle"; +import { LitElement, html } from "lit"; +import { customElement, query, state } from "lit/decorators.js"; +import { SettingKeybind } from "./components/baseComponents/setting/SettingKeybind"; +import { UserSettings } from "../core/game/UserSettings"; +import { translateText } from "../client/Utils"; +import { z } from "zod"; const KeybindSchema = z.record(z.string(), z.string()); diff --git a/src/client/UsernameInput.ts b/src/client/UsernameInput.ts index b75b845e5..d530b8463 100644 --- a/src/client/UsernameInput.ts +++ b/src/client/UsernameInput.ts @@ -1,12 +1,12 @@ import { LitElement, html } from "lit"; -import { customElement, property, state } from "lit/decorators.js"; -import { v4 as uuidv4 } from "uuid"; -import { translateText } from "../client/Utils"; -import { UserSettings } from "../core/game/UserSettings"; import { MAX_USERNAME_LENGTH, validateUsername, } from "../core/validations/username"; +import { customElement, property, state } from "lit/decorators.js"; +import { UserSettings } from "../core/game/UserSettings"; +import { translateText } from "../client/Utils"; +import { v4 as uuidv4 } from "uuid"; const usernameKey = "username"; diff --git a/src/client/Utils.ts b/src/client/Utils.ts index 7257be10b..1e03fadd9 100644 --- a/src/client/Utils.ts +++ b/src/client/Utils.ts @@ -1,6 +1,6 @@ import IntlMessageFormat from "intl-messageformat"; -import { MessageType } from "../core/game/Game"; import { LangSelector } from "./LangSelector"; +import { MessageType } from "../core/game/Game"; export function renderTroops(troops: number): string { return renderNumber(troops / 10); diff --git a/src/client/components/NewsButton.ts b/src/client/components/NewsButton.ts index 43e33993d..860340226 100644 --- a/src/client/components/NewsButton.ts +++ b/src/client/components/NewsButton.ts @@ -1,9 +1,9 @@ import { LitElement, html } from "lit"; import { customElement, property, state } from "lit/decorators.js"; -import megaphone from "../../../resources/images/Megaphone.svg"; -import version from "../../../resources/version.txt"; import { NewsModal } from "../NewsModal"; +import megaphone from "../../../resources/images/Megaphone.svg"; import { translateText } from "../Utils"; +import version from "../../../resources/version.txt"; @customElement("news-button") export class NewsButton extends LitElement { diff --git a/src/client/graphics/AnimatedSpriteLoader.ts b/src/client/graphics/AnimatedSpriteLoader.ts index d8158847f..df23c5d57 100644 --- a/src/client/graphics/AnimatedSpriteLoader.ts +++ b/src/client/graphics/AnimatedSpriteLoader.ts @@ -1,19 +1,19 @@ -import miniBigSmoke from "../../../resources/sprites/bigsmoke.png"; -import conquestSword from "../../../resources/sprites/conquestSword.png"; -import dust from "../../../resources/sprites/dust.png"; -import miniExplosion from "../../../resources/sprites/miniExplosion.png"; -import miniFire from "../../../resources/sprites/minifire.png"; -import nuke from "../../../resources/sprites/nukeExplosion.png"; -import SAMExplosion from "../../../resources/sprites/samExplosion.png"; -import sinkingShip from "../../../resources/sprites/sinkingShip.png"; -import miniSmoke from "../../../resources/sprites/smoke.png"; -import miniSmokeAndFire from "../../../resources/sprites/smokeAndFire.png"; -import unitExplosion from "../../../resources/sprites/unitExplosion.png"; -import { Theme } from "../../core/configuration/Config"; -import { PlayerView } from "../../core/game/GameView"; import { AnimatedSprite } from "./AnimatedSprite"; import { FxType } from "./fx/Fx"; +import { PlayerView } from "../../core/game/GameView"; +import SAMExplosion from "../../../resources/sprites/samExplosion.png"; +import { Theme } from "../../core/configuration/Config"; import { colorizeCanvas } from "./SpriteLoader"; +import conquestSword from "../../../resources/sprites/conquestSword.png"; +import dust from "../../../resources/sprites/dust.png"; +import miniBigSmoke from "../../../resources/sprites/bigsmoke.png"; +import miniExplosion from "../../../resources/sprites/miniExplosion.png"; +import miniFire from "../../../resources/sprites/minifire.png"; +import miniSmoke from "../../../resources/sprites/smoke.png"; +import miniSmokeAndFire from "../../../resources/sprites/smokeAndFire.png"; +import nuke from "../../../resources/sprites/nukeExplosion.png"; +import sinkingShip from "../../../resources/sprites/sinkingShip.png"; +import unitExplosion from "../../../resources/sprites/unitExplosion.png"; type AnimatedSpriteConfig = { url: string; diff --git a/src/client/graphics/GameRenderer.ts b/src/client/graphics/GameRenderer.ts index 95164f163..17d04c9bb 100644 --- a/src/client/graphics/GameRenderer.ts +++ b/src/client/graphics/GameRenderer.ts @@ -1,21 +1,17 @@ -import { EventBus } from "../../core/EventBus"; -import { GameView } from "../../core/game/GameView"; -import { UserSettings } from "../../core/game/UserSettings"; -import { GameStartingModal } from "../GameStartingModal"; -import { RefreshGraphicsEvent as RedrawGraphicsEvent } from "../InputHandler"; -import { TransformHandler } from "./TransformHandler"; -import { UIState } from "./UIState"; import { AlertFrame } from "./layers/AlertFrame"; import { BuildMenu } from "./layers/BuildMenu"; import { ChatDisplay } from "./layers/ChatDisplay"; import { ChatModal } from "./layers/ChatModal"; import { ControlPanel } from "./layers/ControlPanel"; import { EmojiTable } from "./layers/EmojiTable"; +import { EventBus } from "../../core/EventBus"; import { EventsDisplay } from "./layers/EventsDisplay"; import { FPSDisplay } from "./layers/FPSDisplay"; import { FxLayer } from "./layers/FxLayer"; import { GameLeftSidebar } from "./layers/GameLeftSidebar"; import { GameRightSidebar } from "./layers/GameRightSidebar"; +import { GameStartingModal } from "../GameStartingModal"; +import { GameView } from "../../core/game/GameView"; import { GutterAdModal } from "./layers/GutterAdModal"; import { HeadsUpMessage } from "./layers/HeadsUpMessage"; import { Layer } from "./layers/Layer"; @@ -26,6 +22,7 @@ import { NameLayer } from "./layers/NameLayer"; import { PlayerInfoOverlay } from "./layers/PlayerInfoOverlay"; import { PlayerPanel } from "./layers/PlayerPanel"; import { RailroadLayer } from "./layers/RailroadLayer"; +import { RedrawGraphicsEvent } from "../InputHandler"; import { ReplayPanel } from "./layers/ReplayPanel"; import { SettingsModal } from "./layers/SettingsModal"; import { SpawnAd } from "./layers/SpawnAd"; @@ -35,9 +32,12 @@ import { StructureLayer } from "./layers/StructureLayer"; import { TeamStats } from "./layers/TeamStats"; import { TerrainLayer } from "./layers/TerrainLayer"; import { TerritoryLayer } from "./layers/TerritoryLayer"; +import { TransformHandler } from "./TransformHandler"; import { UILayer } from "./layers/UILayer"; +import { UIState } from "./UIState"; import { UnitDisplay } from "./layers/UnitDisplay"; import { UnitLayer } from "./layers/UnitLayer"; +import { UserSettings } from "../../core/game/UserSettings"; import { WinModal } from "./layers/WinModal"; export function createRenderer( diff --git a/src/client/graphics/SpriteLoader.ts b/src/client/graphics/SpriteLoader.ts index 6ef193123..05da1d49f 100644 --- a/src/client/graphics/SpriteLoader.ts +++ b/src/client/graphics/SpriteLoader.ts @@ -1,17 +1,17 @@ +import { TrainType, UnitType } from "../../core/game/Game"; import { Colord } from "colord"; +import { Theme } from "../../core/configuration/Config"; +import { UnitView } from "../../core/game/GameView"; import atomBombSprite from "../../../resources/sprites/atombomb.png"; import hydrogenBombSprite from "../../../resources/sprites/hydrogenbomb.png"; import mirvSprite from "../../../resources/sprites/mirv2.png"; import samMissileSprite from "../../../resources/sprites/samMissile.png"; import tradeShipSprite from "../../../resources/sprites/tradeship.png"; import trainCarriageSprite from "../../../resources/sprites/trainCarriage.png"; -import trainLoadedCarriageSprite from "../../../resources/sprites/trainCarriageLoaded.png"; import trainEngineSprite from "../../../resources/sprites/trainEngine.png"; +import trainLoadedCarriageSprite from "../../../resources/sprites/trainCarriageLoaded.png"; import transportShipSprite from "../../../resources/sprites/transportship.png"; import warshipSprite from "../../../resources/sprites/warship.png"; -import { Theme } from "../../core/configuration/Config"; -import { TrainType, UnitType } from "../../core/game/Game"; -import { UnitView } from "../../core/game/GameView"; // Can't reuse TrainType because "loaded" is not a type, just an attribute const TrainTypeSprite = { diff --git a/src/client/graphics/TransformHandler.ts b/src/client/graphics/TransformHandler.ts index 05569a647..60b840a04 100644 --- a/src/client/graphics/TransformHandler.ts +++ b/src/client/graphics/TransformHandler.ts @@ -1,12 +1,12 @@ -import { EventBus } from "../../core/EventBus"; -import { Cell } from "../../core/game/Game"; -import { GameView } from "../../core/game/GameView"; import { CenterCameraEvent, DragEvent, ZoomEvent } from "../InputHandler"; import { GoToPlayerEvent, GoToPositionEvent, GoToUnitEvent, } from "./layers/Leaderboard"; +import { Cell } from "../../core/game/Game"; +import { EventBus } from "../../core/EventBus"; +import { GameView } from "../../core/game/GameView"; export const GOTO_INTERVAL_MS = 16; export const CAMERA_MAX_SPEED = 15; diff --git a/src/client/graphics/fx/ConquestFx.ts b/src/client/graphics/fx/ConquestFx.ts index 7fa8d0690..e10d134d0 100644 --- a/src/client/graphics/fx/ConquestFx.ts +++ b/src/client/graphics/fx/ConquestFx.ts @@ -1,10 +1,10 @@ +import { FadeFx, SpriteFx } from "./SpriteFx"; +import { Fx, FxType } from "./Fx"; +import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; import { ConquestUpdate } from "../../../core/game/GameUpdates"; import { GameView } from "../../../core/game/GameView"; -import { renderNumber } from "../../Utils"; -import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; -import { Fx, FxType } from "./Fx"; -import { FadeFx, SpriteFx } from "./SpriteFx"; import { TextFx } from "./TextFx"; +import { renderNumber } from "../../Utils"; /** * Conquest FX: diff --git a/src/client/graphics/fx/NukeFx.ts b/src/client/graphics/fx/NukeFx.ts index 1394e2cbd..6e1694a23 100644 --- a/src/client/graphics/fx/NukeFx.ts +++ b/src/client/graphics/fx/NukeFx.ts @@ -1,7 +1,7 @@ -import { GameView } from "../../../core/game/GameView"; -import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; -import { Fx, FxType } from "./Fx"; import { FadeFx, SpriteFx } from "./SpriteFx"; +import { Fx, FxType } from "./Fx"; +import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; +import { GameView } from "../../../core/game/GameView"; /** * Shockwave effect: draw a growing 1px white circle diff --git a/src/client/graphics/fx/SpriteFx.ts b/src/client/graphics/fx/SpriteFx.ts index 7dcd000b4..978da1142 100644 --- a/src/client/graphics/fx/SpriteFx.ts +++ b/src/client/graphics/fx/SpriteFx.ts @@ -1,8 +1,8 @@ -import { Theme } from "../../../core/configuration/Config"; -import { PlayerView } from "../../../core/game/GameView"; +import { Fx, FxType } from "./Fx"; import { AnimatedSprite } from "../AnimatedSprite"; import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; -import { Fx, FxType } from "./Fx"; +import { PlayerView } from "../../../core/game/GameView"; +import { Theme } from "../../../core/configuration/Config"; function fadeInOut(t: number, fadeIn = 0.3, fadeOut = 0.7): number { if (t < fadeIn) { diff --git a/src/client/graphics/fx/UnitExplosionFx.ts b/src/client/graphics/fx/UnitExplosionFx.ts index b77d5f4fa..9cc4f7502 100644 --- a/src/client/graphics/fx/UnitExplosionFx.ts +++ b/src/client/graphics/fx/UnitExplosionFx.ts @@ -1,6 +1,6 @@ -import { GameView } from "../../../core/game/GameView"; -import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; import { Fx, FxType } from "./Fx"; +import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; +import { GameView } from "../../../core/game/GameView"; import { SpriteFx } from "./SpriteFx"; import { Timeline } from "./Timeline"; diff --git a/src/client/graphics/layers/AlertFrame.ts b/src/client/graphics/layers/AlertFrame.ts index c792f8398..44f5d7aaf 100644 --- a/src/client/graphics/layers/AlertFrame.ts +++ b/src/client/graphics/layers/AlertFrame.ts @@ -1,12 +1,12 @@ -import { LitElement, css, html } from "lit"; -import { customElement, state } from "lit/decorators.js"; import { BrokeAllianceUpdate, GameUpdateType, } from "../../../core/game/GameUpdates"; +import { LitElement, css, html } from "lit"; +import { customElement, state } from "lit/decorators.js"; import { GameView } from "../../../core/game/GameView"; -import { UserSettings } from "../../../core/game/UserSettings"; import { Layer } from "./Layer"; +import { UserSettings } from "../../../core/game/UserSettings"; // Parameters for the alert animation const ALERT_SPEED = 1.6; diff --git a/src/client/graphics/layers/BuildMenu.ts b/src/client/graphics/layers/BuildMenu.ts index d28a6ce63..0dfb9fe56 100644 --- a/src/client/graphics/layers/BuildMenu.ts +++ b/src/client/graphics/layers/BuildMenu.ts @@ -1,39 +1,39 @@ -import { LitElement, css, html } from "lit"; -import { customElement, state } from "lit/decorators.js"; -import warshipIcon from "../../../../resources/images/BattleshipIconWhite.svg"; -import cityIcon from "../../../../resources/images/CityIconWhite.svg"; -import factoryIcon from "../../../../resources/images/FactoryIconWhite.svg"; -import goldCoinIcon from "../../../../resources/images/GoldCoinIcon.svg"; -import mirvIcon from "../../../../resources/images/MIRVIcon.svg"; -import hydrogenBombIcon from "../../../../resources/images/MushroomCloudIconWhite.svg"; -import atomBombIcon from "../../../../resources/images/NukeIconWhite.svg"; -import portIcon from "../../../../resources/images/PortIcon.svg"; -import shieldIcon from "../../../../resources/images/ShieldIconWhite.svg"; -import missileSiloIcon from "../../../../resources/non-commercial/svg/MissileSiloIconWhite.svg"; -import samlauncherIcon from "../../../../resources/non-commercial/svg/SamLauncherIconWhite.svg"; -import { translateText } from "../../../client/Utils"; -import { EventBus } from "../../../core/EventBus"; +import { + BuildUnitIntentEvent, + SendUpgradeStructureIntentEvent, +} from "../../Transport"; import { BuildableUnit, Gold, PlayerActions, UnitType, } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; -import { GameView } from "../../../core/game/GameView"; import { CloseViewEvent, MouseDownEvent, ShowBuildMenuEvent, ShowEmojiMenuEvent, } from "../../InputHandler"; -import { - BuildUnitIntentEvent, - SendUpgradeStructureIntentEvent, -} from "../../Transport"; -import { renderNumber } from "../../Utils"; -import { TransformHandler } from "../TransformHandler"; +import { LitElement, css, html } from "lit"; +import { customElement, state } from "lit/decorators.js"; +import { EventBus } from "../../../core/EventBus"; +import { GameView } from "../../../core/game/GameView"; import { Layer } from "./Layer"; +import { TileRef } from "../../../core/game/GameMap"; +import { TransformHandler } from "../TransformHandler"; +import atomBombIcon from "../../../../resources/images/NukeIconWhite.svg"; +import cityIcon from "../../../../resources/images/CityIconWhite.svg"; +import factoryIcon from "../../../../resources/images/FactoryIconWhite.svg"; +import goldCoinIcon from "../../../../resources/images/GoldCoinIcon.svg"; +import hydrogenBombIcon from "../../../../resources/images/MushroomCloudIconWhite.svg"; +import mirvIcon from "../../../../resources/images/MIRVIcon.svg"; +import missileSiloIcon from "../../../../resources/non-commercial/svg/MissileSiloIconWhite.svg"; +import portIcon from "../../../../resources/images/PortIcon.svg"; +import { renderNumber } from "../../Utils"; +import samlauncherIcon from "../../../../resources/non-commercial/svg/SamLauncherIconWhite.svg"; +import shieldIcon from "../../../../resources/images/ShieldIconWhite.svg"; +import { translateText } from "../../../client/Utils"; +import warshipIcon from "../../../../resources/images/BattleshipIconWhite.svg"; export type BuildItemDisplay = { unitType: UnitType; diff --git a/src/client/graphics/layers/ChatDisplay.ts b/src/client/graphics/layers/ChatDisplay.ts index e53c3b622..af4727602 100644 --- a/src/client/graphics/layers/ChatDisplay.ts +++ b/src/client/graphics/layers/ChatDisplay.ts @@ -1,16 +1,16 @@ -import { html, LitElement } from "lit"; -import { customElement, state } from "lit/decorators.js"; -import { DirectiveResult } from "lit/directive.js"; -import { unsafeHTML, UnsafeHTMLDirective } from "lit/directives/unsafe-html.js"; -import { EventBus } from "../../../core/EventBus"; -import { MessageType } from "../../../core/game/Game"; import { DisplayMessageUpdate, GameUpdateType, } from "../../../core/game/GameUpdates"; +import { LitElement, html } from "lit"; +import { UnsafeHTMLDirective, unsafeHTML } from "lit/directives/unsafe-html.js"; +import { customElement, state } from "lit/decorators.js"; +import { DirectiveResult } from "lit/directive.js"; +import { EventBus } from "../../../core/EventBus"; import { GameView } from "../../../core/game/GameView"; -import { onlyImages } from "../../../core/Util"; import { Layer } from "./Layer"; +import { MessageType } from "../../../core/game/Game"; +import { onlyImages } from "../../../core/Util"; type ChatEvent = { description: string; diff --git a/src/client/graphics/layers/ChatIntegration.ts b/src/client/graphics/layers/ChatIntegration.ts index b81e5caca..597628ec0 100644 --- a/src/client/graphics/layers/ChatIntegration.ts +++ b/src/client/graphics/layers/ChatIntegration.ts @@ -1,9 +1,9 @@ -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; diff --git a/src/client/graphics/layers/ChatModal.ts b/src/client/graphics/layers/ChatModal.ts index 020ee8ac1..f3e90732f 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 = { diff --git a/src/client/graphics/layers/ControlPanel.ts b/src/client/graphics/layers/ControlPanel.ts index 44284d5ea..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 { diff --git a/src/client/graphics/layers/EmojiTable.ts b/src/client/graphics/layers/EmojiTable.ts index bb3113c79..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") diff --git a/src/client/graphics/layers/EventsDisplay.ts b/src/client/graphics/layers/EventsDisplay.ts index 412bea7cf..b57af219f 100644 --- a/src/client/graphics/layers/EventsDisplay.ts +++ b/src/client/graphics/layers/EventsDisplay.ts @@ -1,21 +1,12 @@ /* eslint-disable max-lines */ -import { html, LitElement, TemplateResult } from "lit"; -import { customElement, state } from "lit/decorators.js"; -import { DirectiveResult } from "lit/directive.js"; -import { unsafeHTML, UnsafeHTMLDirective } from "lit/directives/unsafe-html.js"; -import allianceIcon from "../../../../resources/images/AllianceIconWhite.svg"; -import chatIcon from "../../../../resources/images/ChatIconWhite.svg"; -import donateGoldIcon from "../../../../resources/images/DonateGoldIconWhite.svg"; -import swordIcon from "../../../../resources/images/SwordIconWhite.svg"; -import { EventBus } from "../../../core/EventBus"; import { AllPlayers, - getMessageCategory, MessageCategory, MessageType, PlayerType, Tick, UnitType, + getMessageCategory, } from "../../../core/game/Game"; import { AllianceExpiredUpdate, @@ -36,18 +27,25 @@ import { SendAllianceExtensionIntentEvent, SendAllianceReplyIntentEvent, } from "../../Transport"; -import { Layer } from "./Layer"; - import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; -import { onlyImages } from "../../../core/Util"; -import { renderNumber, renderTroops } from "../../Utils"; import { GoToPlayerEvent, GoToPositionEvent, GoToUnitEvent, } from "./Leaderboard"; - +import { LitElement, TemplateResult, html } from "lit"; +import { UnsafeHTMLDirective, unsafeHTML } from "lit/directives/unsafe-html.js"; +import { customElement, state } from "lit/decorators.js"; import { getMessageTypeClasses, translateText } from "../../Utils"; +import { renderNumber, renderTroops } from "../../Utils"; +import { DirectiveResult } from "lit/directive.js"; +import { EventBus } from "../../../core/EventBus"; +import { Layer } from "./Layer"; +import allianceIcon from "../../../../resources/images/AllianceIconWhite.svg"; +import chatIcon from "../../../../resources/images/ChatIconWhite.svg"; +import donateGoldIcon from "../../../../resources/images/DonateGoldIconWhite.svg"; +import { onlyImages } from "../../../core/Util"; +import swordIcon from "../../../../resources/images/SwordIconWhite.svg"; type GameEvent = { description: string; diff --git a/src/client/graphics/layers/FPSDisplay.ts b/src/client/graphics/layers/FPSDisplay.ts index ded24567a..f61f1fec6 100644 --- a/src/client/graphics/layers/FPSDisplay.ts +++ b/src/client/graphics/layers/FPSDisplay.ts @@ -1,9 +1,9 @@ import { LitElement, css, html } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { EventBus } from "../../../core/EventBus"; -import { UserSettings } from "../../../core/game/UserSettings"; -import { TogglePerformanceOverlayEvent } from "../../InputHandler"; import { Layer } from "./Layer"; +import { TogglePerformanceOverlayEvent } from "../../InputHandler"; +import { UserSettings } from "../../../core/game/UserSettings"; @customElement("fps-display") export class FPSDisplay extends LitElement implements Layer { diff --git a/src/client/graphics/layers/FxLayer.ts b/src/client/graphics/layers/FxLayer.ts index 877ece3da..14cbf0acd 100644 --- a/src/client/graphics/layers/FxLayer.ts +++ b/src/client/graphics/layers/FxLayer.ts @@ -1,21 +1,22 @@ -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; diff --git a/src/client/graphics/layers/GameLeftSidebar.ts b/src/client/graphics/layers/GameLeftSidebar.ts index 8154f1783..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 { diff --git a/src/client/graphics/layers/GameRightSidebar.ts b/src/client/graphics/layers/GameRightSidebar.ts index d6cf0c023..3af8824ec 100644 --- a/src/client/graphics/layers/GameRightSidebar.ts +++ b/src/client/graphics/layers/GameRightSidebar.ts @@ -1,20 +1,20 @@ -import { html, LitElement } from "lit"; +import { LitElement, html } from "lit"; import { customElement, state } from "lit/decorators.js"; +import { EventBus } from "../../../core/EventBus"; +import { GameType } from "../../../core/game/Game"; +import { GameUpdateType } from "../../../core/game/GameUpdates"; +import { GameView } from "../../../core/game/GameView"; +import { Layer } from "./Layer"; +import { PauseGameEvent } from "../../Transport"; +import { ShowReplayPanelEvent } from "./ReplayPanel"; +import { ShowSettingsModalEvent } from "./SettingsModal"; import exitIcon from "../../../../resources/images/ExitIconWhite.svg"; import pauseIcon from "../../../../resources/images/PauseIconWhite.svg"; import playIcon from "../../../../resources/images/PlayIconWhite.svg"; import replayRegularIcon from "../../../../resources/images/ReplayRegularIconWhite.svg"; import replaySolidIcon from "../../../../resources/images/ReplaySolidIconWhite.svg"; import settingsIcon from "../../../../resources/images/SettingIconWhite.svg"; -import { EventBus } from "../../../core/EventBus"; -import { GameType } from "../../../core/game/Game"; -import { GameUpdateType } from "../../../core/game/GameUpdates"; -import { GameView } from "../../../core/game/GameView"; -import { PauseGameEvent } from "../../Transport"; import { translateText } from "../../Utils"; -import { Layer } from "./Layer"; -import { ShowReplayPanelEvent } from "./ReplayPanel"; -import { ShowSettingsModalEvent } from "./SettingsModal"; @customElement("game-right-sidebar") export class GameRightSidebar extends LitElement implements Layer { diff --git a/src/client/graphics/layers/GutterAdModal.ts b/src/client/graphics/layers/GutterAdModal.ts index a571b3ceb..a702f1b6b 100644 --- a/src/client/graphics/layers/GutterAdModal.ts +++ b/src/client/graphics/layers/GutterAdModal.ts @@ -1,8 +1,8 @@ +import { EventBus, GameEvent } from "../../../core/EventBus"; import { LitElement, css, html } from "lit"; import { customElement, state } from "lit/decorators.js"; -import { EventBus, GameEvent } from "../../../core/EventBus"; -import { getGamesPlayed } from "../../Utils"; import { Layer } from "./Layer"; +import { getGamesPlayed } from "../../Utils"; export class GutterAdModalEvent implements GameEvent { constructor(public readonly isVisible: boolean) {} diff --git a/src/client/graphics/layers/HeadsUpMessage.ts b/src/client/graphics/layers/HeadsUpMessage.ts index 435116223..f2d9521e9 100644 --- a/src/client/graphics/layers/HeadsUpMessage.ts +++ b/src/client/graphics/layers/HeadsUpMessage.ts @@ -1,8 +1,8 @@ import { LitElement, html } from "lit"; import { customElement, state } from "lit/decorators.js"; import { GameView } from "../../../core/game/GameView"; -import { translateText } from "../../Utils"; import { Layer } from "./Layer"; +import { translateText } from "../../Utils"; @customElement("heads-up-message") export class HeadsUpMessage extends LitElement implements Layer { diff --git a/src/client/graphics/layers/Leaderboard.ts b/src/client/graphics/layers/Leaderboard.ts index 1ad3835e4..2b5646e5f 100644 --- a/src/client/graphics/layers/Leaderboard.ts +++ b/src/client/graphics/layers/Leaderboard.ts @@ -1,11 +1,11 @@ -import { LitElement, html } from "lit"; -import { customElement, property, state } from "lit/decorators.js"; -import { repeat } from "lit/directives/repeat.js"; -import { translateText } from "../../../client/Utils"; import { EventBus, GameEvent } from "../../../core/EventBus"; import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; -import { renderNumber } from "../../Utils"; +import { LitElement, html } from "lit"; +import { customElement, property, state } from "lit/decorators.js"; import { Layer } from "./Layer"; +import { renderNumber } from "../../Utils"; +import { repeat } from "lit/directives/repeat.js"; +import { translateText } from "../../../client/Utils"; type Entry = { name: string; diff --git a/src/client/graphics/layers/MainRadialMenu.ts b/src/client/graphics/layers/MainRadialMenu.ts index 8a5b48e57..05c9d1afb 100644 --- a/src/client/graphics/layers/MainRadialMenu.ts +++ b/src/client/graphics/layers/MainRadialMenu.ts @@ -1,27 +1,26 @@ -import { LitElement } from "lit"; -import { customElement } from "lit/decorators.js"; -import { EventBus } from "../../../core/EventBus"; -import { PlayerActions } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; -import { GameView, PlayerView } from "../../../core/game/GameView"; -import { TransformHandler } from "../TransformHandler"; -import { UIState } from "../UIState"; -import { BuildMenu } from "./BuildMenu"; -import { ChatIntegration } from "./ChatIntegration"; -import { EmojiTable } from "./EmojiTable"; -import { Layer } from "./Layer"; -import { PlayerActionHandler } from "./PlayerActionHandler"; -import { PlayerPanel } from "./PlayerPanel"; -import { RadialMenu, RadialMenuConfig } from "./RadialMenu"; import { - centerButtonElement, COLORS, MenuElementParams, + centerButtonElement, rootMenuElement, } from "./RadialMenuElements"; - -import swordIcon from "../../../../resources/images/SwordIconWhite.svg"; +import { GameView, PlayerView } from "../../../core/game/GameView"; +import { RadialMenu, RadialMenuConfig } from "./RadialMenu"; +import { BuildMenu } from "./BuildMenu"; +import { ChatIntegration } from "./ChatIntegration"; import { ContextMenuEvent } from "../../InputHandler"; +import { EmojiTable } from "./EmojiTable"; +import { EventBus } from "../../../core/EventBus"; +import { Layer } from "./Layer"; +import { LitElement } from "lit"; +import { PlayerActionHandler } from "./PlayerActionHandler"; +import { PlayerActions } from "../../../core/game/Game"; +import { PlayerPanel } from "./PlayerPanel"; +import { TileRef } from "../../../core/game/GameMap"; +import { TransformHandler } from "../TransformHandler"; +import { UIState } from "../UIState"; +import { customElement } from "lit/decorators.js"; +import swordIcon from "../../../../resources/images/SwordIconWhite.svg"; @customElement("main-radial-menu") export class MainRadialMenu extends LitElement implements Layer { diff --git a/src/client/graphics/layers/MultiTabModal.ts b/src/client/graphics/layers/MultiTabModal.ts index 630568e06..956aaf8ce 100644 --- a/src/client/graphics/layers/MultiTabModal.ts +++ b/src/client/graphics/layers/MultiTabModal.ts @@ -3,9 +3,9 @@ import { customElement, property, state } from "lit/decorators.js"; import { GameEnv } from "../../../core/configuration/Config"; import { GameType } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; +import { Layer } from "./Layer"; import { MultiTabDetector } from "../../MultiTabDetector"; import { translateText } from "../../Utils"; -import { Layer } from "./Layer"; @customElement("multi-tab-modal") export class MultiTabModal extends LitElement implements Layer { diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index 89d1480d7..8554bcd21 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -1,3 +1,13 @@ +import { AllPlayers, Cell, nukeTypes } from "../../../core/game/Game"; +import { GameView, PlayerView } from "../../../core/game/GameView"; +import { createCanvas, renderNumber, renderTroops } from "../../Utils"; +import { AlternateViewEvent } from "../../InputHandler"; +import { EventBus } from "../../../core/EventBus"; +import { Layer } from "./Layer"; +import { PseudoRandom } from "../../../core/PseudoRandom"; +import { Theme } from "../../../core/configuration/Config"; +import { TransformHandler } from "../TransformHandler"; +import { UserSettings } from "../../../core/game/UserSettings"; import allianceIcon from "../../../../resources/images/AllianceIcon.svg"; import allianceRequestBlackIcon from "../../../../resources/images/AllianceRequestBlackIcon.svg"; import allianceRequestWhiteIcon from "../../../../resources/images/AllianceRequestWhiteIcon.svg"; @@ -7,20 +17,10 @@ import embargoBlackIcon from "../../../../resources/images/EmbargoBlackIcon.svg" import embargoWhiteIcon from "../../../../resources/images/EmbargoWhiteIcon.svg"; import nukeRedIcon from "../../../../resources/images/NukeIconRed.svg"; import nukeWhiteIcon from "../../../../resources/images/NukeIconWhite.svg"; +import { renderPlayerFlag } from "../../../core/CustomFlag"; import shieldIcon from "../../../../resources/images/ShieldIconBlack.svg"; import targetIcon from "../../../../resources/images/TargetIcon.svg"; import traitorIcon from "../../../../resources/images/TraitorIcon.svg"; -import { renderPlayerFlag } from "../../../core/CustomFlag"; -import { EventBus } from "../../../core/EventBus"; -import { PseudoRandom } from "../../../core/PseudoRandom"; -import { Theme } from "../../../core/configuration/Config"; -import { AllPlayers, Cell, nukeTypes } from "../../../core/game/Game"; -import { GameView, PlayerView } from "../../../core/game/GameView"; -import { UserSettings } from "../../../core/game/UserSettings"; -import { AlternateViewEvent } from "../../InputHandler"; -import { createCanvas, renderNumber, renderTroops } from "../../Utils"; -import { TransformHandler } from "../TransformHandler"; -import { Layer } from "./Layer"; class RenderInfo { public icons: Map = new Map(); // Track icon elements diff --git a/src/client/graphics/layers/OptionsMenu.ts b/src/client/graphics/layers/OptionsMenu.ts index 145cd30c5..91f01c3a1 100644 --- a/src/client/graphics/layers/OptionsMenu.ts +++ b/src/client/graphics/layers/OptionsMenu.ts @@ -1,14 +1,14 @@ -import { html, LitElement } from "lit"; +import { AlternateViewEvent, RedrawGraphicsEvent } from "../../InputHandler"; +import { LitElement, html } from "lit"; import { customElement, state } from "lit/decorators.js"; import { EventBus } from "../../../core/EventBus"; import { GameType } from "../../../core/game/Game"; import { GameUpdateType } from "../../../core/game/GameUpdates"; import { GameView } from "../../../core/game/GameView"; -import { UserSettings } from "../../../core/game/UserSettings"; -import { AlternateViewEvent, RefreshGraphicsEvent } from "../../InputHandler"; -import { PauseGameEvent } from "../../Transport"; -import { translateText } from "../../Utils"; import { Layer } from "./Layer"; +import { PauseGameEvent } from "../../Transport"; +import { UserSettings } from "../../../core/game/UserSettings"; +import { translateText } from "../../Utils"; const button = ({ classes = "", @@ -116,7 +116,7 @@ export class OptionsMenu extends LitElement implements Layer { private onToggleDarkModeButtonClick() { this.userSettings.toggleDarkMode(); this.requestUpdate(); - this.eventBus.emit(new RefreshGraphicsEvent()); + this.eventBus.emit(new RedrawGraphicsEvent()); } private onToggleRandomNameModeButtonClick() { diff --git a/src/client/graphics/layers/PlayerActionHandler.ts b/src/client/graphics/layers/PlayerActionHandler.ts index e134e35a2..85a53279f 100644 --- a/src/client/graphics/layers/PlayerActionHandler.ts +++ b/src/client/graphics/layers/PlayerActionHandler.ts @@ -1,7 +1,4 @@ -import { EventBus } from "../../../core/EventBus"; import { PlayerActions, PlayerID } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; -import { PlayerView } from "../../../core/game/GameView"; import { SendAllianceRequestIntentEvent, SendAttackIntentEvent, @@ -16,6 +13,9 @@ import { SendSpawnIntentEvent, SendTargetPlayerIntentEvent, } from "../../Transport"; +import { EventBus } from "../../../core/EventBus"; +import { PlayerView } from "../../../core/game/GameView"; +import { TileRef } from "../../../core/game/GameMap"; import { UIState } from "../UIState"; export class PlayerActionHandler { diff --git a/src/client/graphics/layers/PlayerInfoOverlay.ts b/src/client/graphics/layers/PlayerInfoOverlay.ts index 640ffffd3..47b47ab6e 100644 --- a/src/client/graphics/layers/PlayerInfoOverlay.ts +++ b/src/client/graphics/layers/PlayerInfoOverlay.ts @@ -1,9 +1,6 @@ +import { ContextMenuEvent, MouseMoveEvent } from "../../InputHandler"; +import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; import { LitElement, TemplateResult, html } from "lit"; -import { ref } from "lit-html/directives/ref.js"; -import { customElement, property, state } from "lit/decorators.js"; -import { translateText } from "../../../client/Utils"; -import { renderPlayerFlag } from "../../../core/CustomFlag"; -import { EventBus } from "../../../core/EventBus"; import { PlayerProfile, PlayerType, @@ -11,13 +8,16 @@ import { Unit, UnitType, } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; -import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; -import { ContextMenuEvent, MouseMoveEvent } from "../../InputHandler"; +import { customElement, property, state } from "lit/decorators.js"; import { renderNumber, renderTroops } from "../../Utils"; -import { TransformHandler } from "../TransformHandler"; -import { Layer } from "./Layer"; import { CloseRadialMenuEvent } from "./RadialMenu"; +import { EventBus } from "../../../core/EventBus"; +import { Layer } from "./Layer"; +import { TileRef } from "../../../core/game/GameMap"; +import { TransformHandler } from "../TransformHandler"; +import { ref } from "lit-html/directives/ref.js"; +import { renderPlayerFlag } from "../../../core/CustomFlag"; +import { translateText } from "../../../client/Utils"; function euclideanDistWorld( coord: { x: number; y: number }, diff --git a/src/client/graphics/layers/PlayerPanel.ts b/src/client/graphics/layers/PlayerPanel.ts index d9e9e99a6..78ded064b 100644 --- a/src/client/graphics/layers/PlayerPanel.ts +++ b/src/client/graphics/layers/PlayerPanel.ts @@ -1,19 +1,7 @@ -import { html, LitElement } from "lit"; -import { customElement, state } from "lit/decorators.js"; -import allianceIcon from "../../../../resources/images/AllianceIconWhite.svg"; -import chatIcon from "../../../../resources/images/ChatIconWhite.svg"; -import donateGoldIcon from "../../../../resources/images/DonateGoldIconWhite.svg"; -import donateTroopIcon from "../../../../resources/images/DonateTroopIconWhite.svg"; -import emojiIcon from "../../../../resources/images/EmojiIconWhite.svg"; -import targetIcon from "../../../../resources/images/TargetIconWhite.svg"; -import traitorIcon from "../../../../resources/images/TraitorIconWhite.svg"; -import { translateText } from "../../../client/Utils"; -import { EventBus } from "../../../core/EventBus"; import { AllPlayers, PlayerActions } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; -import { GameView, PlayerView } from "../../../core/game/GameView"; -import { flattenedEmojiTable } from "../../../core/Util"; import { CloseViewEvent, MouseUpEvent } from "../../InputHandler"; +import { GameView, PlayerView } from "../../../core/game/GameView"; +import { LitElement, html } from "lit"; import { SendAllianceRequestIntentEvent, SendBreakAllianceIntentEvent, @@ -23,11 +11,23 @@ import { SendEmojiIntentEvent, SendTargetPlayerIntentEvent, } from "../../Transport"; +import { customElement, state } from "lit/decorators.js"; import { renderNumber, renderTroops } from "../../Utils"; -import { UIState } from "../UIState"; import { ChatModal } from "./ChatModal"; import { EmojiTable } from "./EmojiTable"; +import { EventBus } from "../../../core/EventBus"; import { Layer } from "./Layer"; +import { TileRef } from "../../../core/game/GameMap"; +import { UIState } from "../UIState"; +import allianceIcon from "../../../../resources/images/AllianceIconWhite.svg"; +import chatIcon from "../../../../resources/images/ChatIconWhite.svg"; +import donateGoldIcon from "../../../../resources/images/DonateGoldIconWhite.svg"; +import donateTroopIcon from "../../../../resources/images/DonateTroopIconWhite.svg"; +import emojiIcon from "../../../../resources/images/EmojiIconWhite.svg"; +import { flattenedEmojiTable } from "../../../core/Util"; +import targetIcon from "../../../../resources/images/TargetIconWhite.svg"; +import traitorIcon from "../../../../resources/images/TraitorIconWhite.svg"; +import { translateText } from "../../../client/Utils"; @customElement("player-panel") export class PlayerPanel extends LitElement implements Layer { diff --git a/src/client/graphics/layers/RadialMenu.ts b/src/client/graphics/layers/RadialMenu.ts index 2c8024d03..a05ef5e5a 100644 --- a/src/client/graphics/layers/RadialMenu.ts +++ b/src/client/graphics/layers/RadialMenu.ts @@ -1,16 +1,16 @@ /* eslint-disable max-lines */ import * as d3 from "d3"; -import backIcon from "../../../../resources/images/BackIconWhite.svg"; -import { EventBus, GameEvent } from "../../../core/EventBus"; -import { CloseViewEvent } from "../../InputHandler"; -import { translateText } from "../../Utils"; -import { Layer } from "./Layer"; import { CenterButtonElement, MenuElement, MenuElementParams, TooltipKey, } from "./RadialMenuElements"; +import { EventBus, GameEvent } from "../../../core/EventBus"; +import { CloseViewEvent } from "../../InputHandler"; +import { Layer } from "./Layer"; +import backIcon from "../../../../resources/images/BackIconWhite.svg"; +import { translateText } from "../../Utils"; export class CloseRadialMenuEvent implements GameEvent { constructor() {} diff --git a/src/client/graphics/layers/RadialMenuElements.ts b/src/client/graphics/layers/RadialMenuElements.ts index 53e58a870..ed7b77144 100644 --- a/src/client/graphics/layers/RadialMenuElements.ts +++ b/src/client/graphics/layers/RadialMenuElements.ts @@ -1,16 +1,15 @@ -import { Config } from "../../../core/configuration/Config"; import { AllPlayers, PlayerActions, UnitType } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; -import { GameView, PlayerView } from "../../../core/game/GameView"; -import { flattenedEmojiTable } from "../../../core/Util"; -import { renderNumber, translateText } from "../../Utils"; import { BuildItemDisplay, BuildMenu, flattenedBuildTable } from "./BuildMenu"; +import { GameView, PlayerView } from "../../../core/game/GameView"; +import { renderNumber, translateText } from "../../Utils"; import { ChatIntegration } from "./ChatIntegration"; +import { Config } from "../../../core/configuration/Config"; import { EmojiTable } from "./EmojiTable"; +import { EventBus } from "../../../core/EventBus"; import { PlayerActionHandler } from "./PlayerActionHandler"; import { PlayerPanel } from "./PlayerPanel"; +import { TileRef } from "../../../core/game/GameMap"; import { TooltipItem } from "./RadialMenu"; - import allianceIcon from "../../../../resources/images/AllianceIconWhite.svg"; import boatIcon from "../../../../resources/images/BoatIconWhite.svg"; import buildIcon from "../../../../resources/images/BuildIconWhite.svg"; @@ -18,12 +17,12 @@ import chatIcon from "../../../../resources/images/ChatIconWhite.svg"; import donateGoldIcon from "../../../../resources/images/DonateGoldIconWhite.svg"; import donateTroopIcon from "../../../../resources/images/DonateTroopIconWhite.svg"; import emojiIcon from "../../../../resources/images/EmojiIconWhite.svg"; +import { flattenedEmojiTable } from "../../../core/Util"; import infoIcon from "../../../../resources/images/InfoIcon.svg"; import swordIcon from "../../../../resources/images/SwordIconWhite.svg"; import targetIcon from "../../../../resources/images/TargetIconWhite.svg"; import traitorIcon from "../../../../resources/images/TraitorIconWhite.svg"; import xIcon from "../../../../resources/images/XIcon.svg"; -import { EventBus } from "../../../core/EventBus"; export type MenuElementParams = { myPlayer: PlayerView; diff --git a/src/client/graphics/layers/RailroadLayer.ts b/src/client/graphics/layers/RailroadLayer.ts index 8d111b93e..55d4981d0 100644 --- a/src/client/graphics/layers/RailroadLayer.ts +++ b/src/client/graphics/layers/RailroadLayer.ts @@ -1,15 +1,15 @@ -import { Colord } from "colord"; -import { Theme } from "../../../core/configuration/Config"; -import { PlayerID } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; import { GameUpdateType, - RailroadUpdate, RailTile, RailType, + RailroadUpdate, } from "../../../core/game/GameUpdates"; +import { Colord } from "colord"; import { GameView } from "../../../core/game/GameView"; import { Layer } from "./Layer"; +import { PlayerID } from "../../../core/game/Game"; +import { Theme } from "../../../core/configuration/Config"; +import { TileRef } from "../../../core/game/GameMap"; import { getRailroadRects } from "./RailroadSprites"; type RailRef = { diff --git a/src/client/graphics/layers/ReplayPanel.ts b/src/client/graphics/layers/ReplayPanel.ts index a2fad7bba..9cf12a99d 100644 --- a/src/client/graphics/layers/ReplayPanel.ts +++ b/src/client/graphics/layers/ReplayPanel.ts @@ -1,14 +1,14 @@ -import { html, LitElement } from "lit"; +import { LitElement, html } from "lit"; +import { + ReplaySpeedMultiplier, + defaultReplaySpeedMultiplier, +} from "../../utilities/ReplaySpeedMultiplier"; import { customElement, property, state } from "lit/decorators.js"; import { EventBus } from "../../../core/EventBus"; import { GameView } from "../../../core/game/GameView"; -import { ReplaySpeedChangeEvent } from "../../InputHandler"; -import { - defaultReplaySpeedMultiplier, - ReplaySpeedMultiplier, -} from "../../utilities/ReplaySpeedMultiplier"; -import { translateText } from "../../Utils"; import { Layer } from "./Layer"; +import { ReplaySpeedChangeEvent } from "../../InputHandler"; +import { translateText } from "../../Utils"; export class ShowReplayPanelEvent { constructor( diff --git a/src/client/graphics/layers/SettingsModal.ts b/src/client/graphics/layers/SettingsModal.ts index 847ec499b..90041109f 100644 --- a/src/client/graphics/layers/SettingsModal.ts +++ b/src/client/graphics/layers/SettingsModal.ts @@ -1,6 +1,10 @@ -import { html, LitElement } from "lit"; +import { AlternateViewEvent, RedrawGraphicsEvent } from "../../InputHandler"; +import { LitElement, html } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; -import structureIcon from "../../../../resources/images/CityIconWhite.svg"; +import { EventBus } from "../../../core/EventBus"; +import { Layer } from "./Layer"; +import { PauseGameEvent } from "../../Transport"; +import { UserSettings } from "../../../core/game/UserSettings"; import darkModeIcon from "../../../../resources/images/DarkModeIconWhite.svg"; import emojiIcon from "../../../../resources/images/EmojiIconWhite.svg"; import exitIcon from "../../../../resources/images/ExitIconWhite.svg"; @@ -8,13 +12,9 @@ import explosionIcon from "../../../../resources/images/ExplosionIconWhite.svg"; import mouseIcon from "../../../../resources/images/MouseIconWhite.svg"; import ninjaIcon from "../../../../resources/images/NinjaIconWhite.svg"; import settingsIcon from "../../../../resources/images/SettingIconWhite.svg"; -import treeIcon from "../../../../resources/images/TreeIconWhite.svg"; -import { EventBus } from "../../../core/EventBus"; -import { UserSettings } from "../../../core/game/UserSettings"; -import { AlternateViewEvent, RefreshGraphicsEvent } from "../../InputHandler"; -import { PauseGameEvent } from "../../Transport"; +import structureIcon from "../../../../resources/images/CityIconWhite.svg"; import { translateText } from "../../Utils"; -import { Layer } from "./Layer"; +import treeIcon from "../../../../resources/images/TreeIconWhite.svg"; export class ShowSettingsModalEvent { constructor( @@ -126,7 +126,7 @@ export class SettingsModal extends LitElement implements Layer { private onToggleDarkModeButtonClick() { this.userSettings.toggleDarkMode(); - this.eventBus.emit(new RefreshGraphicsEvent()); + this.eventBus.emit(new RedrawGraphicsEvent()); this.requestUpdate(); } diff --git a/src/client/graphics/layers/SpawnAd.ts b/src/client/graphics/layers/SpawnAd.ts index ea0936d5e..8e9c49da1 100644 --- a/src/client/graphics/layers/SpawnAd.ts +++ b/src/client/graphics/layers/SpawnAd.ts @@ -1,9 +1,9 @@ import { LitElement, css, html } from "lit"; import { customElement, state } from "lit/decorators.js"; -import { translateText } from "../../../client/Utils"; import { GameView } from "../../../core/game/GameView"; -import { getGamesPlayed } from "../../Utils"; import { Layer } from "./Layer"; +import { getGamesPlayed } from "../../Utils"; +import { translateText } from "../../../client/Utils"; const AD_TYPE = "bottom_rail"; const AD_CONTAINER_ID = "bottom-rail-ad-container"; diff --git a/src/client/graphics/layers/SpawnTimer.ts b/src/client/graphics/layers/SpawnTimer.ts index da96c89a1..2310d037f 100644 --- a/src/client/graphics/layers/SpawnTimer.ts +++ b/src/client/graphics/layers/SpawnTimer.ts @@ -1,7 +1,7 @@ import { GameMode, Team } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; -import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; +import { TransformHandler } from "../TransformHandler"; export class SpawnTimer implements Layer { private ratios = [0]; diff --git a/src/client/graphics/layers/StructureIconsLayer.ts b/src/client/graphics/layers/StructureIconsLayer.ts index 5c6169ab4..e4f3736d5 100644 --- a/src/client/graphics/layers/StructureIconsLayer.ts +++ b/src/client/graphics/layers/StructureIconsLayer.ts @@ -1,20 +1,20 @@ -import { OutlineFilter } from "pixi-filters"; import * as PIXI from "pixi.js"; -import bitmapFont from "../../../../resources/fonts/round_6x6_modified.xml"; +import { Cell, PlayerID, UnitType } from "../../../core/game/Game"; +import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; +import { EventBus } from "../../../core/EventBus"; +import { GameUpdateType } from "../../../core/game/GameUpdates"; +import { Layer } from "./Layer"; +import { OutlineFilter } from "pixi-filters"; +import SAMMissileIcon from "../../../../resources/images/SamLauncherUnit.png"; +import { Theme } from "../../../core/configuration/Config"; +import { ToggleStructureEvent } from "../../InputHandler"; +import { TransformHandler } from "../TransformHandler"; import anchorIcon from "../../../../resources/images/AnchorIcon.png"; +import bitmapFont from "../../../../resources/fonts/round_6x6_modified.xml"; import cityIcon from "../../../../resources/images/CityIcon.png"; import factoryIcon from "../../../../resources/images/FactoryUnit.png"; import missileSiloIcon from "../../../../resources/images/MissileSiloUnit.png"; -import SAMMissileIcon from "../../../../resources/images/SamLauncherUnit.png"; import shieldIcon from "../../../../resources/images/ShieldIcon.png"; -import { Theme } from "../../../core/configuration/Config"; -import { EventBus } from "../../../core/EventBus"; -import { Cell, PlayerID, UnitType } from "../../../core/game/Game"; -import { GameUpdateType } from "../../../core/game/GameUpdates"; -import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; -import { ToggleStructureEvent } from "../../InputHandler"; -import { TransformHandler } from "../TransformHandler"; -import { Layer } from "./Layer"; type ShapeType = "triangle" | "square" | "pentagon" | "octagon" | "circle"; diff --git a/src/client/graphics/layers/StructureLayer.ts b/src/client/graphics/layers/StructureLayer.ts index 46fe69dc6..7705c4bad 100644 --- a/src/client/graphics/layers/StructureLayer.ts +++ b/src/client/graphics/layers/StructureLayer.ts @@ -1,19 +1,18 @@ -import { colord, Colord } from "colord"; -import { Theme } from "../../../core/configuration/Config"; +import { Cell, UnitType } from "../../../core/game/Game"; +import { Colord, colord } from "colord"; +import { GameView, UnitView } from "../../../core/game/GameView"; +import { euclDistFN, isometricDistFN } from "../../../core/game/GameMap"; import { EventBus } from "../../../core/EventBus"; -import { TransformHandler } from "../TransformHandler"; +import { GameUpdateType } from "../../../core/game/GameUpdates"; import { Layer } from "./Layer"; - +import SAMMissileIcon from "../../../../resources/non-commercial/images/buildings/silo4.png"; +import { Theme } from "../../../core/configuration/Config"; +import { TransformHandler } from "../TransformHandler"; +import anchorIcon from "../../../../resources/non-commercial/images/buildings/port1.png"; import cityIcon from "../../../../resources/non-commercial/images/buildings/cityAlt1.png"; import factoryIcon from "../../../../resources/non-commercial/images/buildings/factoryAlt1.png"; -import shieldIcon from "../../../../resources/non-commercial/images/buildings/fortAlt3.png"; -import anchorIcon from "../../../../resources/non-commercial/images/buildings/port1.png"; import missileSiloIcon from "../../../../resources/non-commercial/images/buildings/silo1.png"; -import SAMMissileIcon from "../../../../resources/non-commercial/images/buildings/silo4.png"; -import { Cell, UnitType } from "../../../core/game/Game"; -import { euclDistFN, isometricDistFN } from "../../../core/game/GameMap"; -import { GameUpdateType } from "../../../core/game/GameUpdates"; -import { GameView, UnitView } from "../../../core/game/GameView"; +import shieldIcon from "../../../../resources/non-commercial/images/buildings/fortAlt3.png"; const underConstructionColor = colord({ r: 150, g: 150, b: 150 }); diff --git a/src/client/graphics/layers/TeamStats.ts b/src/client/graphics/layers/TeamStats.ts index 44540048f..fea4d9c67 100644 --- a/src/client/graphics/layers/TeamStats.ts +++ b/src/client/graphics/layers/TeamStats.ts @@ -1,9 +1,9 @@ -import { LitElement, html } from "lit"; -import { customElement, property } from "lit/decorators.js"; -import { EventBus } from "../../../core/EventBus"; import { GameMode, Team, UnitType } from "../../../core/game/Game"; import { GameView, PlayerView } from "../../../core/game/GameView"; +import { LitElement, html } from "lit"; +import { customElement, property } from "lit/decorators.js"; import { renderNumber, translateText } from "../../Utils"; +import { EventBus } from "../../../core/EventBus"; import { Layer } from "./Layer"; type TeamEntry = { diff --git a/src/client/graphics/layers/TerrainLayer.ts b/src/client/graphics/layers/TerrainLayer.ts index d89f43427..0ca543445 100644 --- a/src/client/graphics/layers/TerrainLayer.ts +++ b/src/client/graphics/layers/TerrainLayer.ts @@ -1,7 +1,7 @@ -import { Theme } from "../../../core/configuration/Config"; import { GameView } from "../../../core/game/GameView"; -import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; +import { Theme } from "../../../core/configuration/Config"; +import { TransformHandler } from "../TransformHandler"; export class TerrainLayer implements Layer { private canvas: HTMLCanvasElement; diff --git a/src/client/graphics/layers/TerritoryLayer.ts b/src/client/graphics/layers/TerritoryLayer.ts index 045e5adf2..e77175c0e 100644 --- a/src/client/graphics/layers/TerritoryLayer.ts +++ b/src/client/graphics/layers/TerritoryLayer.ts @@ -1,21 +1,21 @@ -import { PriorityQueue } from "@datastructures-js/priority-queue"; -import { Colord } from "colord"; -import { Theme } from "../../../core/configuration/Config"; -import { EventBus } from "../../../core/EventBus"; -import { Cell, PlayerType, UnitType } from "../../../core/game/Game"; -import { euclDistFN, TileRef } from "../../../core/game/GameMap"; -import { GameUpdateType } from "../../../core/game/GameUpdates"; -import { GameView, PlayerView } from "../../../core/game/GameView"; -import { UserSettings } from "../../../core/game/UserSettings"; -import { PseudoRandom } from "../../../core/PseudoRandom"; import { AlternateViewEvent, DragEvent, MouseOverEvent, - RefreshGraphicsEvent, + RedrawGraphicsEvent, } from "../../InputHandler"; -import { TransformHandler } from "../TransformHandler"; +import { Cell, PlayerType, UnitType } from "../../../core/game/Game"; +import { GameView, PlayerView } from "../../../core/game/GameView"; +import { TileRef, euclDistFN } from "../../../core/game/GameMap"; +import { Colord } from "colord"; +import { EventBus } from "../../../core/EventBus"; +import { GameUpdateType } from "../../../core/game/GameUpdates"; import { Layer } from "./Layer"; +import { PriorityQueue } from "@datastructures-js/priority-queue"; +import { PseudoRandom } from "../../../core/PseudoRandom"; +import { Theme } from "../../../core/configuration/Config"; +import { TransformHandler } from "../TransformHandler"; +import { UserSettings } from "../../../core/game/UserSettings"; export class TerritoryLayer implements Layer { private userSettings: UserSettings; @@ -77,7 +77,7 @@ export class TerritoryLayer implements Layer { const prev = this.cachedTerritoryPatternsEnabled; this.cachedTerritoryPatternsEnabled = this.userSettings.territoryPatterns(); if (prev !== undefined && prev !== this.cachedTerritoryPatternsEnabled) { - this.eventBus.emit(new RefreshGraphicsEvent()); + this.eventBus.emit(new RedrawGraphicsEvent()); } this.game.recentlyUpdatedTiles().forEach((t) => this.enqueueTile(t)); const updates = this.game.updatesSinceLastTick(); diff --git a/src/client/graphics/layers/UILayer.ts b/src/client/graphics/layers/UILayer.ts index c05b8b1b1..a106dfe4c 100644 --- a/src/client/graphics/layers/UILayer.ts +++ b/src/client/graphics/layers/UILayer.ts @@ -1,14 +1,14 @@ +import { GameView, UnitView } from "../../../core/game/GameView"; import { Colord } from "colord"; import { EventBus } from "../../../core/EventBus"; -import { Theme } from "../../../core/configuration/Config"; -import { UnitType } from "../../../core/game/Game"; import { GameUpdateType } from "../../../core/game/GameUpdates"; -import { GameView, UnitView } from "../../../core/game/GameView"; -import { UserSettings } from "../../../core/game/UserSettings"; -import { UnitSelectionEvent } from "../../InputHandler"; -import { ProgressBar } from "../ProgressBar"; -import { TransformHandler } from "../TransformHandler"; import { Layer } from "./Layer"; +import { ProgressBar } from "../ProgressBar"; +import { Theme } from "../../../core/configuration/Config"; +import { TransformHandler } from "../TransformHandler"; +import { UnitSelectionEvent } from "../../InputHandler"; +import { UnitType } from "../../../core/game/Game"; +import { UserSettings } from "../../../core/game/UserSettings"; const COLOR_PROGRESSION = [ "rgb(232, 25, 25)", diff --git a/src/client/graphics/layers/UnitDisplay.ts b/src/client/graphics/layers/UnitDisplay.ts index fbc6d7c82..cff1c0602 100644 --- a/src/client/graphics/layers/UnitDisplay.ts +++ b/src/client/graphics/layers/UnitDisplay.ts @@ -1,17 +1,17 @@ -import { html, LitElement } from "lit"; -import { customElement } from "lit/decorators.js"; -import portIcon from "../../../../resources/images/AnchorIcon.png"; +import { LitElement, html } from "lit"; +import { EventBus } from "../../../core/EventBus"; +import { GameView } from "../../../core/game/GameView"; +import { Layer } from "./Layer"; +import { ToggleStructureEvent } from "../../InputHandler"; +import { UnitType } from "../../../core/game/Game"; import cityIcon from "../../../../resources/images/CityIconWhite.svg"; +import { customElement } from "lit/decorators.js"; +import defensePostIcon from "../../../../resources/images/ShieldIconWhite.svg"; import factoryIcon from "../../../../resources/images/FactoryIconWhite.svg"; import missileSiloIcon from "../../../../resources/images/MissileSiloUnit.png"; -import defensePostIcon from "../../../../resources/images/ShieldIconWhite.svg"; -import samLauncherIcon from "../../../../resources/non-commercial/svg/SamLauncherIconWhite.svg"; -import { EventBus } from "../../../core/EventBus"; -import { UnitType } from "../../../core/game/Game"; -import { GameView } from "../../../core/game/GameView"; -import { ToggleStructureEvent } from "../../InputHandler"; +import portIcon from "../../../../resources/images/AnchorIcon.png"; import { renderNumber } from "../../Utils"; -import { Layer } from "./Layer"; +import samLauncherIcon from "../../../../resources/non-commercial/svg/SamLauncherIconWhite.svg"; @customElement("unit-display") export class UnitDisplay extends LitElement implements Layer { diff --git a/src/client/graphics/layers/UnitLayer.ts b/src/client/graphics/layers/UnitLayer.ts index 725eb1be6..577a87206 100644 --- a/src/client/graphics/layers/UnitLayer.ts +++ b/src/client/graphics/layers/UnitLayer.ts @@ -1,25 +1,24 @@ -import { colord, Colord } from "colord"; -import { EventBus } from "../../../core/EventBus"; -import { Theme } from "../../../core/configuration/Config"; -import { UnitType } from "../../../core/game/Game"; -import { TileRef } from "../../../core/game/GameMap"; -import { GameView, UnitView } from "../../../core/game/GameView"; -import { BezenhamLine } from "../../../core/utilities/Line"; import { AlternateViewEvent, MouseUpEvent, UnitSelectionEvent, } from "../../InputHandler"; -import { MoveWarshipIntentEvent } from "../../Transport"; -import { TransformHandler } from "../TransformHandler"; -import { Layer } from "./Layer"; - -import { GameUpdateType } from "../../../core/game/GameUpdates"; +import { Colord, colord } from "colord"; +import { GameView, UnitView } from "../../../core/game/GameView"; import { getColoredSprite, isSpriteReady, loadAllSprites, } from "../SpriteLoader"; +import { BezenhamLine } from "../../../core/utilities/Line"; +import { EventBus } from "../../../core/EventBus"; +import { GameUpdateType } from "../../../core/game/GameUpdates"; +import { Layer } from "./Layer"; +import { MoveWarshipIntentEvent } from "../../Transport"; +import { Theme } from "../../../core/configuration/Config"; +import { TileRef } from "../../../core/game/GameMap"; +import { TransformHandler } from "../TransformHandler"; +import { UnitType } from "../../../core/game/Game"; enum Relationship { Self, diff --git a/src/client/graphics/layers/WinModal.ts b/src/client/graphics/layers/WinModal.ts index 25b4ff42c..ef465378c 100644 --- a/src/client/graphics/layers/WinModal.ts +++ b/src/client/graphics/layers/WinModal.ts @@ -1,12 +1,12 @@ import { LitElement, css, html } from "lit"; import { customElement, state } from "lit/decorators.js"; -import { translateText } from "../../../client/Utils"; import { EventBus } from "../../../core/EventBus"; import { GameUpdateType } from "../../../core/game/GameUpdates"; import { GameView } from "../../../core/game/GameView"; -import { SendWinnerEvent } from "../../Transport"; import { GutterAdModalEvent } from "./GutterAdModal"; import { Layer } from "./Layer"; +import { SendWinnerEvent } from "../../Transport"; +import { translateText } from "../../../client/Utils"; @customElement("win-modal") export class WinModal extends LitElement implements Layer { diff --git a/src/client/jwt.ts b/src/client/jwt.ts index 8b365adf6..68a230bca 100644 --- a/src/client/jwt.ts +++ b/src/client/jwt.ts @@ -1,5 +1,3 @@ -import { decodeJwt } from "jose"; -import { z } from "zod"; import { RefreshResponseSchema, TokenPayload, @@ -7,7 +5,9 @@ import { UserMeResponse, UserMeResponseSchema, } from "../core/ApiSchemas"; +import { decodeJwt } from "jose"; import { getServerConfigFromClient } from "../core/configuration/ConfigLoader"; +import { z } from "zod"; function getAudience() { const { hostname } = new URL(window.location.href); diff --git a/src/client/utilities/RenderUnitTypeOptions.ts b/src/client/utilities/RenderUnitTypeOptions.ts index 725f2bff5..24d4d5f7f 100644 --- a/src/client/utilities/RenderUnitTypeOptions.ts +++ b/src/client/utilities/RenderUnitTypeOptions.ts @@ -1,5 +1,5 @@ // renderUnitTypeOptions.ts -import { html, TemplateResult } from "lit"; +import { TemplateResult, html } from "lit"; import { UnitType } from "../../core/game/Game"; import { translateText } from "../Utils"; diff --git a/src/core/ApiSchemas.ts b/src/core/ApiSchemas.ts index 493fab6f4..a46f2976a 100644 --- a/src/core/ApiSchemas.ts +++ b/src/core/ApiSchemas.ts @@ -1,6 +1,6 @@ // This file contains schemas for api.openfront.io -import { z } from "zod"; import { base64urlToUuid } from "./Base64"; +import { z } from "zod"; export const RefreshResponseSchema = z.object({ token: z.string(), diff --git a/src/core/CosmeticSchemas.ts b/src/core/CosmeticSchemas.ts index af3469fe1..c8950fcc1 100644 --- a/src/core/CosmeticSchemas.ts +++ b/src/core/CosmeticSchemas.ts @@ -1,5 +1,5 @@ -import { z } from "zod"; import { RequiredPatternSchema } from "./Schemas"; +import { z } from "zod"; export const ProductSchema = z.object({ productId: z.string(), diff --git a/src/core/ExpressSchemas.ts b/src/core/ExpressSchemas.ts index fbbc6fb90..23491e470 100644 --- a/src/core/ExpressSchemas.ts +++ b/src/core/ExpressSchemas.ts @@ -1,6 +1,6 @@ // This file contians schemas for the primary openfront express server -import { z } from "zod"; import { GameInfoSchema } from "./Schemas"; +import { z } from "zod"; export const ApiEnvResponseSchema = z.object({ game_env: z.string(), diff --git a/src/core/GameRunner.ts b/src/core/GameRunner.ts index 186232380..7f21d5292 100644 --- a/src/core/GameRunner.ts +++ b/src/core/GameRunner.ts @@ -1,7 +1,3 @@ -import { placeName } from "../client/graphics/NameBoxCalculator"; -import { getConfig } from "./configuration/ConfigLoader"; -import { Executor } from "./execution/ExecutionManager"; -import { WinCheckExecution } from "./execution/WinCheckExecution"; import { AllPlayers, Attack, @@ -18,19 +14,23 @@ import { PlayerProfile, PlayerType, } from "./game/Game"; -import { createGame } from "./game/GameImpl"; -import { TileRef } from "./game/GameMap"; -import { GameMapLoader } from "./game/GameMapLoader"; +import { ClientID, GameStartInfo, Turn } from "./Schemas"; import { ErrorUpdate, GameUpdateType, GameUpdateViewData, } from "./game/GameUpdates"; -import { loadTerrainMap as loadGameMap } from "./game/TerrainMapLoader"; -import { PseudoRandom } from "./PseudoRandom"; -import { ClientID, GameStartInfo, Turn } from "./Schemas"; import { sanitize, simpleHash } from "./Util"; +import { Executor } from "./execution/ExecutionManager"; +import { GameMapLoader } from "./game/GameMapLoader"; +import { PseudoRandom } from "./PseudoRandom"; +import { TileRef } from "./game/GameMap"; +import { WinCheckExecution } from "./execution/WinCheckExecution"; +import { createGame } from "./game/GameImpl"; import { fixProfaneUsername } from "./validations/username"; +import { getConfig } from "./configuration/ConfigLoader"; +import { loadTerrainMap } from "./game/TerrainMapLoader"; +import { placeName } from "../client/graphics/NameBoxCalculator"; export async function createGameRunner( gameStart: GameStartInfo, @@ -39,7 +39,7 @@ export async function createGameRunner( callBack: (gu: GameUpdateViewData | ErrorUpdate) => void, ): Promise { const config = await getConfig(gameStart.config, null); - const gameMap = await loadGameMap(gameStart.config.gameMap, mapLoader); + const gameMap = await loadTerrainMap(gameStart.config.gameMap, mapLoader); const random = new PseudoRandom(simpleHash(gameStart.gameID)); const humans = gameStart.players.map( diff --git a/src/core/Schemas.ts b/src/core/Schemas.ts index 02f9e7ea5..ce8055d8f 100644 --- a/src/core/Schemas.ts +++ b/src/core/Schemas.ts @@ -1,7 +1,3 @@ -import { base64url } from "jose"; -import { z } from "zod"; -import quickChatData from "../../resources/QuickChat.json" with { type: "json" }; -import countries from "../client/data/countries.json" with { type: "json" }; import { AllPlayers, Difficulty, @@ -16,7 +12,11 @@ import { } from "./game/Game"; import { PatternDecoder } from "./PatternDecoder"; import { PlayerStatsSchema } from "./StatsSchemas"; +import { base64url } from "jose"; +import countries from "../client/data/countries.json" with { type: "json" }; import { flattenedEmojiTable } from "./Util"; +import quickChatData from "../../resources/QuickChat.json" with { type: "json" }; +import { z } from "zod"; export type GameID = string; export type ClientID = string; diff --git a/src/core/StatsSchemas.ts b/src/core/StatsSchemas.ts index 41cb3a47e..6f58d84f2 100644 --- a/src/core/StatsSchemas.ts +++ b/src/core/StatsSchemas.ts @@ -1,5 +1,5 @@ -import { z } from "zod"; import { UnitType } from "./game/Game"; +import { z } from "zod"; export const BombUnitSchema = z.union([ z.literal("abomb"), diff --git a/src/core/Util.ts b/src/core/Util.ts index 30a4ee97b..8a35a43f1 100644 --- a/src/core/Util.ts +++ b/src/core/Util.ts @@ -1,7 +1,8 @@ -import DOMPurify from "dompurify"; -import { customAlphabet } from "nanoid"; +import { + BOT_NAME_PREFIXES, + BOT_NAME_SUFFIXES, +} from "./execution/utils/BotNames"; import { Cell, Unit } from "./game/Game"; -import { GameMap, TileRef } from "./game/GameMap"; import { GameConfig, GameID, @@ -10,12 +11,10 @@ import { Turn, Winner, } from "./Schemas"; - +import { GameMap, TileRef } from "./game/GameMap"; +import DOMPurify from "dompurify"; import { ServerConfig } from "./configuration/Config"; -import { - BOT_NAME_PREFIXES, - BOT_NAME_SUFFIXES, -} from "./execution/utils/BotNames"; +import { customAlphabet } from "nanoid"; export function manhattanDistWrapped( c1: Cell, diff --git a/src/core/WorkerSchemas.ts b/src/core/WorkerSchemas.ts index dbda38b10..f8ce25778 100644 --- a/src/core/WorkerSchemas.ts +++ b/src/core/WorkerSchemas.ts @@ -1,6 +1,6 @@ // This file contians schemas for the openfront worker express server -import { z } from "zod"; import { GameConfigSchema, GameRecordSchema } from "./Schemas"; +import { z } from "zod"; export const CreateGameInputSchema = GameConfigSchema.or( z diff --git a/src/core/configuration/ColorAllocator.ts b/src/core/configuration/ColorAllocator.ts index 6284e3ced..ccd9d2876 100644 --- a/src/core/configuration/ColorAllocator.ts +++ b/src/core/configuration/ColorAllocator.ts @@ -1,10 +1,5 @@ import { Colord, extend } from "colord"; -import labPlugin from "colord/plugins/lab"; -import lchPlugin from "colord/plugins/lch"; -import Color from "colorjs.io"; import { ColoredTeams, Team } from "../game/Game"; -import { PseudoRandom } from "../PseudoRandom"; -import { simpleHash } from "../Util"; import { blueTeamColors, botTeamColors, @@ -15,6 +10,11 @@ import { tealTeamColors, yellowTeamColors, } from "./Colors"; +import Color from "colorjs.io"; +import { PseudoRandom } from "../PseudoRandom"; +import labPlugin from "colord/plugins/lab"; +import lchPlugin from "colord/plugins/lch"; +import { simpleHash } from "../Util"; extend([lchPlugin]); extend([labPlugin]); diff --git a/src/core/configuration/Colors.ts b/src/core/configuration/Colors.ts index 75441530a..afee46dc4 100644 --- a/src/core/configuration/Colors.ts +++ b/src/core/configuration/Colors.ts @@ -1,4 +1,4 @@ -import { colord, Colord, extend } from "colord"; +import { Colord, colord, extend } from "colord"; import labPlugin from "colord/plugins/lab"; import lchPlugin from "colord/plugins/lch"; diff --git a/src/core/configuration/Config.ts b/src/core/configuration/Config.ts index c9b7134e1..270024668 100644 --- a/src/core/configuration/Config.ts +++ b/src/core/configuration/Config.ts @@ -1,5 +1,3 @@ -import { Colord } from "colord"; -import { JWK } from "jose"; import { Difficulty, Game, @@ -14,11 +12,13 @@ import { UnitInfo, UnitType, } from "../game/Game"; +import { GameConfig, GameID, TeamCountConfig } from "../Schemas"; import { GameMap, TileRef } from "../game/GameMap"; +import { Colord } from "colord"; +import { JWK } from "jose"; +import { NukeType } from "../StatsSchemas"; import { PlayerView } from "../game/GameView"; import { UserSettings } from "../game/UserSettings"; -import { GameConfig, GameID, TeamCountConfig } from "../Schemas"; -import { NukeType } from "../StatsSchemas"; export enum GameEnv { Dev, diff --git a/src/core/configuration/ConfigLoader.ts b/src/core/configuration/ConfigLoader.ts index 3bb7f53fc..19667b45e 100644 --- a/src/core/configuration/ConfigLoader.ts +++ b/src/core/configuration/ConfigLoader.ts @@ -1,9 +1,9 @@ -import { ApiEnvResponseSchema } from "../ExpressSchemas"; -import { UserSettings } from "../game/UserSettings"; -import { GameConfig } from "../Schemas"; import { Config, GameEnv, ServerConfig } from "./Config"; -import { DefaultConfig } from "./DefaultConfig"; import { DevConfig, DevServerConfig } from "./DevConfig"; +import { ApiEnvResponseSchema } from "../ExpressSchemas"; +import { DefaultConfig } from "./DefaultConfig"; +import { GameConfig } from "../Schemas"; +import { UserSettings } from "../game/UserSettings"; import { preprodConfig } from "./PreprodConfig"; import { prodConfig } from "./ProdConfig"; diff --git a/src/core/configuration/DefaultConfig.ts b/src/core/configuration/DefaultConfig.ts index e8aae57e5..9c237ce01 100644 --- a/src/core/configuration/DefaultConfig.ts +++ b/src/core/configuration/DefaultConfig.ts @@ -1,6 +1,5 @@ /* eslint-disable max-lines */ -import { JWK } from "jose"; -import { z } from "zod"; +import { Config, GameEnv, NukeMagnitude, ServerConfig, Theme } from "./Config"; import { Difficulty, Duos, @@ -13,22 +12,23 @@ import { PlayerInfo, PlayerType, Quads, - TerrainType, TerraNullius, + TerrainType, Tick, Trios, UnitInfo, UnitType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; -import { PlayerView } from "../game/GameView"; -import { UserSettings } from "../game/UserSettings"; import { GameConfig, GameID, TeamCountConfig } from "../Schemas"; -import { NukeType } from "../StatsSchemas"; import { assertNever, simpleHash, within } from "../Util"; -import { Config, GameEnv, NukeMagnitude, ServerConfig, Theme } from "./Config"; +import { JWK } from "jose"; +import { NukeType } from "../StatsSchemas"; import { PastelTheme } from "./PastelTheme"; import { PastelThemeDark } from "./PastelThemeDark"; +import { PlayerView } from "../game/GameView"; +import { TileRef } from "../game/GameMap"; +import { UserSettings } from "../game/UserSettings"; +import { z } from "zod"; const JwksSchema = z.object({ keys: z diff --git a/src/core/configuration/DevConfig.ts b/src/core/configuration/DevConfig.ts index 3a14b39bb..6f20d5df6 100644 --- a/src/core/configuration/DevConfig.ts +++ b/src/core/configuration/DevConfig.ts @@ -1,8 +1,8 @@ -import { UnitInfo, UnitType } from "../game/Game"; -import { UserSettings } from "../game/UserSettings"; -import { GameConfig } from "../Schemas"; -import { GameEnv, ServerConfig } from "./Config"; import { DefaultConfig, DefaultServerConfig } from "./DefaultConfig"; +import { GameEnv, ServerConfig } from "./Config"; +import { UnitInfo, UnitType } from "../game/Game"; +import { GameConfig } from "../Schemas"; +import { UserSettings } from "../game/UserSettings"; export class DevServerConfig extends DefaultServerConfig { adminToken(): string { diff --git a/src/core/configuration/PastelTheme.ts b/src/core/configuration/PastelTheme.ts index dfcf23640..497755ec3 100644 --- a/src/core/configuration/PastelTheme.ts +++ b/src/core/configuration/PastelTheme.ts @@ -1,10 +1,10 @@ import { Colord, colord } from "colord"; -import { PseudoRandom } from "../PseudoRandom"; -import { PlayerType, Team, TerrainType } from "../game/Game"; import { GameMap, TileRef } from "../game/GameMap"; -import { PlayerView } from "../game/GameView"; -import { ColorAllocator } from "./ColorAllocator"; +import { PlayerType, Team, TerrainType } from "../game/Game"; import { botColors, fallbackColors, humanColors, nationColors } from "./Colors"; +import { ColorAllocator } from "./ColorAllocator"; +import { PlayerView } from "../game/GameView"; +import { PseudoRandom } from "../PseudoRandom"; import { Theme } from "./Config"; type ColorCache = Map; diff --git a/src/core/configuration/PastelThemeDark.ts b/src/core/configuration/PastelThemeDark.ts index c24016fb6..93cce1ea8 100644 --- a/src/core/configuration/PastelThemeDark.ts +++ b/src/core/configuration/PastelThemeDark.ts @@ -1,10 +1,10 @@ import { Colord, colord } from "colord"; -import { PseudoRandom } from "../PseudoRandom"; -import { PlayerType, Team, TerrainType } from "../game/Game"; import { GameMap, TileRef } from "../game/GameMap"; -import { PlayerView } from "../game/GameView"; -import { ColorAllocator } from "./ColorAllocator"; +import { PlayerType, Team, TerrainType } from "../game/Game"; import { botColors, fallbackColors, humanColors, nationColors } from "./Colors"; +import { ColorAllocator } from "./ColorAllocator"; +import { PlayerView } from "../game/GameView"; +import { PseudoRandom } from "../PseudoRandom"; import { Theme } from "./Config"; type ColorCache = Map; diff --git a/src/core/configuration/PreprodConfig.ts b/src/core/configuration/PreprodConfig.ts index a0567aaa9..75467cecb 100644 --- a/src/core/configuration/PreprodConfig.ts +++ b/src/core/configuration/PreprodConfig.ts @@ -1,5 +1,5 @@ -import { GameEnv } from "./Config"; import { DefaultServerConfig } from "./DefaultConfig"; +import { GameEnv } from "./Config"; export const preprodConfig = new (class extends DefaultServerConfig { env(): GameEnv { diff --git a/src/core/configuration/ProdConfig.ts b/src/core/configuration/ProdConfig.ts index 7bea841a8..24a671933 100644 --- a/src/core/configuration/ProdConfig.ts +++ b/src/core/configuration/ProdConfig.ts @@ -1,5 +1,5 @@ -import { GameEnv } from "./Config"; import { DefaultServerConfig } from "./DefaultConfig"; +import { GameEnv } from "./Config"; export const prodConfig = new (class extends DefaultServerConfig { numWorkers(): number { diff --git a/src/core/execution/AttackExecution.ts b/src/core/execution/AttackExecution.ts index 497cabd0e..e0cc014fe 100644 --- a/src/core/execution/AttackExecution.ts +++ b/src/core/execution/AttackExecution.ts @@ -1,4 +1,3 @@ -import { renderTroops } from "../../client/Utils"; import { Attack, Execution, @@ -7,12 +6,13 @@ import { Player, PlayerID, PlayerType, - TerrainType, TerraNullius, + TerrainType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; -import { PseudoRandom } from "../PseudoRandom"; import { FlatBinaryHeap } from "./utils/FlatBinaryHeap"; // adjust path if needed +import { PseudoRandom } from "../PseudoRandom"; +import { TileRef } from "../game/GameMap"; +import { renderTroops } from "../../client/Utils"; const malusForRetreat = 25; export class AttackExecution implements Execution { diff --git a/src/core/execution/BotExecution.ts b/src/core/execution/BotExecution.ts index ddd635cc8..533fd8009 100644 --- a/src/core/execution/BotExecution.ts +++ b/src/core/execution/BotExecution.ts @@ -1,7 +1,7 @@ import { Execution, Game, Player } from "../game/Game"; +import { BotBehavior } from "./utils/BotBehavior"; import { PseudoRandom } from "../PseudoRandom"; import { simpleHash } from "../Util"; -import { BotBehavior } from "./utils/BotBehavior"; export class BotExecution implements Execution { private active = true; diff --git a/src/core/execution/BotSpawner.ts b/src/core/execution/BotSpawner.ts index 134a7c666..29bbaa5fb 100644 --- a/src/core/execution/BotSpawner.ts +++ b/src/core/execution/BotSpawner.ts @@ -1,10 +1,10 @@ -import { Game, PlayerInfo, PlayerType } from "../game/Game"; -import { TileRef } from "../game/GameMap"; -import { PseudoRandom } from "../PseudoRandom"; -import { GameID } from "../Schemas"; -import { simpleHash } from "../Util"; -import { SpawnExecution } from "./SpawnExecution"; import { BOT_NAME_PREFIXES, BOT_NAME_SUFFIXES } from "./utils/BotNames"; +import { Game, PlayerInfo, PlayerType } from "../game/Game"; +import { GameID } from "../Schemas"; +import { PseudoRandom } from "../PseudoRandom"; +import { SpawnExecution } from "./SpawnExecution"; +import { TileRef } from "../game/GameMap"; +import { simpleHash } from "../Util"; export class BotSpawner { private random: PseudoRandom; diff --git a/src/core/execution/ConstructionExecution.ts b/src/core/execution/ConstructionExecution.ts index 772fe7e23..9ed452fbb 100644 --- a/src/core/execution/ConstructionExecution.ts +++ b/src/core/execution/ConstructionExecution.ts @@ -7,7 +7,6 @@ import { Unit, UnitType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { CityExecution } from "./CityExecution"; import { DefensePostExecution } from "./DefensePostExecution"; import { FactoryExecution } from "./FactoryExecution"; @@ -16,6 +15,7 @@ import { MissileSiloExecution } from "./MissileSiloExecution"; import { NukeExecution } from "./NukeExecution"; import { PortExecution } from "./PortExecution"; import { SAMLauncherExecution } from "./SAMLauncherExecution"; +import { TileRef } from "../game/GameMap"; import { WarshipExecution } from "./WarshipExecution"; export class ConstructionExecution implements Execution { diff --git a/src/core/execution/DefensePostExecution.ts b/src/core/execution/DefensePostExecution.ts index 40eb9c969..494e59179 100644 --- a/src/core/execution/DefensePostExecution.ts +++ b/src/core/execution/DefensePostExecution.ts @@ -1,6 +1,6 @@ import { Execution, Game, Player, Unit, UnitType } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { ShellExecution } from "./ShellExecution"; +import { TileRef } from "../game/GameMap"; export class DefensePostExecution implements Execution { private mg: Game; diff --git a/src/core/execution/ExecutionManager.ts b/src/core/execution/ExecutionManager.ts index 67bd7c92d..5c5e11a7f 100644 --- a/src/core/execution/ExecutionManager.ts +++ b/src/core/execution/ExecutionManager.ts @@ -1,14 +1,12 @@ -import { Execution, Game } from "../game/Game"; -import { PseudoRandom } from "../PseudoRandom"; import { ClientID, GameID, Intent, Turn } from "../Schemas"; -import { simpleHash } from "../Util"; +import { Execution, Game } from "../game/Game"; import { AllianceExtensionExecution } from "./alliance/AllianceExtensionExecution"; import { AllianceRequestExecution } from "./alliance/AllianceRequestExecution"; import { AllianceRequestReplyExecution } from "./alliance/AllianceRequestReplyExecution"; -import { BreakAllianceExecution } from "./alliance/BreakAllianceExecution"; import { AttackExecution } from "./AttackExecution"; import { BoatRetreatExecution } from "./BoatRetreatExecution"; import { BotSpawner } from "./BotSpawner"; +import { BreakAllianceExecution } from "./alliance/BreakAllianceExecution"; import { ConstructionExecution } from "./ConstructionExecution"; import { DeleteUnitExecution } from "./DeleteUnitExecution"; import { DonateGoldExecution } from "./DonateGoldExecution"; @@ -19,12 +17,14 @@ import { FakeHumanExecution } from "./FakeHumanExecution"; import { MarkDisconnectedExecution } from "./MarkDisconnectedExecution"; import { MoveWarshipExecution } from "./MoveWarshipExecution"; import { NoOpExecution } from "./NoOpExecution"; +import { PseudoRandom } from "../PseudoRandom"; import { QuickChatExecution } from "./QuickChatExecution"; import { RetreatExecution } from "./RetreatExecution"; import { SpawnExecution } from "./SpawnExecution"; import { TargetPlayerExecution } from "./TargetPlayerExecution"; import { TransportShipExecution } from "./TransportShipExecution"; import { UpgradeStructureExecution } from "./UpgradeStructureExecution"; +import { simpleHash } from "../Util"; export class Executor { // private random = new PseudoRandom(999) diff --git a/src/core/execution/FakeHumanExecution.ts b/src/core/execution/FakeHumanExecution.ts index 03637952c..597d69639 100644 --- a/src/core/execution/FakeHumanExecution.ts +++ b/src/core/execution/FakeHumanExecution.ts @@ -14,17 +14,17 @@ import { Unit, UnitType, } from "../game/Game"; -import { euclDistFN, manhattanDistFN, TileRef } from "../game/GameMap"; -import { PseudoRandom } from "../PseudoRandom"; -import { GameID } from "../Schemas"; +import { TileRef, euclDistFN, manhattanDistFN } from "../game/GameMap"; import { calculateBoundingBox, flattenedEmojiTable, simpleHash } from "../Util"; +import { BotBehavior } from "./utils/BotBehavior"; import { ConstructionExecution } from "./ConstructionExecution"; import { EmojiExecution } from "./EmojiExecution"; +import { GameID } from "../Schemas"; import { NukeExecution } from "./NukeExecution"; +import { PseudoRandom } from "../PseudoRandom"; import { SpawnExecution } from "./SpawnExecution"; import { TransportShipExecution } from "./TransportShipExecution"; import { closestTwoTiles } from "./Util"; -import { BotBehavior } from "./utils/BotBehavior"; export class FakeHumanExecution implements Execution { private active = true; diff --git a/src/core/execution/MIRVExecution.ts b/src/core/execution/MIRVExecution.ts index e627fc387..af1b0fe70 100644 --- a/src/core/execution/MIRVExecution.ts +++ b/src/core/execution/MIRVExecution.ts @@ -7,11 +7,11 @@ import { Unit, UnitType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; +import { NukeExecution } from "./NukeExecution"; import { ParabolaPathFinder } from "../pathfinding/PathFinding"; import { PseudoRandom } from "../PseudoRandom"; +import { TileRef } from "../game/GameMap"; import { simpleHash } from "../Util"; -import { NukeExecution } from "./NukeExecution"; export class MirvExecution implements Execution { private active = true; diff --git a/src/core/execution/NukeExecution.ts b/src/core/execution/NukeExecution.ts index 5bfe1debe..6e22294b0 100644 --- a/src/core/execution/NukeExecution.ts +++ b/src/core/execution/NukeExecution.ts @@ -1,18 +1,18 @@ import { Execution, Game, - isStructureType, MessageType, Player, TerraNullius, TrajectoryTile, Unit, UnitType, + isStructureType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; +import { NukeType } from "../StatsSchemas"; import { ParabolaPathFinder } from "../pathfinding/PathFinding"; import { PseudoRandom } from "../PseudoRandom"; -import { NukeType } from "../StatsSchemas"; +import { TileRef } from "../game/GameMap"; const SPRITE_RADIUS = 16; diff --git a/src/core/execution/PlayerExecution.ts b/src/core/execution/PlayerExecution.ts index 647b97eb2..c4b60f7ac 100644 --- a/src/core/execution/PlayerExecution.ts +++ b/src/core/execution/PlayerExecution.ts @@ -1,8 +1,8 @@ -import { Config } from "../configuration/Config"; import { Execution, Game, Player, UnitType } from "../game/Game"; -import { GameImpl } from "../game/GameImpl"; import { GameMap, TileRef } from "../game/GameMap"; import { calculateBoundingBox, getMode, inscribed, simpleHash } from "../Util"; +import { Config } from "../configuration/Config"; +import { GameImpl } from "../game/GameImpl"; export class PlayerExecution implements Execution { private readonly ticksPerClusterCalc = 20; diff --git a/src/core/execution/PortExecution.ts b/src/core/execution/PortExecution.ts index 1e6bea8e8..174681514 100644 --- a/src/core/execution/PortExecution.ts +++ b/src/core/execution/PortExecution.ts @@ -1,6 +1,6 @@ import { Execution, Game, Player, Unit, UnitType } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { PseudoRandom } from "../PseudoRandom"; +import { TileRef } from "../game/GameMap"; import { TradeShipExecution } from "./TradeShipExecution"; import { TrainStationExecution } from "./TrainStationExecution"; diff --git a/src/core/execution/RailroadExecution.ts b/src/core/execution/RailroadExecution.ts index 133bef25a..00aef6682 100644 --- a/src/core/execution/RailroadExecution.ts +++ b/src/core/execution/RailroadExecution.ts @@ -1,7 +1,7 @@ import { Execution, Game } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { GameUpdateType, RailTile, RailType } from "../game/GameUpdates"; import { Railroad } from "../game/Railroad"; +import { TileRef } from "../game/GameMap"; export class RailroadExecution implements Execution { private mg: Game; diff --git a/src/core/execution/SAMLauncherExecution.ts b/src/core/execution/SAMLauncherExecution.ts index e5467f8f6..97ce0b3f8 100644 --- a/src/core/execution/SAMLauncherExecution.ts +++ b/src/core/execution/SAMLauncherExecution.ts @@ -1,15 +1,15 @@ import { Execution, Game, - isUnit, MessageType, Player, Unit, UnitType, + isUnit, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { PseudoRandom } from "../PseudoRandom"; import { SAMMissileExecution } from "./SAMMissileExecution"; +import { TileRef } from "../game/GameMap"; type Target = { unit: Unit; diff --git a/src/core/execution/SAMMissileExecution.ts b/src/core/execution/SAMMissileExecution.ts index 4359d9dc1..7871991ff 100644 --- a/src/core/execution/SAMMissileExecution.ts +++ b/src/core/execution/SAMMissileExecution.ts @@ -6,10 +6,10 @@ import { Unit, UnitType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { AirPathFinder } from "../pathfinding/PathFinding"; -import { PseudoRandom } from "../PseudoRandom"; import { NukeType } from "../StatsSchemas"; +import { PseudoRandom } from "../PseudoRandom"; +import { TileRef } from "../game/GameMap"; export class SAMMissileExecution implements Execution { private active = true; diff --git a/src/core/execution/ShellExecution.ts b/src/core/execution/ShellExecution.ts index 9a05005eb..5b5f7348f 100644 --- a/src/core/execution/ShellExecution.ts +++ b/src/core/execution/ShellExecution.ts @@ -1,7 +1,7 @@ import { Execution, Game, Player, Unit, UnitType } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { AirPathFinder } from "../pathfinding/PathFinding"; import { PseudoRandom } from "../PseudoRandom"; +import { TileRef } from "../game/GameMap"; export class ShellExecution implements Execution { private active = true; diff --git a/src/core/execution/SpawnExecution.ts b/src/core/execution/SpawnExecution.ts index 6721b2794..eaea6e539 100644 --- a/src/core/execution/SpawnExecution.ts +++ b/src/core/execution/SpawnExecution.ts @@ -1,7 +1,7 @@ import { Execution, Game, Player, PlayerInfo, PlayerType } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { BotExecution } from "./BotExecution"; import { PlayerExecution } from "./PlayerExecution"; +import { TileRef } from "../game/GameMap"; import { getSpawnTiles } from "./Util"; export class SpawnExecution implements Execution { diff --git a/src/core/execution/TradeShipExecution.ts b/src/core/execution/TradeShipExecution.ts index 3265334e9..eb3ac53eb 100644 --- a/src/core/execution/TradeShipExecution.ts +++ b/src/core/execution/TradeShipExecution.ts @@ -1,4 +1,3 @@ -import { renderNumber } from "../../client/Utils"; import { Execution, Game, @@ -7,10 +6,11 @@ import { Unit, UnitType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { PathFindResultType } from "../pathfinding/AStar"; import { PathFinder } from "../pathfinding/PathFinding"; +import { TileRef } from "../game/GameMap"; import { distSortUnit } from "../Util"; +import { renderNumber } from "../../client/Utils"; export class TradeShipExecution implements Execution { private active = true; diff --git a/src/core/execution/TrainExecution.ts b/src/core/execution/TrainExecution.ts index 137fa9e88..1edc4a7c8 100644 --- a/src/core/execution/TrainExecution.ts +++ b/src/core/execution/TrainExecution.ts @@ -6,9 +6,9 @@ import { Unit, UnitType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; +import { OrientedRailroad, getOrientedRailroad } from "../game/Railroad"; import { RailNetwork } from "../game/RailNetwork"; -import { getOrientedRailroad, OrientedRailroad } from "../game/Railroad"; +import { TileRef } from "../game/GameMap"; import { TrainStation } from "../game/TrainStation"; export class TrainExecution implements Execution { diff --git a/src/core/execution/TrainStationExecution.ts b/src/core/execution/TrainStationExecution.ts index 29792655c..cebe41591 100644 --- a/src/core/execution/TrainStationExecution.ts +++ b/src/core/execution/TrainStationExecution.ts @@ -1,7 +1,7 @@ import { Execution, Game, Unit } from "../game/Game"; -import { TrainStation } from "../game/TrainStation"; import { PseudoRandom } from "../PseudoRandom"; import { TrainExecution } from "./TrainExecution"; +import { TrainStation } from "../game/TrainStation"; export class TrainStationExecution implements Execution { private mg: Game; diff --git a/src/core/execution/TransportShipExecution.ts b/src/core/execution/TransportShipExecution.ts index 543dac9ea..65cac218a 100644 --- a/src/core/execution/TransportShipExecution.ts +++ b/src/core/execution/TransportShipExecution.ts @@ -8,11 +8,11 @@ import { Unit, UnitType, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; -import { targetTransportTile } from "../game/TransportShipUtils"; +import { AttackExecution } from "./AttackExecution"; import { PathFindResultType } from "../pathfinding/AStar"; import { PathFinder } from "../pathfinding/PathFinding"; -import { AttackExecution } from "./AttackExecution"; +import { TileRef } from "../game/GameMap"; +import { targetTransportTile } from "../game/TransportShipUtils"; export class TransportShipExecution implements Execution { private lastMove: number; diff --git a/src/core/execution/Util.ts b/src/core/execution/Util.ts index f1b6e87eb..302ea0000 100644 --- a/src/core/execution/Util.ts +++ b/src/core/execution/Util.ts @@ -1,4 +1,4 @@ -import { euclDistFN, GameMap, TileRef } from "../game/GameMap"; +import { GameMap, TileRef, euclDistFN } from "../game/GameMap"; export function getSpawnTiles(gm: GameMap, tile: TileRef): TileRef[] { return Array.from(gm.bfs(tile, euclDistFN(tile, 4, true))).filter( diff --git a/src/core/execution/WarshipExecution.ts b/src/core/execution/WarshipExecution.ts index 778a56eed..331d82394 100644 --- a/src/core/execution/WarshipExecution.ts +++ b/src/core/execution/WarshipExecution.ts @@ -1,17 +1,17 @@ import { Execution, Game, - isUnit, OwnerComp, Unit, UnitParams, UnitType, + isUnit, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { PathFindResultType } from "../pathfinding/AStar"; import { PathFinder } from "../pathfinding/PathFinding"; import { PseudoRandom } from "../PseudoRandom"; import { ShellExecution } from "./ShellExecution"; +import { TileRef } from "../game/GameMap"; export class WarshipExecution implements Execution { private random: PseudoRandom; diff --git a/src/core/execution/WinCheckExecution.ts b/src/core/execution/WinCheckExecution.ts index 8c2159a71..996cc4527 100644 --- a/src/core/execution/WinCheckExecution.ts +++ b/src/core/execution/WinCheckExecution.ts @@ -1,4 +1,3 @@ -import { GameEvent } from "../EventBus"; import { ColoredTeams, Execution, @@ -7,6 +6,7 @@ import { Player, Team, } from "../game/Game"; +import { GameEvent } from "../EventBus"; export class WinEvent implements GameEvent { constructor(public readonly winner: Player) {} diff --git a/src/core/execution/utils/BotBehavior.ts b/src/core/execution/utils/BotBehavior.ts index 3cf85c249..4722a6606 100644 --- a/src/core/execution/utils/BotBehavior.ts +++ b/src/core/execution/utils/BotBehavior.ts @@ -7,11 +7,11 @@ import { TerraNullius, Tick, } from "../../game/Game"; -import { PseudoRandom } from "../../PseudoRandom"; -import { flattenedEmojiTable } from "../../Util"; import { AllianceExtensionExecution } from "../alliance/AllianceExtensionExecution"; import { AttackExecution } from "../AttackExecution"; import { EmojiExecution } from "../EmojiExecution"; +import { PseudoRandom } from "../../PseudoRandom"; +import { flattenedEmojiTable } from "../../Util"; export class BotBehavior { private enemy: Player | null = null; diff --git a/src/core/game/AllianceRequestImpl.ts b/src/core/game/AllianceRequestImpl.ts index c1911544c..9aa993686 100644 --- a/src/core/game/AllianceRequestImpl.ts +++ b/src/core/game/AllianceRequestImpl.ts @@ -1,6 +1,6 @@ import { AllianceRequest, Player, Tick } from "./Game"; -import { GameImpl } from "./GameImpl"; import { AllianceRequestUpdate, GameUpdateType } from "./GameUpdates"; +import { GameImpl } from "./GameImpl"; export class AllianceRequestImpl implements AllianceRequest { constructor( diff --git a/src/core/game/AttackImpl.ts b/src/core/game/AttackImpl.ts index 952ed6933..dc4e59681 100644 --- a/src/core/game/AttackImpl.ts +++ b/src/core/game/AttackImpl.ts @@ -1,7 +1,7 @@ import { Attack, Cell, Player, TerraNullius } from "./Game"; import { GameImpl } from "./GameImpl"; -import { TileRef } from "./GameMap"; import { PlayerImpl } from "./PlayerImpl"; +import { TileRef } from "./GameMap"; export class AttackImpl implements Attack { private _isActive = true; diff --git a/src/core/game/BinaryLoaderGameMapLoader.ts b/src/core/game/BinaryLoaderGameMapLoader.ts index bfb6109af..5649e8d1b 100644 --- a/src/core/game/BinaryLoaderGameMapLoader.ts +++ b/src/core/game/BinaryLoaderGameMapLoader.ts @@ -1,5 +1,5 @@ -import { GameMapType } from "./Game"; import { GameMapLoader, MapData } from "./GameMapLoader"; +import { GameMapType } from "./Game"; import { MapManifest } from "./TerrainMapLoader"; export type BinModule = { diff --git a/src/core/game/FetchGameMapLoader.ts b/src/core/game/FetchGameMapLoader.ts index c9692983d..5b7407142 100644 --- a/src/core/game/FetchGameMapLoader.ts +++ b/src/core/game/FetchGameMapLoader.ts @@ -1,5 +1,5 @@ -import { GameMapType } from "./Game"; import { GameMapLoader, MapData } from "./GameMapLoader"; +import { GameMapType } from "./Game"; import { MapManifestSchema } from "./TerrainMapLoader"; export class FetchGameMapLoader implements GameMapLoader { diff --git a/src/core/game/Game.ts b/src/core/game/Game.ts index 105d4dd59..1569b4978 100644 --- a/src/core/game/Game.ts +++ b/src/core/game/Game.ts @@ -1,4 +1,3 @@ -import { Config } from "../configuration/Config"; import { AllPlayersStats, ClientID } from "../Schemas"; import { GameMap, TileRef } from "./GameMap"; import { @@ -7,6 +6,7 @@ import { PlayerUpdate, UnitUpdate, } from "./GameUpdates"; +import { Config } from "../configuration/Config"; import { RailNetwork } from "./RailNetwork"; import { Stats } from "./Stats"; import { UnitPredicate } from "./UnitGrid"; diff --git a/src/core/game/GameImpl.ts b/src/core/game/GameImpl.ts index c6c6db64e..4d53e8cc6 100644 --- a/src/core/game/GameImpl.ts +++ b/src/core/game/GameImpl.ts @@ -1,10 +1,5 @@ /* eslint-disable max-lines */ -import { renderNumber } from "../../client/Utils"; -import { Config } from "../configuration/Config"; import { AllPlayersStats, ClientID, Winner } from "../Schemas"; -import { simpleHash } from "../Util"; -import { AllianceImpl } from "./AllianceImpl"; -import { AllianceRequestImpl } from "./AllianceRequestImpl"; import { Alliance, AllianceRequest, @@ -25,8 +20,8 @@ import { PlayerType, Quads, Team, - TerrainType, TerraNullius, + TerrainType, Trios, Unit, UnitInfo, @@ -34,14 +29,19 @@ import { } from "./Game"; import { GameMap, TileRef, TileUpdate } from "./GameMap"; import { GameUpdate, GameUpdateType } from "./GameUpdates"; +import { UnitGrid, UnitPredicate } from "./UnitGrid"; +import { AllianceImpl } from "./AllianceImpl"; +import { AllianceRequestImpl } from "./AllianceRequestImpl"; +import { Config } from "../configuration/Config"; import { PlayerImpl } from "./PlayerImpl"; import { RailNetwork } from "./RailNetwork"; -import { createRailNetwork } from "./RailNetworkImpl"; import { Stats } from "./Stats"; import { StatsImpl } from "./StatsImpl"; -import { assignTeams } from "./TeamAssignment"; import { TerraNulliusImpl } from "./TerraNulliusImpl"; -import { UnitGrid, UnitPredicate } from "./UnitGrid"; +import { assignTeams } from "./TeamAssignment"; +import { createRailNetwork } from "./RailNetworkImpl"; +import { renderNumber } from "../../client/Utils"; +import { simpleHash } from "../Util"; export function createGame( humans: PlayerInfo[], diff --git a/src/core/game/GameView.ts b/src/core/game/GameView.ts index 2739cda60..093067d18 100644 --- a/src/core/game/GameView.ts +++ b/src/core/game/GameView.ts @@ -1,9 +1,11 @@ -import { base64url } from "jose"; -import { Config } from "../configuration/Config"; -import { PatternDecoder } from "../PatternDecoder"; -import { ClientID, GameID, Player } from "../Schemas"; -import { createRandomName } from "../Util"; -import { WorkerClient } from "../worker/WorkerClient"; +import { + AllianceView, + AttackUpdate, + GameUpdateType, + GameUpdateViewData, + PlayerUpdate, + UnitUpdate, +} from "./GameUpdates"; import { Cell, EmojiMessage, @@ -16,26 +18,24 @@ import { PlayerProfile, PlayerType, Team, - TerrainType, TerraNullius, + TerrainType, Tick, TrainType, UnitInfo, UnitType, } from "./Game"; +import { ClientID, GameID, Player } from "../Schemas"; import { GameMap, TileRef, TileUpdate } from "./GameMap"; -import { - AllianceView, - AttackUpdate, - GameUpdateType, - GameUpdateViewData, - PlayerUpdate, - UnitUpdate, -} from "./GameUpdates"; -import { TerrainMapData } from "./TerrainMapLoader"; -import { TerraNulliusImpl } from "./TerraNulliusImpl"; import { UnitGrid, UnitPredicate } from "./UnitGrid"; +import { Config } from "../configuration/Config"; +import { PatternDecoder } from "../PatternDecoder"; +import { TerraNulliusImpl } from "./TerraNulliusImpl"; +import { TerrainMapData } from "./TerrainMapLoader"; import { UserSettings } from "./UserSettings"; +import { WorkerClient } from "../worker/WorkerClient"; +import { base64url } from "jose"; +import { createRandomName } from "../Util"; const userSettings: UserSettings = new UserSettings(); diff --git a/src/core/game/PlayerImpl.ts b/src/core/game/PlayerImpl.ts index 1c3d7242c..1cef07ba5 100644 --- a/src/core/game/PlayerImpl.ts +++ b/src/core/game/PlayerImpl.ts @@ -1,21 +1,8 @@ /* eslint-disable max-lines */ -import { renderNumber, renderTroops } from "../../client/Utils"; -import { PseudoRandom } from "../PseudoRandom"; -import { ClientID } from "../Schemas"; -import { - assertNever, - distSortUnit, - minInt, - simpleHash, - toInt, - within, -} from "../Util"; -import { sanitizeUsername } from "../validations/username"; -import { AttackImpl } from "./AttackImpl"; import { + AllPlayers, Alliance, AllianceRequest, - AllPlayers, Attack, BuildableUnit, Cell, @@ -40,19 +27,32 @@ import { UnitParams, UnitType, } from "./Game"; -import { GameImpl } from "./GameImpl"; -import { andFN, manhattanDistFN, TileRef } from "./GameMap"; import { AllianceView, AttackUpdate, GameUpdateType, PlayerUpdate, } from "./GameUpdates"; +import { TileRef, andFN, manhattanDistFN } from "./GameMap"; +import { + assertNever, + distSortUnit, + minInt, + simpleHash, + toInt, + within, +} from "../Util"; import { bestShoreDeploymentSource, canBuildTransportShip, } from "./TransportShipUtils"; +import { renderNumber, renderTroops } from "../../client/Utils"; +import { AttackImpl } from "./AttackImpl"; +import { ClientID } from "../Schemas"; +import { GameImpl } from "./GameImpl"; +import { PseudoRandom } from "../PseudoRandom"; import { UnitImpl } from "./UnitImpl"; +import { sanitizeUsername } from "../validations/username"; type Target = { tick: Tick; diff --git a/src/core/game/RailNetwork.ts b/src/core/game/RailNetwork.ts index 00c2e6f5e..1606180e7 100644 --- a/src/core/game/RailNetwork.ts +++ b/src/core/game/RailNetwork.ts @@ -1,5 +1,5 @@ -import { Unit } from "./Game"; import { TrainStation } from "./TrainStation"; +import { Unit } from "./Game"; export type RailNetwork = { connectStation(station: TrainStation): void; diff --git a/src/core/game/RailNetworkImpl.ts b/src/core/game/RailNetworkImpl.ts index 6232ba06d..bb7b03450 100644 --- a/src/core/game/RailNetworkImpl.ts +++ b/src/core/game/RailNetworkImpl.ts @@ -1,12 +1,12 @@ -import { RailroadExecution } from "../execution/RailroadExecution"; -import { PathFindResultType } from "../pathfinding/AStar"; -import { MiniAStar } from "../pathfinding/MiniAStar"; -import { SerialAStar } from "../pathfinding/SerialAStar"; +import { Cluster, TrainStation, TrainStationMapAdapter } from "./TrainStation"; import { Game, Unit, UnitType } from "./Game"; -import { TileRef } from "./GameMap"; +import { MiniAStar } from "../pathfinding/MiniAStar"; +import { PathFindResultType } from "../pathfinding/AStar"; import { RailNetwork } from "./RailNetwork"; import { Railroad } from "./Railroad"; -import { Cluster, TrainStation, TrainStationMapAdapter } from "./TrainStation"; +import { RailroadExecution } from "../execution/RailroadExecution"; +import { SerialAStar } from "../pathfinding/SerialAStar"; +import { TileRef } from "./GameMap"; /** * The Stations handle their own neighbors so the graph is naturally traversable, diff --git a/src/core/game/Railroad.ts b/src/core/game/Railroad.ts index fb96833eb..2a6151663 100644 --- a/src/core/game/Railroad.ts +++ b/src/core/game/Railroad.ts @@ -1,6 +1,6 @@ +import { GameUpdateType, RailTile, RailType } from "./GameUpdates"; import { Game } from "./Game"; import { TileRef } from "./GameMap"; -import { GameUpdateType, RailTile, RailType } from "./GameUpdates"; import { TrainStation } from "./TrainStation"; export class Railroad { diff --git a/src/core/game/Stats.ts b/src/core/game/Stats.ts index 63a8aac79..fbde0d972 100644 --- a/src/core/game/Stats.ts +++ b/src/core/game/Stats.ts @@ -1,6 +1,6 @@ -import { AllPlayersStats } from "../Schemas"; import { NukeType, OtherUnitType, PlayerStats } from "../StatsSchemas"; import { Player, TerraNullius } from "./Game"; +import { AllPlayersStats } from "../Schemas"; export type Stats = { getPlayerStats(player: Player): PlayerStats | null; diff --git a/src/core/game/StatsImpl.ts b/src/core/game/StatsImpl.ts index bd77d1dff..bae57a81a 100644 --- a/src/core/game/StatsImpl.ts +++ b/src/core/game/StatsImpl.ts @@ -1,4 +1,3 @@ -import { AllPlayersStats } from "../Schemas"; import { ATTACK_INDEX_CANCEL, ATTACK_INDEX_RECV, @@ -7,10 +6,10 @@ import { BOAT_INDEX_CAPTURE, BOAT_INDEX_DESTROY, BOAT_INDEX_SENT, - BoatUnit, BOMB_INDEX_INTERCEPT, BOMB_INDEX_LAND, BOMB_INDEX_LAUNCH, + BoatUnit, GOLD_INDEX_STEAL, GOLD_INDEX_TRADE, GOLD_INDEX_WAR, @@ -27,6 +26,7 @@ import { unitTypeToOtherUnit, } from "../StatsSchemas"; import { Player, TerraNullius } from "./Game"; +import { AllPlayersStats } from "../Schemas"; import { Stats } from "./Stats"; type BigIntLike = bigint | number; diff --git a/src/core/game/TeamAssignment.ts b/src/core/game/TeamAssignment.ts index 1ec1bb566..1754920d6 100644 --- a/src/core/game/TeamAssignment.ts +++ b/src/core/game/TeamAssignment.ts @@ -1,6 +1,6 @@ +import { PlayerInfo, PlayerType, Team } from "./Game"; import { PseudoRandom } from "../PseudoRandom"; import { simpleHash } from "../Util"; -import { PlayerInfo, PlayerType, Team } from "./Game"; export function assignTeams( players: PlayerInfo[], diff --git a/src/core/game/TerrainMapLoader.ts b/src/core/game/TerrainMapLoader.ts index db60a1a37..6661c9097 100644 --- a/src/core/game/TerrainMapLoader.ts +++ b/src/core/game/TerrainMapLoader.ts @@ -1,7 +1,7 @@ -import { z } from "zod"; -import { GameMapType } from "./Game"; import { GameMap, GameMapImpl } from "./GameMap"; import { GameMapLoader } from "./GameMapLoader"; +import { GameMapType } from "./Game"; +import { z } from "zod"; export type TerrainMapData = { manifest: MapManifest; diff --git a/src/core/game/TrainStation.ts b/src/core/game/TrainStation.ts index 55e74ff49..a736f73fe 100644 --- a/src/core/game/TrainStation.ts +++ b/src/core/game/TrainStation.ts @@ -1,10 +1,10 @@ -import { TrainExecution } from "../execution/TrainExecution"; +import { Game, Player, Unit, UnitType } from "./Game"; +import { GameUpdateType, RailTile, RailType } from "./GameUpdates"; import { GraphAdapter } from "../pathfinding/SerialAStar"; import { PseudoRandom } from "../PseudoRandom"; -import { Game, Player, Unit, UnitType } from "./Game"; -import { TileRef } from "./GameMap"; -import { GameUpdateType, RailTile, RailType } from "./GameUpdates"; import { Railroad } from "./Railroad"; +import { TileRef } from "./GameMap"; +import { TrainExecution } from "../execution/TrainExecution"; /** * Handle train stops at various station types diff --git a/src/core/game/TransportShipUtils.ts b/src/core/game/TransportShipUtils.ts index df335b714..861cfadc8 100644 --- a/src/core/game/TransportShipUtils.ts +++ b/src/core/game/TransportShipUtils.ts @@ -1,7 +1,7 @@ -import { PathFindResultType } from "../pathfinding/AStar"; -import { MiniAStar } from "../pathfinding/MiniAStar"; import { Game, Player, UnitType } from "./Game"; -import { andFN, GameMap, manhattanDistFN, TileRef } from "./GameMap"; +import { GameMap, TileRef, andFN, manhattanDistFN } from "./GameMap"; +import { MiniAStar } from "../pathfinding/MiniAStar"; +import { PathFindResultType } from "../pathfinding/AStar"; export function canBuildTransportShip( game: Game, diff --git a/src/core/game/UnitGrid.ts b/src/core/game/UnitGrid.ts index f17ce3e1e..f7bd2dabb 100644 --- a/src/core/game/UnitGrid.ts +++ b/src/core/game/UnitGrid.ts @@ -1,5 +1,5 @@ -import { PlayerID, Unit, UnitType } from "./Game"; import { GameMap, TileRef } from "./GameMap"; +import { PlayerID, Unit, UnitType } from "./Game"; import { UnitView } from "./GameView"; export type UnitPredicate = (value: { diff --git a/src/core/game/UnitImpl.ts b/src/core/game/UnitImpl.ts index c30403108..c7faa1650 100644 --- a/src/core/game/UnitImpl.ts +++ b/src/core/game/UnitImpl.ts @@ -1,4 +1,3 @@ -import { simpleHash, toInt, withinInt } from "../Util"; import { AllUnitParams, MessageType, @@ -10,10 +9,11 @@ import { UnitInfo, UnitType, } from "./Game"; -import { GameImpl } from "./GameImpl"; -import { TileRef } from "./GameMap"; import { GameUpdateType, UnitUpdate } from "./GameUpdates"; +import { simpleHash, toInt, withinInt } from "../Util"; +import { GameImpl } from "./GameImpl"; import { PlayerImpl } from "./PlayerImpl"; +import { TileRef } from "./GameMap"; export class UnitImpl implements Unit { private _active = true; diff --git a/src/core/pathfinding/MiniAStar.ts b/src/core/pathfinding/MiniAStar.ts index 2c43950cb..5336e525a 100644 --- a/src/core/pathfinding/MiniAStar.ts +++ b/src/core/pathfinding/MiniAStar.ts @@ -1,7 +1,7 @@ -import { Cell } from "../game/Game"; -import { GameMap, TileRef } from "../game/GameMap"; import { AStar, PathFindResultType } from "./AStar"; +import { GameMap, TileRef } from "../game/GameMap"; import { GraphAdapter, SerialAStar } from "./SerialAStar"; +import { Cell } from "../game/Game"; export class GameMapAdapter implements GraphAdapter { constructor( diff --git a/src/core/pathfinding/PathFinding.ts b/src/core/pathfinding/PathFinding.ts index d5723abf1..79d527c88 100644 --- a/src/core/pathfinding/PathFinding.ts +++ b/src/core/pathfinding/PathFinding.ts @@ -1,9 +1,9 @@ -import { Game } from "../game/Game"; -import { GameMap, TileRef } from "../game/GameMap"; -import { PseudoRandom } from "../PseudoRandom"; -import { DistanceBasedBezierCurve } from "../utilities/Line"; import { AStar, AStarResult, PathFindResultType } from "./AStar"; +import { GameMap, TileRef } from "../game/GameMap"; +import { DistanceBasedBezierCurve } from "../utilities/Line"; +import { Game } from "../game/Game"; import { MiniAStar } from "./MiniAStar"; +import { PseudoRandom } from "../PseudoRandom"; const parabolaMinHeight = 50; diff --git a/src/core/pathfinding/SerialAStar.ts b/src/core/pathfinding/SerialAStar.ts index eef9306c4..06325b4d5 100644 --- a/src/core/pathfinding/SerialAStar.ts +++ b/src/core/pathfinding/SerialAStar.ts @@ -1,5 +1,5 @@ -import FastPriorityQueue from "fastpriorityqueue"; import { AStar, PathFindResultType } from "./AStar"; +import FastPriorityQueue from "fastpriorityqueue"; /** * Implement this interface with your graph to find paths with A* diff --git a/src/core/validations/username.ts b/src/core/validations/username.ts index a5abddef7..c587267a8 100644 --- a/src/core/validations/username.ts +++ b/src/core/validations/username.ts @@ -7,8 +7,8 @@ import { resolveLeetSpeakTransformer, skipNonAlphabeticTransformer, } from "obscenity"; -import { translateText } from "../../client/Utils"; import { simpleHash } from "../Util"; +import { translateText } from "../../client/Utils"; const matcher = new RegExpMatcher({ ...englishDataset.build(), diff --git a/src/core/worker/Worker.worker.ts b/src/core/worker/Worker.worker.ts index bafda59bb..f14f69461 100644 --- a/src/core/worker/Worker.worker.ts +++ b/src/core/worker/Worker.worker.ts @@ -1,7 +1,3 @@ -import version from "../../../resources/version.txt"; -import { createGameRunner, GameRunner } from "../GameRunner"; -import { FetchGameMapLoader } from "../game/FetchGameMapLoader"; -import { ErrorUpdate, GameUpdateViewData } from "../game/GameUpdates"; import { AttackAveragePositionResultMessage, InitializedMessage, @@ -12,6 +8,10 @@ import { TransportShipSpawnResultMessage, WorkerMessage, } from "./WorkerMessages"; +import { ErrorUpdate, GameUpdateViewData } from "../game/GameUpdates"; +import { GameRunner, createGameRunner } from "../GameRunner"; +import { FetchGameMapLoader } from "../game/FetchGameMapLoader"; +import version from "../../../resources/version.txt"; const ctx: Worker = self as unknown as Worker; let gameRunner: Promise | null = null; diff --git a/src/core/worker/WorkerClient.ts b/src/core/worker/WorkerClient.ts index 4398092fe..e83e0befa 100644 --- a/src/core/worker/WorkerClient.ts +++ b/src/core/worker/WorkerClient.ts @@ -5,11 +5,11 @@ import { PlayerID, PlayerProfile, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; -import { ErrorUpdate, GameUpdateViewData } from "../game/GameUpdates"; import { ClientID, GameStartInfo, Turn } from "../Schemas"; -import { generateID } from "../Util"; +import { ErrorUpdate, GameUpdateViewData } from "../game/GameUpdates"; +import { TileRef } from "../game/GameMap"; import { WorkerMessage } from "./WorkerMessages"; +import { generateID } from "../Util"; export class WorkerClient { private worker: Worker; diff --git a/src/core/worker/WorkerMessages.ts b/src/core/worker/WorkerMessages.ts index 059fbe3f7..3f24796c0 100644 --- a/src/core/worker/WorkerMessages.ts +++ b/src/core/worker/WorkerMessages.ts @@ -1,12 +1,12 @@ +import { ClientID, GameStartInfo, Turn } from "../Schemas"; import { PlayerActions, PlayerBorderTiles, PlayerID, PlayerProfile, } from "../game/Game"; -import { TileRef } from "../game/GameMap"; import { GameUpdateViewData } from "../game/GameUpdates"; -import { ClientID, GameStartInfo, Turn } from "../Schemas"; +import { TileRef } from "../game/GameMap"; export type WorkerMessageType = | "heartbeat" diff --git a/src/server/Archive.ts b/src/server/Archive.ts index 8c077940e..722e808f8 100644 --- a/src/server/Archive.ts +++ b/src/server/Archive.ts @@ -1,8 +1,8 @@ +import { AnalyticsRecord, GameID, GameRecord } from "../core/Schemas"; import { S3 } from "@aws-sdk/client-s3"; import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; -import { AnalyticsRecord, GameID, GameRecord } from "../core/Schemas"; -import { replacer } from "../core/Util"; import { logger } from "./Logger"; +import { replacer } from "../core/Util"; const config = getServerConfigFromServer(); diff --git a/src/server/Client.ts b/src/server/Client.ts index ecac7f885..af38b3a82 100644 --- a/src/server/Client.ts +++ b/src/server/Client.ts @@ -1,7 +1,7 @@ -import WebSocket from "ws"; -import { TokenPayload } from "../core/ApiSchemas"; -import { Tick } from "../core/game/Game"; import { ClientID, Winner } from "../core/Schemas"; +import { Tick } from "../core/game/Game"; +import { TokenPayload } from "../core/ApiSchemas"; +import WebSocket from "ws"; export class Client { public lastPing: number = Date.now(); diff --git a/src/server/Cloudflare.ts b/src/server/Cloudflare.ts index 015315b9e..11de727a1 100644 --- a/src/server/Cloudflare.ts +++ b/src/server/Cloudflare.ts @@ -1,8 +1,8 @@ -import { spawn } from "child_process"; import { promises as fs } from "fs"; +import { logger } from "./Logger"; +import { spawn } from "child_process"; import yaml from "js-yaml"; import { z } from "zod"; -import { logger } from "./Logger"; const log = logger.child({ module: "cloudflare", diff --git a/src/server/GameManager.ts b/src/server/GameManager.ts index 2a3d2b87a..4551198ca 100644 --- a/src/server/GameManager.ts +++ b/src/server/GameManager.ts @@ -1,9 +1,9 @@ -import { Logger } from "winston"; -import { ServerConfig } from "../core/configuration/Config"; import { Difficulty, GameMapType, GameMode, GameType } from "../core/game/Game"; import { GameConfig, GameID } from "../core/Schemas"; -import { Client } from "./Client"; import { GamePhase, GameServer } from "./GameServer"; +import { Client } from "./Client"; +import { Logger } from "winston"; +import { ServerConfig } from "../core/configuration/Config"; export class GameManager { private games: Map = new Map(); diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index 1298eef1b..f61ad49c5 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -1,7 +1,3 @@ -import ipAnonymize from "ip-anonymize"; -import { Logger } from "winston"; -import WebSocket from "ws"; -import { z } from "zod"; import { ClientID, ClientSendWinnerMessage, @@ -18,13 +14,18 @@ import { ServerTurnMessage, Turn, } from "../core/Schemas"; -import { createGameRecord } from "../core/Util"; import { GameEnv, ServerConfig } from "../core/configuration/Config"; -import { GameType } from "../core/game/Game"; -import { archive } from "./Archive"; import { Client } from "./Client"; +import { GameType } from "../core/game/Game"; +import { Logger } from "winston"; +import WebSocket from "ws"; +import { archive } from "./Archive"; +import { createGameRecord } from "../core/Util"; import { gatekeeper } from "./Gatekeeper"; +import ipAnonymize from "ip-anonymize"; import { postJoinMessageHandler } from "./worker/websocket/handler/message/PostJoinHandler"; +import { z } from "zod"; + export enum GamePhase { Lobby = "LOBBY", Active = "ACTIVE", diff --git a/src/server/Gatekeeper.ts b/src/server/Gatekeeper.ts index e06f02877..8bdd236b1 100644 --- a/src/server/Gatekeeper.ts +++ b/src/server/Gatekeeper.ts @@ -1,9 +1,9 @@ // src/server/Security.ts import { NextFunction, Request, Response } from "express"; +import { fileURLToPath } from "url"; import fs from "fs"; import http from "http"; import path from "path"; -import { fileURLToPath } from "url"; export enum LimiterType { Get = "get", diff --git a/src/server/Logger.ts b/src/server/Logger.ts index 7ba07be31..193b54c49 100644 --- a/src/server/Logger.ts +++ b/src/server/Logger.ts @@ -1,14 +1,14 @@ +import * as dotenv from "dotenv"; import * as logsAPI from "@opentelemetry/api-logs"; -import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"; import { LoggerProvider, SimpleLogRecordProcessor, } from "@opentelemetry/sdk-logs"; +import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"; import { OpenTelemetryTransportV3 } from "@opentelemetry/winston-transport"; -import * as dotenv from "dotenv"; -import winston from "winston"; -import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; import { getOtelResource } from "./OtelResource"; +import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; +import winston from "winston"; dotenv.config(); const config = getServerConfigFromServer(); diff --git a/src/server/MapPlaylist.ts b/src/server/MapPlaylist.ts index 6ff4a2d89..5f84554ad 100644 --- a/src/server/MapPlaylist.ts +++ b/src/server/MapPlaylist.ts @@ -1,4 +1,3 @@ -import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; import { Difficulty, Duos, @@ -9,8 +8,9 @@ import { Quads, Trios, } from "../core/game/Game"; -import { PseudoRandom } from "../core/PseudoRandom"; import { GameConfig, TeamCountConfig } from "../core/Schemas"; +import { PseudoRandom } from "../core/PseudoRandom"; +import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; import { logger } from "./Logger"; const log = logger.child({}); diff --git a/src/server/Master.ts b/src/server/Master.ts index ee6f9aa05..45485bcfa 100644 --- a/src/server/Master.ts +++ b/src/server/Master.ts @@ -1,20 +1,17 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +import { ApiEnvResponse, ApiPublicLobbiesResponse } from "../core/ExpressSchemas"; +import { GameInfo, ID } from "../core/Schemas"; +import { LimiterType, gatekeeper } from "./Gatekeeper"; +import { MapPlaylist } from "./MapPlaylist"; import cluster from "cluster"; import express from "express"; -import rateLimit from "express-rate-limit"; -import http from "http"; -import path from "path"; import { fileURLToPath } from "url"; -import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; -import { - ApiEnvResponse, - ApiPublicLobbiesResponse, -} from "../core/ExpressSchemas"; -import { GameInfo, ID } from "../core/Schemas"; import { generateID } from "../core/Util"; -import { gatekeeper, LimiterType } from "./Gatekeeper"; +import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; +import http from "http"; import { logger } from "./Logger"; -import { MapPlaylist } from "./MapPlaylist"; +import path from "path"; +import rateLimit from "express-rate-limit"; const config = getServerConfigFromServer(); const playlist = new MapPlaylist(); diff --git a/src/server/OtelResource.ts b/src/server/OtelResource.ts index 7bb93bfa8..8bd49d4d4 100644 --- a/src/server/OtelResource.ts +++ b/src/server/OtelResource.ts @@ -1,9 +1,9 @@ -import { resourceFromAttributes } from "@opentelemetry/resources"; import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, } from "@opentelemetry/semantic-conventions"; import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; +import { resourceFromAttributes } from "@opentelemetry/resources"; const config = getServerConfigFromServer(); diff --git a/src/server/PrivilegeRefresher.ts b/src/server/PrivilegeRefresher.ts index 89bdcb1ac..b22d1d2c0 100644 --- a/src/server/PrivilegeRefresher.ts +++ b/src/server/PrivilegeRefresher.ts @@ -1,11 +1,11 @@ -import { base64url } from "jose"; -import { Logger } from "winston"; -import { CosmeticsSchema } from "../core/CosmeticSchemas"; import { FailOpenPrivilegeChecker, PrivilegeChecker, PrivilegeCheckerImpl, } from "./Privilege"; +import { CosmeticsSchema } from "../core/CosmeticSchemas"; +import { Logger } from "winston"; +import { base64url } from "jose"; // Refreshes the privilege checker every 5 minutes. // WARNING: This fails open if cosmetics.json is not available. diff --git a/src/server/Server.ts b/src/server/Server.ts index 23307f1ea..f08a3a5ed 100644 --- a/src/server/Server.ts +++ b/src/server/Server.ts @@ -1,8 +1,8 @@ -import cluster from "cluster"; import * as dotenv from "dotenv"; -import { GameEnv } from "../core/configuration/Config"; -import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; import { Cloudflare, TunnelConfig } from "./Cloudflare"; +import { GameEnv } from "../core/configuration/Config"; +import cluster from "cluster"; +import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; import { startMaster } from "./Master"; import { startWorker } from "./Worker"; diff --git a/src/server/Worker.ts b/src/server/Worker.ts index 36384aed3..0a8db2e1c 100644 --- a/src/server/Worker.ts +++ b/src/server/Worker.ts @@ -1,27 +1,27 @@ -import express, { NextFunction, Request, Response } from "express"; -import rateLimit from "express-rate-limit"; -import http from "http"; -import ipAnonymize from "ip-anonymize"; -import path from "path"; -import { fileURLToPath } from "url"; -import { WebSocket, WebSocketServer } from "ws"; -import { z } from "zod"; -import { GameEnv } from "../core/configuration/Config"; -import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; -import { GameType } from "../core/game/Game"; -import { GameRecord, GameRecordSchema, ID } from "../core/Schemas"; import { CreateGameInputSchema, GameInputSchema, WorkerApiGameIdExists, } from "../core/WorkerSchemas"; +import { GameRecord, GameRecordSchema, ID } from "../core/Schemas"; +import { LimiterType, gatekeeper } from "./Gatekeeper"; +import { WebSocket, WebSocketServer } from "ws"; import { archive, readGameRecord } from "./Archive"; +import express, { NextFunction, Request, Response } from "express"; +import { GameEnv } from "../core/configuration/Config"; import { GameManager } from "./GameManager"; -import { gatekeeper, LimiterType } from "./Gatekeeper"; -import { logger } from "./Logger"; +import { GameType } from "../core/game/Game"; import { PrivilegeRefresher } from "./PrivilegeRefresher"; -import { preJoinMessageHandler } from "./worker/websocket/handler/message/PreJoinHandler"; +import { fileURLToPath } from "url"; +import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; +import http from "http"; import { initWorkerMetrics } from "./WorkerMetrics"; +import ipAnonymize from "ip-anonymize"; +import { logger } from "./Logger"; +import path from "path"; +import { preJoinMessageHandler } from "./worker/websocket/handler/message/PreJoinHandler"; +import rateLimit from "express-rate-limit"; +import { z } from "zod"; const config = getServerConfigFromServer(); diff --git a/src/server/WorkerMetrics.ts b/src/server/WorkerMetrics.ts index 2539546bf..e233f8ac9 100644 --- a/src/server/WorkerMetrics.ts +++ b/src/server/WorkerMetrics.ts @@ -1,12 +1,9 @@ -import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http"; -import { - MeterProvider, - PeriodicExportingMetricReader, -} from "@opentelemetry/sdk-metrics"; import * as dotenv from "dotenv"; -import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; -import { GameManager } from "./GameManager"; +import { MeterProvider, PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics"; import { getOtelResource, getPromLabels } from "./OtelResource"; +import { GameManager } from "./GameManager"; +import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http"; +import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; dotenv.config(); diff --git a/src/server/jwt.ts b/src/server/jwt.ts index 72c5d36da..e259accbe 100644 --- a/src/server/jwt.ts +++ b/src/server/jwt.ts @@ -1,13 +1,13 @@ -import { jwtVerify } from "jose"; -import { z } from "zod"; import { TokenPayload, TokenPayloadSchema, UserMeResponse, UserMeResponseSchema, } from "../core/ApiSchemas"; -import { ServerConfig } from "../core/configuration/Config"; import { PersistentIdSchema } from "../core/Schemas"; +import { ServerConfig } from "../core/configuration/Config"; +import { jwtVerify } from "jose"; +import { z } from "zod"; type TokenVerificationResult = | { diff --git a/src/server/worker/websocket/handler/message/PostJoinHandler.ts b/src/server/worker/websocket/handler/message/PostJoinHandler.ts index ada06af0b..6c0019bcb 100644 --- a/src/server/worker/websocket/handler/message/PostJoinHandler.ts +++ b/src/server/worker/websocket/handler/message/PostJoinHandler.ts @@ -1,5 +1,3 @@ -import { Logger } from "winston"; -import { z } from "zod"; import { ClientMessageSchema, ClientSendWinnerMessage, @@ -7,6 +5,8 @@ import { } from "../../../../../core/Schemas"; import { Client } from "../../../../Client"; import { GameServer } from "../../../../GameServer"; +import { Logger } from "winston"; +import { z } from "zod"; export async function postJoinMessageHandler( gs: GameServer, diff --git a/src/server/worker/websocket/handler/message/PreJoinHandler.ts b/src/server/worker/websocket/handler/message/PreJoinHandler.ts index a988df82b..466d0b3b4 100644 --- a/src/server/worker/websocket/handler/message/PreJoinHandler.ts +++ b/src/server/worker/websocket/handler/message/PreJoinHandler.ts @@ -1,17 +1,17 @@ -import http from "http"; -import ipAnonymize from "ip-anonymize"; -import { WebSocket } from "ws"; -import { z } from "zod"; -import { getServerConfigFromServer } from "../../../../../core/configuration/ConfigLoader"; import { ClientMessageSchema, ServerErrorMessage, } from "../../../../../core/Schemas"; +import { getUserMe, verifyClientToken } from "../../../../jwt"; import { Client } from "../../../../Client"; import { GameManager } from "../../../../GameManager"; -import { getUserMe, verifyClientToken } from "../../../../jwt"; -import { logger } from "../../../../Logger"; import { PrivilegeRefresher } from "../../../../PrivilegeRefresher"; +import { WebSocket } from "ws"; +import { getServerConfigFromServer } from "../../../../../core/configuration/ConfigLoader"; +import http from "http"; +import ipAnonymize from "ip-anonymize"; +import { logger } from "../../../../Logger"; +import { z } from "zod"; const config = getServerConfigFromServer(); diff --git a/tests/AllianceExtensionExecution.test.ts b/tests/AllianceExtensionExecution.test.ts index 6ae6340ed..7b60df7ef 100644 --- a/tests/AllianceExtensionExecution.test.ts +++ b/tests/AllianceExtensionExecution.test.ts @@ -1,8 +1,8 @@ +import { Game, Player, PlayerType } from "../src/core/game/Game"; +import { playerInfo, setup } from "./util/Setup"; import { AllianceExtensionExecution } from "../src/core/execution/alliance/AllianceExtensionExecution"; import { AllianceRequestExecution } from "../src/core/execution/alliance/AllianceRequestExecution"; import { AllianceRequestReplyExecution } from "../src/core/execution/alliance/AllianceRequestReplyExecution"; -import { Game, Player, PlayerType } from "../src/core/game/Game"; -import { playerInfo, setup } from "./util/Setup"; let game: Game; let player1: Player; diff --git a/tests/Attack.test.ts b/tests/Attack.test.ts index d5ff1e6a0..727fc955a 100644 --- a/tests/Attack.test.ts +++ b/tests/Attack.test.ts @@ -1,6 +1,3 @@ -import { AttackExecution } from "../src/core/execution/AttackExecution"; -import { SpawnExecution } from "../src/core/execution/SpawnExecution"; -import { TransportShipExecution } from "../src/core/execution/TransportShipExecution"; import { Game, Player, @@ -8,10 +5,13 @@ import { PlayerType, UnitType, } from "../src/core/game/Game"; -import { TileRef } from "../src/core/game/GameMap"; -import { setup } from "./util/Setup"; +import { AttackExecution } from "../src/core/execution/AttackExecution"; +import { SpawnExecution } from "../src/core/execution/SpawnExecution"; import { TestConfig } from "./util/TestConfig"; +import { TileRef } from "../src/core/game/GameMap"; +import { TransportShipExecution } from "../src/core/execution/TransportShipExecution"; import { constructionExecution } from "./util/utils"; +import { setup } from "./util/Setup"; let game: Game; let attacker: Player; diff --git a/tests/AttackStats.test.ts b/tests/AttackStats.test.ts index 1955aec11..785851e9a 100644 --- a/tests/AttackStats.test.ts +++ b/tests/AttackStats.test.ts @@ -1,7 +1,7 @@ +import { GOLD_INDEX_WAR, GOLD_INDEX_WORK } from "../src/core/StatsSchemas"; +import { Game, Player, PlayerInfo, PlayerType } from "../src/core/game/Game"; import { AttackExecution } from "../src/core/execution/AttackExecution"; import { SpawnExecution } from "../src/core/execution/SpawnExecution"; -import { Game, Player, PlayerInfo, PlayerType } from "../src/core/game/Game"; -import { GOLD_INDEX_WAR, GOLD_INDEX_WORK } from "../src/core/StatsSchemas"; import { setup } from "./util/Setup"; let game: Game; diff --git a/tests/BotBehavior.test.ts b/tests/BotBehavior.test.ts index 71b14ac0b..eb1ea8dd1 100644 --- a/tests/BotBehavior.test.ts +++ b/tests/BotBehavior.test.ts @@ -1,5 +1,3 @@ -import { AllianceExtensionExecution } from "../src/core/execution/alliance/AllianceExtensionExecution"; -import { BotBehavior } from "../src/core/execution/utils/BotBehavior"; import { AllianceRequest, Game, @@ -9,6 +7,8 @@ import { Relation, Tick, } from "../src/core/game/Game"; +import { AllianceExtensionExecution } from "../src/core/execution/alliance/AllianceExtensionExecution"; +import { BotBehavior } from "../src/core/execution/utils/BotBehavior"; import { PseudoRandom } from "../src/core/PseudoRandom"; import { setup } from "./util/Setup"; diff --git a/tests/Censor.test.ts b/tests/Censor.test.ts index 74f9cccc2..436f07885 100644 --- a/tests/Censor.test.ts +++ b/tests/Censor.test.ts @@ -32,10 +32,10 @@ jest.mock("../src/client/Utils", () => ({ })); import { - fixProfaneUsername, - isProfaneUsername, MAX_USERNAME_LENGTH, MIN_USERNAME_LENGTH, + fixProfaneUsername, + isProfaneUsername, sanitizeUsername, validateUsername, } from "../src/core/validations/username"; diff --git a/tests/Colors.test.ts b/tests/Colors.test.ts index bbeccde57..515d19337 100644 --- a/tests/Colors.test.ts +++ b/tests/Colors.test.ts @@ -1,8 +1,8 @@ -import { colord, Colord } from "colord"; import { ColorAllocator, selectDistinctColorIndex, } from "../src/core/configuration/ColorAllocator"; +import { Colord, colord } from "colord"; import { blue, botColor, diff --git a/tests/DeleteUnitExecution.test.ts b/tests/DeleteUnitExecution.test.ts index c8486a1fe..f529e6112 100644 --- a/tests/DeleteUnitExecution.test.ts +++ b/tests/DeleteUnitExecution.test.ts @@ -1,5 +1,3 @@ -import { DeleteUnitExecution } from "../src/core/execution/DeleteUnitExecution"; -import { SpawnExecution } from "../src/core/execution/SpawnExecution"; import { Game, Player, @@ -8,6 +6,8 @@ import { Unit, UnitType, } from "../src/core/game/Game"; +import { DeleteUnitExecution } from "../src/core/execution/DeleteUnitExecution"; +import { SpawnExecution } from "../src/core/execution/SpawnExecution"; import { TileRef } from "../src/core/game/GameMap"; import { setup } from "./util/Setup"; diff --git a/tests/Disconnected.test.ts b/tests/Disconnected.test.ts index e03138efa..e2a601240 100644 --- a/tests/Disconnected.test.ts +++ b/tests/Disconnected.test.ts @@ -1,8 +1,8 @@ +import { Game, Player, PlayerInfo, PlayerType } from "../src/core/game/Game"; import { MarkDisconnectedExecution } from "../src/core/execution/MarkDisconnectedExecution"; import { SpawnExecution } from "../src/core/execution/SpawnExecution"; -import { Game, Player, PlayerInfo, PlayerType } from "../src/core/game/Game"; -import { setup } from "./util/Setup"; import { executeTicks } from "./util/utils"; +import { setup } from "./util/Setup"; let game: Game; let player1: Player; diff --git a/tests/Donate.test.ts b/tests/Donate.test.ts index bbbccd4f9..2523e7c82 100644 --- a/tests/Donate.test.ts +++ b/tests/Donate.test.ts @@ -1,7 +1,7 @@ +import { PlayerInfo, PlayerType } from "../src/core/game/Game"; import { DonateGoldExecution } from "../src/core/execution/DonateGoldExecution"; import { DonateTroopsExecution } from "../src/core/execution/DonateTroopExecution"; import { SpawnExecution } from "../src/core/execution/SpawnExecution"; -import { PlayerInfo, PlayerType } from "../src/core/game/Game"; import { setup } from "./util/Setup"; describe("Donate troops to an ally", () => { diff --git a/tests/MissileSilo.test.ts b/tests/MissileSilo.test.ts index 1459a2543..7731b2549 100644 --- a/tests/MissileSilo.test.ts +++ b/tests/MissileSilo.test.ts @@ -1,6 +1,3 @@ -import { NukeExecution } from "../src/core/execution/NukeExecution"; -import { SpawnExecution } from "../src/core/execution/SpawnExecution"; -import { UpgradeStructureExecution } from "../src/core/execution/UpgradeStructureExecution"; import { Game, Player, @@ -8,9 +5,12 @@ import { PlayerType, UnitType, } from "../src/core/game/Game"; -import { TileRef } from "../src/core/game/GameMap"; -import { setup } from "./util/Setup"; import { constructionExecution, executeTicks } from "./util/utils"; +import { NukeExecution } from "../src/core/execution/NukeExecution"; +import { SpawnExecution } from "../src/core/execution/SpawnExecution"; +import { TileRef } from "../src/core/game/GameMap"; +import { UpgradeStructureExecution } from "../src/core/execution/UpgradeStructureExecution"; +import { setup } from "./util/Setup"; let game: Game; let attacker: Player; diff --git a/tests/ShellRandom.test.ts b/tests/ShellRandom.test.ts index 5c5590383..a8546c174 100644 --- a/tests/ShellRandom.test.ts +++ b/tests/ShellRandom.test.ts @@ -1,6 +1,3 @@ -import { DefensePostExecution } from "../src/core/execution/DefensePostExecution"; -import { ShellExecution } from "../src/core/execution/ShellExecution"; -import { WarshipExecution } from "../src/core/execution/WarshipExecution"; import { Game, Player, @@ -8,6 +5,9 @@ import { PlayerType, UnitType, } from "../src/core/game/Game"; +import { DefensePostExecution } from "../src/core/execution/DefensePostExecution"; +import { ShellExecution } from "../src/core/execution/ShellExecution"; +import { WarshipExecution } from "../src/core/execution/WarshipExecution"; import { setup } from "./util/Setup"; const coastX = 7; diff --git a/tests/TerritoryCapture.test.ts b/tests/TerritoryCapture.test.ts index e46678c08..5724dea32 100644 --- a/tests/TerritoryCapture.test.ts +++ b/tests/TerritoryCapture.test.ts @@ -1,5 +1,5 @@ -import { SpawnExecution } from "../src/core/execution/SpawnExecution"; import { Player, PlayerInfo, PlayerType } from "../src/core/game/Game"; +import { SpawnExecution } from "../src/core/execution/SpawnExecution"; import { setup } from "./util/Setup"; describe("Territory management", () => { diff --git a/tests/Warship.test.ts b/tests/Warship.test.ts index ee6c556de..a4536ffe3 100644 --- a/tests/Warship.test.ts +++ b/tests/Warship.test.ts @@ -1,5 +1,3 @@ -import { MoveWarshipExecution } from "../src/core/execution/MoveWarshipExecution"; -import { WarshipExecution } from "../src/core/execution/WarshipExecution"; import { Game, Player, @@ -7,8 +5,10 @@ import { PlayerType, UnitType, } from "../src/core/game/Game"; -import { setup } from "./util/Setup"; +import { MoveWarshipExecution } from "../src/core/execution/MoveWarshipExecution"; +import { WarshipExecution } from "../src/core/execution/WarshipExecution"; import { executeTicks } from "./util/utils"; +import { setup } from "./util/Setup"; const coastX = 7; let game: Game; diff --git a/tests/client/graphics/RadialMenuElements.test.ts b/tests/client/graphics/RadialMenuElements.test.ts index df8c796d4..29d6b893d 100644 --- a/tests/client/graphics/RadialMenuElements.test.ts +++ b/tests/client/graphics/RadialMenuElements.test.ts @@ -2,16 +2,16 @@ * @jest-environment jsdom */ import { - attackMenuElement, - buildMenuElement, COLORS, MenuElementParams, - rootMenuElement, Slot, + attackMenuElement, + buildMenuElement, + rootMenuElement, } from "../../../src/client/graphics/layers/RadialMenuElements"; -import { UnitType } from "../../../src/core/game/Game"; -import { TileRef } from "../../../src/core/game/GameMap"; import { GameView, PlayerView } from "../../../src/core/game/GameView"; +import { TileRef } from "../../../src/core/game/GameMap"; +import { UnitType } from "../../../src/core/game/Game"; jest.mock("../../../src/client/Utils", () => ({ translateText: jest.fn((key: string) => key), diff --git a/tests/core/executions/NukeExecution.test.ts b/tests/core/executions/NukeExecution.test.ts index 5ed577f44..789fb043c 100644 --- a/tests/core/executions/NukeExecution.test.ts +++ b/tests/core/executions/NukeExecution.test.ts @@ -1,4 +1,3 @@ -import { NukeExecution } from "../../../src/core/execution/NukeExecution"; import { Game, Player, @@ -6,9 +5,10 @@ import { PlayerType, UnitType, } from "../../../src/core/game/Game"; -import { setup } from "../../util/Setup"; +import { NukeExecution } from "../../../src/core/execution/NukeExecution"; import { TestConfig } from "../../util/TestConfig"; import { executeTicks } from "../../util/utils"; +import { setup } from "../../util/Setup"; let game: Game; let player: Player; diff --git a/tests/core/executions/SAMLauncherExecution.test.ts b/tests/core/executions/SAMLauncherExecution.test.ts index c4f5ad557..a98eddf1e 100644 --- a/tests/core/executions/SAMLauncherExecution.test.ts +++ b/tests/core/executions/SAMLauncherExecution.test.ts @@ -1,7 +1,3 @@ -import { NukeExecution } from "../../../src/core/execution/NukeExecution"; -import { SAMLauncherExecution } from "../../../src/core/execution/SAMLauncherExecution"; -import { SpawnExecution } from "../../../src/core/execution/SpawnExecution"; -import { UpgradeStructureExecution } from "../../../src/core/execution/UpgradeStructureExecution"; import { Game, Player, @@ -9,8 +5,12 @@ import { PlayerType, UnitType, } from "../../../src/core/game/Game"; -import { setup } from "../../util/Setup"; import { constructionExecution, executeTicks } from "../../util/utils"; +import { NukeExecution } from "../../../src/core/execution/NukeExecution"; +import { SAMLauncherExecution } from "../../../src/core/execution/SAMLauncherExecution"; +import { SpawnExecution } from "../../../src/core/execution/SpawnExecution"; +import { UpgradeStructureExecution } from "../../../src/core/execution/UpgradeStructureExecution"; +import { setup } from "../../util/Setup"; let game: Game; let attacker: Player; diff --git a/tests/core/executions/TradeShipExecution.test.ts b/tests/core/executions/TradeShipExecution.test.ts index 0aab3fbce..43879162d 100644 --- a/tests/core/executions/TradeShipExecution.test.ts +++ b/tests/core/executions/TradeShipExecution.test.ts @@ -1,5 +1,5 @@ -import { TradeShipExecution } from "../../../src/core/execution/TradeShipExecution"; import { Game, Player, Unit } from "../../../src/core/game/Game"; +import { TradeShipExecution } from "../../../src/core/execution/TradeShipExecution"; import { setup } from "../../util/Setup"; describe("TradeShipExecution", () => { diff --git a/tests/core/game/GameImpl.test.ts b/tests/core/game/GameImpl.test.ts index a48cdb145..ae3039232 100644 --- a/tests/core/game/GameImpl.test.ts +++ b/tests/core/game/GameImpl.test.ts @@ -1,14 +1,13 @@ -import { AttackExecution } from "../../../src/core/execution/AttackExecution"; -import { SpawnExecution } from "../../../src/core/execution/SpawnExecution"; -//import { TransportShipExecution } from "../../../src/core/execution/TransportShipExecution"; -import { AllianceRequestExecution } from "../../../src/core/execution/alliance/AllianceRequestExecution"; -import { AllianceRequestReplyExecution } from "../../../src/core/execution/alliance/AllianceRequestReplyExecution"; import { Game, Player, PlayerInfo, PlayerType, } from "../../../src/core/game/Game"; +import { AllianceRequestExecution } from "../../../src/core/execution/alliance/AllianceRequestExecution"; +import { AllianceRequestReplyExecution } from "../../../src/core/execution/alliance/AllianceRequestReplyExecution"; +import { AttackExecution } from "../../../src/core/execution/AttackExecution"; +import { SpawnExecution } from "../../../src/core/execution/SpawnExecution"; import { TileRef } from "../../../src/core/game/GameMap"; import { setup } from "../../util/Setup"; diff --git a/tests/core/game/RailNetwork.test.ts b/tests/core/game/RailNetwork.test.ts index f900552ef..9cd724f69 100644 --- a/tests/core/game/RailNetwork.test.ts +++ b/tests/core/game/RailNetwork.test.ts @@ -1,10 +1,7 @@ -import { Unit } from "../../../src/core/game/Game"; -import { - RailNetworkImpl, - StationManagerImpl, -} from "../../../src/core/game/RailNetworkImpl"; -import { Railroad } from "../../../src/core/game/Railroad"; +import { RailNetworkImpl, StationManagerImpl } from "../../../src/core/game/RailNetworkImpl"; import { Cluster } from "../../../src/core/game/TrainStation"; +import { Railroad } from "../../../src/core/game/Railroad"; +import { Unit } from "../../../src/core/game/Game"; // Mock types const createMockStation = (unitId: number): any => { diff --git a/tests/core/game/TrainStation.test.ts b/tests/core/game/TrainStation.test.ts index fba6d03da..c35395e8e 100644 --- a/tests/core/game/TrainStation.test.ts +++ b/tests/core/game/TrainStation.test.ts @@ -1,6 +1,6 @@ -import { TrainExecution } from "../../../src/core/execution/TrainExecution"; -import { Game, Player, Unit, UnitType } from "../../../src/core/game/Game"; import { Cluster, TrainStation } from "../../../src/core/game/TrainStation"; +import { Game, Player, Unit, UnitType } from "../../../src/core/game/Game"; +import { TrainExecution } from "../../../src/core/execution/TrainExecution"; jest.mock("../../../src/core/game/Game"); jest.mock("../../../src/core/execution/TrainExecution"); diff --git a/tests/perf/AstarPerf.ts b/tests/perf/AstarPerf.ts index b6a8a92dc..457399ac1 100644 --- a/tests/perf/AstarPerf.ts +++ b/tests/perf/AstarPerf.ts @@ -1,7 +1,7 @@ import Benchmark from "benchmark"; +import { PathFinder } from "../../src/core/pathfinding/PathFinding"; import { dirname } from "path"; import { fileURLToPath } from "url"; -import { PathFinder } from "../../src/core/pathfinding/PathFinding"; import { setup } from "../util/Setup"; const game = await setup( diff --git a/tests/util/Setup.ts b/tests/util/Setup.ts index c170a2dd3..e50904864 100644 --- a/tests/util/Setup.ts +++ b/tests/util/Setup.ts @@ -1,6 +1,3 @@ -import fs from "fs"; -import path from "path"; -import { z } from "zod"; import { Difficulty, Game, @@ -10,15 +7,18 @@ import { PlayerInfo, PlayerType, } from "../../src/core/game/Game"; -import { createGame } from "../../src/core/game/GameImpl"; import { - genTerrainFromBin, MapManifestSchema, + genTerrainFromBin, } from "../../src/core/game/TerrainMapLoader"; -import { UserSettings } from "../../src/core/game/UserSettings"; import { GameConfig } from "../../src/core/Schemas"; import { TestConfig } from "./TestConfig"; import { TestServerConfig } from "./TestServerConfig"; +import { UserSettings } from "../../src/core/game/UserSettings"; +import { createGame } from "../../src/core/game/GameImpl"; +import fs from "fs"; +import path from "path"; +import { z } from "zod"; export async function setup( mapName: string, diff --git a/tests/util/TestConfig.ts b/tests/util/TestConfig.ts index 69b23f3cd..3b6bd9373 100644 --- a/tests/util/TestConfig.ts +++ b/tests/util/TestConfig.ts @@ -1,5 +1,3 @@ -import { NukeMagnitude } from "../../src/core/configuration/Config"; -import { DefaultConfig } from "../../src/core/configuration/DefaultConfig"; import { Game, Player, @@ -7,6 +5,8 @@ import { Tick, UnitType, } from "../../src/core/game/Game"; +import { DefaultConfig } from "../../src/core/configuration/DefaultConfig"; +import { NukeMagnitude } from "../../src/core/configuration/Config"; import { TileRef } from "../../src/core/game/GameMap"; export class TestConfig extends DefaultConfig { diff --git a/tests/util/TestServerConfig.ts b/tests/util/TestServerConfig.ts index 86a277d65..2f0a23ee1 100644 --- a/tests/util/TestServerConfig.ts +++ b/tests/util/TestServerConfig.ts @@ -1,7 +1,7 @@ -import { JWK } from "jose"; import { GameEnv, ServerConfig } from "../../src/core/configuration/Config"; -import { GameMapType } from "../../src/core/game/Game"; import { GameID } from "../../src/core/Schemas"; +import { GameMapType } from "../../src/core/game/Game"; +import { JWK } from "jose"; export class TestServerConfig implements ServerConfig { allowedFlares(): string[] | undefined { diff --git a/tests/util/utils.ts b/tests/util/utils.ts index dbdfb3d1d..3a8f3a2e3 100644 --- a/tests/util/utils.ts +++ b/tests/util/utils.ts @@ -3,8 +3,8 @@ // However buildUnit do not create executions (e.g.: WarshipExecution) // If you also need execution use function below. Does not work with things not -import { ConstructionExecution } from "../../src/core/execution/ConstructionExecution"; import { Game, Player, UnitType } from "../../src/core/game/Game"; +import { ConstructionExecution } from "../../src/core/execution/ConstructionExecution"; // built via UI (e.g.: trade ships) export function constructionExecution( diff --git a/webpack.config.js b/webpack.config.js index ca0708e92..a60ae5367 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,9 +1,9 @@ -import { execSync } from "child_process"; import CopyPlugin from "copy-webpack-plugin"; import ESLintPlugin from "eslint-webpack-plugin"; import HtmlWebpackPlugin from "html-webpack-plugin"; -import path from "path"; +import { execSync } from "child_process"; import { fileURLToPath } from "url"; +import path from "path"; import webpack from "webpack"; const __filename = fileURLToPath(import.meta.url);