diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index e347998f9..505abf861 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -46,6 +46,7 @@ import { } from "./InputHandler"; import { endGame, startGame, startTime } from "./LocalPersistantStats"; import { terrainMapFileLoader } from "./TerrainMapFileLoader"; +import { GoToPlayerEvent } from "./TransformHandler"; import { MoveWarshipIntentEvent, SendAllianceExtensionIntentEvent, @@ -61,7 +62,6 @@ import { import { createCanvas } from "./Utils"; import { WebGLFrameBuilder } from "./WebGLFrameBuilder"; import { createRenderer, GameRenderer } from "./graphics/GameRenderer"; -import { GoToPlayerEvent } from "./graphics/TransformHandler"; import { GameView as WebGLGameView } from "./render/gl"; import { ALL_UNIT_TYPES } from "./render/types"; import { SoundManager } from "./sound/SoundManager"; @@ -299,7 +299,7 @@ function mountWebGLDebugRenderer( view: WebGLGameView, glCanvas: HTMLCanvasElement, cachedWebGLFrameCallback: { current: FrameRequestCallback | null }, - transformHandler: import("./graphics/TransformHandler").TransformHandler, + transformHandler: import("./TransformHandler").TransformHandler, gameView: GameView, eventBus: EventBus, ): { builder: WebGLFrameBuilder } { diff --git a/src/client/graphics/layers/Controller.ts b/src/client/Controller.ts similarity index 100% rename from src/client/graphics/layers/Controller.ts rename to src/client/Controller.ts diff --git a/src/client/InputHandler.ts b/src/client/InputHandler.ts index 4dd3cc36a..d0cc7334d 100644 --- a/src/client/InputHandler.ts +++ b/src/client/InputHandler.ts @@ -2,8 +2,8 @@ import { EventBus, GameEvent } from "../core/EventBus"; import { PlayerBuildableUnitType, UnitType } from "../core/game/Game"; import { GameView, UnitView } from "../core/game/GameView"; import { UserSettings } from "../core/game/UserSettings"; -import { UIState } from "./graphics/UIState"; import { Platform } from "./Platform"; +import { UIState } from "./UIState"; import { ReplaySpeedMultiplier } from "./utilities/ReplaySpeedMultiplier"; export class MouseUpEvent implements GameEvent { @@ -92,10 +92,6 @@ export class ToggleStructureEvent implements GameEvent { ) {} } -export class GhostStructureChangedEvent implements GameEvent { - constructor(public readonly ghostStructure: PlayerBuildableUnitType | null) {} -} - export class ConfirmGhostStructureEvent implements GameEvent {} export class SwapRocketDirectionEvent implements GameEvent { @@ -850,7 +846,6 @@ export class InputHandler { private setGhostStructure(ghostStructure: PlayerBuildableUnitType | null) { this.uiState.ghostStructure = ghostStructure; - this.eventBus.emit(new GhostStructureChangedEvent(ghostStructure)); } /** diff --git a/src/client/graphics/TransformHandler.ts b/src/client/TransformHandler.ts similarity index 97% rename from src/client/graphics/TransformHandler.ts rename to src/client/TransformHandler.ts index 5e69a6901..c1175b788 100644 --- a/src/client/graphics/TransformHandler.ts +++ b/src/client/TransformHandler.ts @@ -1,7 +1,7 @@ -import { EventBus, GameEvent } from "../../core/EventBus"; -import { Cell } from "../../core/game/Game"; -import { GameView, PlayerView, UnitView } from "../../core/game/GameView"; -import { CenterCameraEvent, DragEvent, ZoomEvent } from "../InputHandler"; +import { EventBus, GameEvent } from "../core/EventBus"; +import { Cell } from "../core/game/Game"; +import { GameView, PlayerView, UnitView } from "../core/game/GameView"; +import { CenterCameraEvent, DragEvent, ZoomEvent } from "./InputHandler"; export class GoToPlayerEvent implements GameEvent { constructor( diff --git a/src/client/graphics/UIState.ts b/src/client/UIState.ts similarity index 63% rename from src/client/graphics/UIState.ts rename to src/client/UIState.ts index c43a773f1..c4f529615 100644 --- a/src/client/graphics/UIState.ts +++ b/src/client/UIState.ts @@ -1,5 +1,5 @@ -import { PlayerBuildableUnitType } from "../../core/game/Game"; -import { TileRef } from "../../core/game/GameMap"; +import { PlayerBuildableUnitType } from "../core/game/Game"; +import { TileRef } from "../core/game/GameMap"; export interface UIState { attackRatio: number; diff --git a/src/client/controllers/BuildPreviewController.ts b/src/client/controllers/BuildPreviewController.ts index 17275c8f1..21a9398a1 100644 --- a/src/client/controllers/BuildPreviewController.ts +++ b/src/client/controllers/BuildPreviewController.ts @@ -16,21 +16,20 @@ import { } from "../../core/game/Game"; import { TileRef } from "../../core/game/GameMap"; import { GameView } from "../../core/game/GameView"; -import { Controller } from "../graphics/layers/Controller"; -import { TransformHandler } from "../graphics/TransformHandler"; -import { UIState } from "../graphics/UIState"; +import { Controller } from "../Controller"; import { ConfirmGhostStructureEvent, - GhostStructureChangedEvent, MouseMoveEvent, MouseUpEvent, } from "../InputHandler"; import { GameView as WebGLGameView } from "../render/gl"; import type { GhostPreviewData } from "../render/types"; +import { TransformHandler } from "../TransformHandler"; import { BuildUnitIntentEvent, SendUpgradeStructureIntentEvent, } from "../Transport"; +import { UIState } from "../UIState"; /** True for nuke types (AtomBomb, HydrogenBomb): ghost is preserved after placement so user can place multiple or keep selection (Enter/key confirm). */ export function shouldPreserveGhostAfterBuild(unitType: UnitType): boolean { @@ -314,7 +313,6 @@ export class BuildPreviewController implements Controller { private removeGhostStructure() { this.clearGhostStructure(); this.uiState.ghostStructure = null; - this.eventBus.emit(new GhostStructureChangedEvent(null)); } private resolveGhostRangeLevel( diff --git a/src/client/controllers/WarshipSelectionController.ts b/src/client/controllers/WarshipSelectionController.ts index d8e01541a..fdaa9294b 100644 --- a/src/client/controllers/WarshipSelectionController.ts +++ b/src/client/controllers/WarshipSelectionController.ts @@ -3,8 +3,7 @@ import { EventBus } from "../../core/EventBus"; import { UnitType } from "../../core/game/Game"; import { TileRef } from "../../core/game/GameMap"; import { GameView, UnitView } from "../../core/game/GameView"; -import { Controller } from "../graphics/layers/Controller"; -import { TransformHandler } from "../graphics/TransformHandler"; +import { Controller } from "../Controller"; import { CloseViewEvent, ContextMenuEvent, @@ -17,6 +16,7 @@ import { WarshipSelectionBoxUpdateEvent, } from "../InputHandler"; import { GameView as WebGLGameView } from "../render/gl"; +import { TransformHandler } from "../TransformHandler"; import { MoveWarshipIntentEvent } from "../Transport"; const WARSHIP_SELECTION_RADIUS = 10; diff --git a/src/client/graphics/GameRenderer.ts b/src/client/graphics/GameRenderer.ts index 03ed58346..c8c854a67 100644 --- a/src/client/graphics/GameRenderer.ts +++ b/src/client/graphics/GameRenderer.ts @@ -1,13 +1,14 @@ import { EventBus } from "../../core/EventBus"; import { GameView } from "../../core/game/GameView"; import { UserSettings } from "../../core/game/UserSettings"; +import { Controller } from "../Controller"; import { GameStartingModal } from "../GameStartingModal"; +import { TransformHandler } from "../TransformHandler"; +import { UIState } from "../UIState"; import { BuildPreviewController } from "../controllers/BuildPreviewController"; import { WarshipSelectionController } from "../controllers/WarshipSelectionController"; import { GameView as WebGLGameView } from "../render/gl"; import { FrameProfiler } from "./FrameProfiler"; -import { TransformHandler } from "./TransformHandler"; -import { UIState } from "./UIState"; import { AlertFrame } from "./layers/AlertFrame"; import { AttackingTroopsOverlay } from "./layers/AttackingTroopsOverlay"; import { AttacksDisplay } from "./layers/AttacksDisplay"; @@ -15,7 +16,6 @@ import { BuildMenu } from "./layers/BuildMenu"; import { ChatDisplay } from "./layers/ChatDisplay"; import { ChatModal } from "./layers/ChatModal"; import { ControlPanel } from "./layers/ControlPanel"; -import { Controller } from "./layers/Controller"; import { EmojiTable } from "./layers/EmojiTable"; import { EventsDisplay } from "./layers/EventsDisplay"; import { GameLeftSidebar } from "./layers/GameLeftSidebar"; diff --git a/src/client/graphics/layers/AlertFrame.ts b/src/client/graphics/layers/AlertFrame.ts index 168c9ee0a..fcadb4969 100644 --- a/src/client/graphics/layers/AlertFrame.ts +++ b/src/client/graphics/layers/AlertFrame.ts @@ -7,7 +7,7 @@ import { } from "../../../core/game/GameUpdates"; import { GameView, PlayerView } from "../../../core/game/GameView"; import { UserSettings } from "../../../core/game/UserSettings"; -import { Controller } from "./Controller"; +import { Controller } from "../../Controller"; // Parameters for the alert animation const ALERT_SPEED = 1.6; diff --git a/src/client/graphics/layers/AttackingTroopsOverlay.ts b/src/client/graphics/layers/AttackingTroopsOverlay.ts index bc88f90da..bcc434201 100644 --- a/src/client/graphics/layers/AttackingTroopsOverlay.ts +++ b/src/client/graphics/layers/AttackingTroopsOverlay.ts @@ -2,10 +2,10 @@ import { EventBus } from "../../../core/EventBus"; import { Cell, PlayerType } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; import { UserSettings } from "../../../core/game/UserSettings"; +import { Controller } from "../../Controller"; import { AlternateViewEvent } from "../../InputHandler"; +import { TransformHandler } from "../../TransformHandler"; import { renderTroops } from "../../Utils"; -import { TransformHandler } from "../TransformHandler"; -import { Controller } from "./Controller"; // Match AttacksDisplay: aquarius for outgoing, red-400 for incoming. const OUTGOING_COLOR = "var(--color-aquarius)"; diff --git a/src/client/graphics/layers/AttacksDisplay.ts b/src/client/graphics/layers/AttacksDisplay.ts index 82d0e1c92..13e4fc04f 100644 --- a/src/client/graphics/layers/AttacksDisplay.ts +++ b/src/client/graphics/layers/AttacksDisplay.ts @@ -9,20 +9,20 @@ import { UnitIncomingUpdate, } from "../../../core/game/GameUpdates"; import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; +import { + GoToPlayerEvent, + GoToPositionEvent, + GoToUnitEvent, +} from "../../TransformHandler"; import { CancelAttackIntentEvent, CancelBoatIntentEvent, SendAttackIntentEvent, } from "../../Transport"; +import { UIState } from "../../UIState"; import { renderTroops, translateText } from "../../Utils"; import { getColoredSprite } from "../SpriteLoader"; -import { - GoToPlayerEvent, - GoToPositionEvent, - GoToUnitEvent, -} from "../TransformHandler"; -import { UIState } from "../UIState"; -import { Controller } from "./Controller"; const soldierIcon = assetUrl("images/SoldierIcon.svg"); const swordIcon = assetUrl("images/SwordIcon.svg"); diff --git a/src/client/graphics/layers/BuildMenu.ts b/src/client/graphics/layers/BuildMenu.ts index e9cb0c5cb..46d1a8f41 100644 --- a/src/client/graphics/layers/BuildMenu.ts +++ b/src/client/graphics/layers/BuildMenu.ts @@ -12,20 +12,20 @@ import { } from "../../../core/game/Game"; import { TileRef } from "../../../core/game/GameMap"; import { GameView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; import { CloseViewEvent, MouseDownEvent, ShowBuildMenuEvent, ShowEmojiMenuEvent, } from "../../InputHandler"; +import { TransformHandler } from "../../TransformHandler"; import { BuildUnitIntentEvent, SendUpgradeStructureIntentEvent, } from "../../Transport"; +import { UIState } from "../../UIState"; import { renderNumber } from "../../Utils"; -import { TransformHandler } from "../TransformHandler"; -import { UIState } from "../UIState"; -import { Controller } from "./Controller"; const warshipIcon = assetUrl("images/BattleshipIconWhite.svg"); const cityIcon = assetUrl("images/CityIconWhite.svg"); const factoryIcon = assetUrl("images/FactoryIconWhite.svg"); diff --git a/src/client/graphics/layers/ChatDisplay.ts b/src/client/graphics/layers/ChatDisplay.ts index 2a7514c23..04018b2cf 100644 --- a/src/client/graphics/layers/ChatDisplay.ts +++ b/src/client/graphics/layers/ChatDisplay.ts @@ -10,7 +10,7 @@ import { } from "../../../core/game/GameUpdates"; import { GameView } from "../../../core/game/GameView"; import { onlyImages } from "../../../core/Util"; -import { Controller } from "./Controller"; +import { Controller } from "../../Controller"; interface ChatEvent { description: string; diff --git a/src/client/graphics/layers/ControlPanel.ts b/src/client/graphics/layers/ControlPanel.ts index 480be247c..dce219b5a 100644 --- a/src/client/graphics/layers/ControlPanel.ts +++ b/src/client/graphics/layers/ControlPanel.ts @@ -6,10 +6,10 @@ import { Gold } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; import { UserSettings } from "../../../core/game/UserSettings"; import { ClientID } from "../../../core/Schemas"; +import { Controller } from "../../Controller"; import { AttackRatioEvent } from "../../InputHandler"; +import { UIState } from "../../UIState"; import { renderNumber, renderTroops } from "../../Utils"; -import { UIState } from "../UIState"; -import { Controller } from "./Controller"; const goldCoinIcon = assetUrl("images/GoldCoinIcon.svg"); const soldierIcon = assetUrl("images/SoldierIcon.svg"); const swordIcon = assetUrl("images/SwordIcon.svg"); diff --git a/src/client/graphics/layers/EmojiTable.ts b/src/client/graphics/layers/EmojiTable.ts index ef3547e41..787b83725 100644 --- a/src/client/graphics/layers/EmojiTable.ts +++ b/src/client/graphics/layers/EmojiTable.ts @@ -6,8 +6,8 @@ import { GameView, PlayerView } from "../../../core/game/GameView"; import { TerraNulliusImpl } from "../../../core/game/TerraNulliusImpl"; import { Emoji, flattenedEmojiTable } from "../../../core/Util"; import { CloseViewEvent, ShowEmojiMenuEvent } from "../../InputHandler"; +import { TransformHandler } from "../../TransformHandler"; import { SendEmojiIntentEvent } from "../../Transport"; -import { TransformHandler } from "../TransformHandler"; @customElement("emoji-table") export class EmojiTable extends LitElement { diff --git a/src/client/graphics/layers/EventsDisplay.ts b/src/client/graphics/layers/EventsDisplay.ts index 3516e1ca4..96264656b 100644 --- a/src/client/graphics/layers/EventsDisplay.ts +++ b/src/client/graphics/layers/EventsDisplay.ts @@ -24,21 +24,21 @@ import { TargetPlayerUpdate, UnitIncomingUpdate, } from "../../../core/game/GameUpdates"; +import { Controller } from "../../Controller"; import { SendAllianceExtensionIntentEvent, SendAllianceRejectIntentEvent, SendAllianceRequestIntentEvent, } from "../../Transport"; -import { Controller } from "./Controller"; import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; import { onlyImages } from "../../../core/Util"; +import { GoToPlayerEvent, GoToUnitEvent } from "../../TransformHandler"; import { renderNumber } from "../../Utils"; -import { GoToPlayerEvent, GoToUnitEvent } from "../TransformHandler"; import { PlaySoundEffectEvent } from "../../sound/Sounds"; +import { UIState } from "../../UIState"; import { getMessageTypeClasses, translateText } from "../../Utils"; -import { UIState } from "../UIState"; const allianceIcon = assetUrl("images/AllianceIconWhite.svg"); const chatIcon = assetUrl("images/ChatIconWhite.svg"); const donateGoldIcon = assetUrl("images/DonateGoldIconWhite.svg"); diff --git a/src/client/graphics/layers/GameLeftSidebar.ts b/src/client/graphics/layers/GameLeftSidebar.ts index 296e057d4..a0039e327 100644 --- a/src/client/graphics/layers/GameLeftSidebar.ts +++ b/src/client/graphics/layers/GameLeftSidebar.ts @@ -5,9 +5,9 @@ import { assetUrl } from "../../../core/AssetUrls"; import { EventBus } from "../../../core/EventBus"; import { GameMode, Team } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; import { Platform } from "../../Platform"; import { getTranslatedPlayerTeamLabel, translateText } from "../../Utils"; -import { Controller } from "./Controller"; import { ImmunityBarVisibleEvent } from "./ImmunityTimer"; import { SpawnBarVisibleEvent } from "./SpawnTimer"; const leaderboardRegularIcon = assetUrl( diff --git a/src/client/graphics/layers/GameRightSidebar.ts b/src/client/graphics/layers/GameRightSidebar.ts index 02c2d2968..47750465d 100644 --- a/src/client/graphics/layers/GameRightSidebar.ts +++ b/src/client/graphics/layers/GameRightSidebar.ts @@ -4,11 +4,11 @@ import { assetUrl } from "../../../core/AssetUrls"; import { EventBus } from "../../../core/EventBus"; import { GameType } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; import { crazyGamesSDK } from "../../CrazyGamesSDK"; import { TogglePauseIntentEvent } from "../../InputHandler"; import { PauseGameIntentEvent, SendWinnerEvent } from "../../Transport"; import { translateText } from "../../Utils"; -import { Controller } from "./Controller"; import { ImmunityBarVisibleEvent } from "./ImmunityTimer"; import { ShowReplayPanelEvent } from "./ReplayPanel"; import { ShowSettingsModalEvent } from "./SettingsModal"; diff --git a/src/client/graphics/layers/HeadsUpMessage.ts b/src/client/graphics/layers/HeadsUpMessage.ts index 612cc2022..7f9b95532 100644 --- a/src/client/graphics/layers/HeadsUpMessage.ts +++ b/src/client/graphics/layers/HeadsUpMessage.ts @@ -3,8 +3,8 @@ import { customElement, state } from "lit/decorators.js"; import { GameType } from "../../../core/game/Game"; import { GameUpdateType } from "../../../core/game/GameUpdates"; import { GameView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; import { translateText } from "../../Utils"; -import { Controller } from "./Controller"; @customElement("heads-up-message") export class HeadsUpMessage extends LitElement implements Controller { diff --git a/src/client/graphics/layers/ImmunityTimer.ts b/src/client/graphics/layers/ImmunityTimer.ts index 9f0070e55..4cfefb99c 100644 --- a/src/client/graphics/layers/ImmunityTimer.ts +++ b/src/client/graphics/layers/ImmunityTimer.ts @@ -3,7 +3,7 @@ import { customElement } from "lit/decorators.js"; import { EventBus, GameEvent } from "../../../core/EventBus"; import { GameMode } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; -import { Controller } from "./Controller"; +import { Controller } from "../../Controller"; export class ImmunityBarVisibleEvent implements GameEvent { constructor(public readonly visible: boolean) {} diff --git a/src/client/graphics/layers/InGamePromo.ts b/src/client/graphics/layers/InGamePromo.ts index 08d0a97e5..d26efb85d 100644 --- a/src/client/graphics/layers/InGamePromo.ts +++ b/src/client/graphics/layers/InGamePromo.ts @@ -1,8 +1,8 @@ import { LitElement, html } from "lit"; import { customElement } from "lit/decorators.js"; import { GameView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; import { crazyGamesSDK } from "../../CrazyGamesSDK"; -import { Controller } from "./Controller"; const AD_TYPES = [ { type: "standard_iab_left1", selectorId: "in-game-bottom-left-ad" }, diff --git a/src/client/graphics/layers/Leaderboard.ts b/src/client/graphics/layers/Leaderboard.ts index 4520e1b7c..4a805ca20 100644 --- a/src/client/graphics/layers/Leaderboard.ts +++ b/src/client/graphics/layers/Leaderboard.ts @@ -4,9 +4,9 @@ import { repeat } from "lit/directives/repeat.js"; import { renderTroops, translateText } from "../../../client/Utils"; import { EventBus } from "../../../core/EventBus"; import { GameView, PlayerView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; +import { GoToPlayerEvent } from "../../TransformHandler"; import { formatPercentage, renderNumber } from "../../Utils"; -import { GoToPlayerEvent } from "../TransformHandler"; -import { Controller } from "./Controller"; interface Entry { name: string; diff --git a/src/client/graphics/layers/MainRadialMenu.ts b/src/client/graphics/layers/MainRadialMenu.ts index 0d55e2da8..c615db0d0 100644 --- a/src/client/graphics/layers/MainRadialMenu.ts +++ b/src/client/graphics/layers/MainRadialMenu.ts @@ -5,11 +5,11 @@ 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 { Controller } from "../../Controller"; +import { TransformHandler } from "../../TransformHandler"; +import { UIState } from "../../UIState"; import { BuildMenu } from "./BuildMenu"; import { ChatIntegration } from "./ChatIntegration"; -import { Controller } from "./Controller"; import { EmojiTable } from "./EmojiTable"; import { PlayerActionHandler } from "./PlayerActionHandler"; import { PlayerPanel } from "./PlayerPanel"; diff --git a/src/client/graphics/layers/MultiTabModal.ts b/src/client/graphics/layers/MultiTabModal.ts index 90721c00b..1ea12914b 100644 --- a/src/client/graphics/layers/MultiTabModal.ts +++ b/src/client/graphics/layers/MultiTabModal.ts @@ -4,9 +4,9 @@ import { ClientEnv } from "src/client/ClientEnv"; import { GameEnv } from "../../../core/configuration/Config"; import { GameType } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; import { MultiTabDetector } from "../../MultiTabDetector"; import { translateText } from "../../Utils"; -import { Controller } from "./Controller"; @customElement("multi-tab-modal") export class MultiTabModal extends LitElement implements Controller { diff --git a/src/client/graphics/layers/PerformanceOverlay.ts b/src/client/graphics/layers/PerformanceOverlay.ts index 3686e499c..2f0e4134c 100644 --- a/src/client/graphics/layers/PerformanceOverlay.ts +++ b/src/client/graphics/layers/PerformanceOverlay.ts @@ -6,6 +6,7 @@ import { USER_SETTINGS_CHANGED_EVENT, UserSettings, } from "../../../core/game/UserSettings"; +import { Controller } from "../../Controller"; import { TickMetricsEvent, TogglePerformanceOverlayEvent, @@ -13,7 +14,6 @@ import { import type { LangSelector } from "../../LangSelector"; import { translateText } from "../../Utils"; import { FrameProfiler } from "../FrameProfiler"; -import { Controller } from "./Controller"; @customElement("performance-overlay") export class PerformanceOverlay extends LitElement implements Controller { diff --git a/src/client/graphics/layers/PlayerActionHandler.ts b/src/client/graphics/layers/PlayerActionHandler.ts index 6e876579c..085e4d1ce 100644 --- a/src/client/graphics/layers/PlayerActionHandler.ts +++ b/src/client/graphics/layers/PlayerActionHandler.ts @@ -15,7 +15,7 @@ import { SendSpawnIntentEvent, SendTargetPlayerIntentEvent, } from "../../Transport"; -import { UIState } from "../UIState"; +import { UIState } from "../../UIState"; export class PlayerActionHandler { constructor( diff --git a/src/client/graphics/layers/PlayerInfoOverlay.ts b/src/client/graphics/layers/PlayerInfoOverlay.ts index 7c07d8d61..fc2d1e1c5 100644 --- a/src/client/graphics/layers/PlayerInfoOverlay.ts +++ b/src/client/graphics/layers/PlayerInfoOverlay.ts @@ -12,11 +12,13 @@ import { import { TileRef } from "../../../core/game/GameMap"; import { AllianceView } from "../../../core/game/GameUpdates"; import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; import { ContextMenuEvent, MouseMoveEvent, TouchEvent, } from "../../InputHandler"; +import { TransformHandler } from "../../TransformHandler"; import { getTranslatedPlayerTeamLabel, renderDuration, @@ -30,8 +32,6 @@ import { getPlayerIcons, IMAGE_ICON_KIND, } from "../PlayerIcons"; -import { TransformHandler } from "../TransformHandler"; -import { Controller } from "./Controller"; import { ImmunityBarVisibleEvent } from "./ImmunityTimer"; import { CloseRadialMenuEvent } from "./RadialMenu"; import "./RelationSmiley"; diff --git a/src/client/graphics/layers/PlayerPanel.ts b/src/client/graphics/layers/PlayerPanel.ts index 0a01dd95b..f872f8140 100644 --- a/src/client/graphics/layers/PlayerPanel.ts +++ b/src/client/graphics/layers/PlayerPanel.ts @@ -15,6 +15,7 @@ import { GameView, PlayerView } from "../../../core/game/GameView"; import { Emoji, flattenedEmojiTable } from "../../../core/Util"; import { actionButton } from "../../components/ui/ActionButton"; import "../../components/ui/Divider"; +import { Controller } from "../../Controller"; import { CloseViewEvent, MouseUpEvent, @@ -28,15 +29,14 @@ import { SendEmojiIntentEvent, SendTargetPlayerIntentEvent, } from "../../Transport"; +import { UIState } from "../../UIState"; import { renderDuration, renderNumber, renderTroops, translateText, } from "../../Utils"; -import { UIState } from "../UIState"; import { ChatModal } from "./ChatModal"; -import { Controller } from "./Controller"; import { EmojiTable } from "./EmojiTable"; import "./PlayerModerationModal"; import "./SendResourceModal"; diff --git a/src/client/graphics/layers/RadialMenu.ts b/src/client/graphics/layers/RadialMenu.ts index fa6a31015..740a0b90e 100644 --- a/src/client/graphics/layers/RadialMenu.ts +++ b/src/client/graphics/layers/RadialMenu.ts @@ -1,10 +1,10 @@ import * as d3 from "d3"; import { assetUrl } from "../../../core/AssetUrls"; import { EventBus, GameEvent } from "../../../core/EventBus"; +import { Controller } from "../../Controller"; import { CloseViewEvent } from "../../InputHandler"; import { PlaySoundEffectEvent } from "../../sound/Sounds"; import { getSvgAspectRatio, translateText } from "../../Utils"; -import { Controller } from "./Controller"; import { CenterButtonElement, MenuElement, diff --git a/src/client/graphics/layers/RadialMenuElements.ts b/src/client/graphics/layers/RadialMenuElements.ts index 14e87c5e5..b29ea6791 100644 --- a/src/client/graphics/layers/RadialMenuElements.ts +++ b/src/client/graphics/layers/RadialMenuElements.ts @@ -11,8 +11,8 @@ import { import { TileRef } from "../../../core/game/GameMap"; import { GameView, PlayerView } from "../../../core/game/GameView"; import { Emoji, findClosestBy, flattenedEmojiTable } from "../../../core/Util"; +import { UIState } from "../../UIState"; import { renderNumber, translateText } from "../../Utils"; -import { UIState } from "../UIState"; import { BuildItemDisplay, BuildMenu, flattenedBuildTable } from "./BuildMenu"; import { ChatIntegration } from "./ChatIntegration"; import { EmojiTable } from "./EmojiTable"; diff --git a/src/client/graphics/layers/ReplayPanel.ts b/src/client/graphics/layers/ReplayPanel.ts index 79e7b82c5..390e57092 100644 --- a/src/client/graphics/layers/ReplayPanel.ts +++ b/src/client/graphics/layers/ReplayPanel.ts @@ -2,13 +2,13 @@ import { html, LitElement } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { EventBus } from "../../../core/EventBus"; import { GameView } from "../../../core/game/GameView"; +import { Controller } from "../../Controller"; import { ReplaySpeedChangeEvent } from "../../InputHandler"; import { defaultReplaySpeedMultiplier, ReplaySpeedMultiplier, } from "../../utilities/ReplaySpeedMultiplier"; import { translateText } from "../../Utils"; -import { Controller } from "./Controller"; export class ShowReplayPanelEvent { constructor( diff --git a/src/client/graphics/layers/SendResourceModal.ts b/src/client/graphics/layers/SendResourceModal.ts index 38495a6a1..0ce7db8d1 100644 --- a/src/client/graphics/layers/SendResourceModal.ts +++ b/src/client/graphics/layers/SendResourceModal.ts @@ -7,8 +7,8 @@ import { SendDonateGoldIntentEvent, SendDonateTroopsIntentEvent, } from "../../Transport"; +import { UIState } from "../../UIState"; import { renderTroops, translateText } from "../../Utils"; -import { UIState } from "../UIState"; @customElement("send-resource-modal") export class SendResourceModal extends LitElement { diff --git a/src/client/graphics/layers/SettingsModal.ts b/src/client/graphics/layers/SettingsModal.ts index 22a6cd7c5..e1d19199d 100644 --- a/src/client/graphics/layers/SettingsModal.ts +++ b/src/client/graphics/layers/SettingsModal.ts @@ -5,13 +5,13 @@ import { PauseGameIntentEvent } from "src/client/Transport"; import { assetUrl } from "../../../core/AssetUrls"; import { EventBus } from "../../../core/EventBus"; import { UserSettings } from "../../../core/game/UserSettings"; +import { Controller } from "../../Controller"; import { AlternateViewEvent, RefreshGraphicsEvent } from "../../InputHandler"; import { translateText } from "../../Utils"; import { SetBackgroundMusicVolumeEvent, SetSoundEffectsVolumeEvent, } from "../../sound/Sounds"; -import { Controller } from "./Controller"; const structureIcon = assetUrl("images/CityIconWhite.svg"); const cursorPriceIcon = assetUrl("images/CursorPriceIconWhite.svg"); const darkModeIcon = assetUrl("images/DarkModeIconWhite.svg"); diff --git a/src/client/graphics/layers/SpawnTimer.ts b/src/client/graphics/layers/SpawnTimer.ts index e4e025052..f4399362d 100644 --- a/src/client/graphics/layers/SpawnTimer.ts +++ b/src/client/graphics/layers/SpawnTimer.ts @@ -3,8 +3,8 @@ import { customElement } from "lit/decorators.js"; import { EventBus, GameEvent } from "../../../core/EventBus"; import { GameMode, GameType, Team } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; -import { TransformHandler } from "../TransformHandler"; -import { Controller } from "./Controller"; +import { Controller } from "../../Controller"; +import { TransformHandler } from "../../TransformHandler"; export class SpawnBarVisibleEvent implements GameEvent { constructor(public readonly visible: boolean) {} diff --git a/src/client/graphics/layers/StructureDrawingUtils.ts b/src/client/graphics/layers/StructureDrawingUtils.ts index bffd1f4d2..6ea5ad33a 100644 --- a/src/client/graphics/layers/StructureDrawingUtils.ts +++ b/src/client/graphics/layers/StructureDrawingUtils.ts @@ -7,7 +7,7 @@ import { UnitType, } from "../../../core/game/Game"; import { GameView, PlayerView, UnitView } from "../../../core/game/GameView"; -import { TransformHandler } from "../TransformHandler"; +import { TransformHandler } from "../../TransformHandler"; const anchorIcon = assetUrl("images/AnchorIcon.v1.png"); const cityIcon = assetUrl("images/CityIcon.v1.png"); const factoryIcon = assetUrl("images/FactoryUnit.v1.png"); diff --git a/src/client/graphics/layers/TeamStats.ts b/src/client/graphics/layers/TeamStats.ts index 6ce2c50f5..3df550093 100644 --- a/src/client/graphics/layers/TeamStats.ts +++ b/src/client/graphics/layers/TeamStats.ts @@ -3,13 +3,13 @@ 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 { Controller } from "../../Controller"; import { formatPercentage, renderNumber, renderTroops, translateText, } from "../../Utils"; -import { Controller } from "./Controller"; interface TeamEntry { teamName: string; diff --git a/src/client/graphics/layers/UnitDisplay.ts b/src/client/graphics/layers/UnitDisplay.ts index 456f16530..8714d51b6 100644 --- a/src/client/graphics/layers/UnitDisplay.ts +++ b/src/client/graphics/layers/UnitDisplay.ts @@ -11,13 +11,10 @@ import { } from "../../../core/game/Game"; import { GameView } from "../../../core/game/GameView"; import { UserSettings } from "../../../core/game/UserSettings"; -import { - GhostStructureChangedEvent, - ToggleStructureEvent, -} from "../../InputHandler"; +import { Controller } from "../../Controller"; +import { ToggleStructureEvent } from "../../InputHandler"; +import { UIState } from "../../UIState"; import { renderNumber, translateText } from "../../Utils"; -import { UIState } from "../UIState"; -import { Controller } from "./Controller"; const warshipIcon = assetUrl("images/BattleshipIconWhite.svg"); const cityIcon = assetUrl("images/CityIconWhite.svg"); const factoryIcon = assetUrl("images/FactoryIconWhite.svg"); @@ -268,10 +265,8 @@ export class UnitDisplay extends LitElement implements Controller { @click=${() => { if (selected) { this.uiState.ghostStructure = null; - this.eventBus?.emit(new GhostStructureChangedEvent(null)); } else if (this.canBuild(unitType)) { this.uiState.ghostStructure = unitType; - this.eventBus?.emit(new GhostStructureChangedEvent(unitType)); } this.requestUpdate(); }} diff --git a/src/client/graphics/layers/WinModal.ts b/src/client/graphics/layers/WinModal.ts index 7907ab317..7c7b8fdd6 100644 --- a/src/client/graphics/layers/WinModal.ts +++ b/src/client/graphics/layers/WinModal.ts @@ -12,6 +12,7 @@ import { GameUpdateType } from "../../../core/game/GameUpdates"; import { GameView } from "../../../core/game/GameView"; import { getUserMe } from "../../Api"; import "../../components/CosmeticButton"; +import { Controller } from "../../Controller"; import { fetchCosmetics, purchaseCosmetic, @@ -20,7 +21,6 @@ import { import { crazyGamesSDK } from "../../CrazyGamesSDK"; import { Platform } from "../../Platform"; import { SendWinnerEvent } from "../../Transport"; -import { Controller } from "./Controller"; @customElement("win-modal") export class WinModal extends LitElement implements Controller { diff --git a/src/client/graphics/ui/TextIndicator.ts b/src/client/graphics/ui/TextIndicator.ts index 1c49006a1..1d68f7b0c 100644 --- a/src/client/graphics/ui/TextIndicator.ts +++ b/src/client/graphics/ui/TextIndicator.ts @@ -1,5 +1,5 @@ import { Cell } from "src/core/game/Game"; -import { TransformHandler } from "../TransformHandler"; +import { TransformHandler } from "../../TransformHandler"; import { UIElement } from "./UIElement"; const MIN_TEXT_ZOOM = 1.1; diff --git a/tests/InputHandler.test.ts b/tests/InputHandler.test.ts index 3da402e6f..f0a8f2e04 100644 --- a/tests/InputHandler.test.ts +++ b/tests/InputHandler.test.ts @@ -6,7 +6,7 @@ import { WarshipSelectionBoxCompleteEvent, WarshipSelectionBoxUpdateEvent, } from "../src/client/InputHandler"; -import { UIState } from "../src/client/graphics/UIState"; +import { UIState } from "../src/client/UIState"; import { EventBus } from "../src/core/EventBus"; import { UnitType } from "../src/core/game/Game"; import { GameView, PlayerView } from "../src/core/game/GameView"; @@ -928,13 +928,10 @@ describe("Warship box selection (Shift+drag)", () => { test("Shift keydown discards active ghostStructure", () => { uiState.ghostStructure = UnitType.Warship; - const emitSpy = vi.spyOn(eventBus, "emit"); window.dispatchEvent(new KeyboardEvent("keydown", { code: "ShiftLeft" })); expect(uiState.ghostStructure).toBeNull(); - const types = emitSpy.mock.calls.map((c) => c[0].constructor.name); - expect(types).toContain("GhostStructureChangedEvent"); }); test("Shift+drag emits WarshipSelectionBoxUpdateEvent", () => {