diff --git a/src/client/graphics/layers/GameRightSidebar.ts b/src/client/graphics/layers/GameRightSidebar.ts index fc5ffdd30..3ac7ce450 100644 --- a/src/client/graphics/layers/GameRightSidebar.ts +++ b/src/client/graphics/layers/GameRightSidebar.ts @@ -99,7 +99,9 @@ export class GameRightSidebar extends LitElement implements Layer { } private onSettingsButtonClick() { - this.eventBus.emit(new ShowSettingsModalEvent(true)); + this.eventBus.emit( + new ShowSettingsModalEvent(true, this._isSinglePlayer, this.isPaused), + ); } render() { diff --git a/src/client/graphics/layers/SettingsModal.ts b/src/client/graphics/layers/SettingsModal.ts index 54f0205b9..72d4c6cf3 100644 --- a/src/client/graphics/layers/SettingsModal.ts +++ b/src/client/graphics/layers/SettingsModal.ts @@ -1,5 +1,5 @@ import { html, LitElement } from "lit"; -import { customElement, query, state } from "lit/decorators.js"; +import { customElement, property, query, state } from "lit/decorators.js"; import structureIcon from "../../../../resources/images/CityIconWhite.svg"; import darkModeIcon from "../../../../resources/images/DarkModeIconWhite.svg"; import emojiIcon from "../../../../resources/images/EmojiIconWhite.svg"; @@ -12,11 +12,16 @@ 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 { translateText } from "../../Utils"; import { Layer } from "./Layer"; export class ShowSettingsModalEvent { - constructor(public readonly isVisible: boolean = true) {} + constructor( + public readonly isVisible: boolean = true, + public readonly shouldPause: boolean = false, + public readonly isPaused: boolean = false, + ) {} } @customElement("settings-modal") @@ -33,9 +38,18 @@ export class SettingsModal extends LitElement implements Layer { @query(".modal-overlay") private modalOverlay!: HTMLElement; + @property({ type: Boolean }) + shouldPause = false; + + @property({ type: Boolean }) + wasPausedWhenOpened = false; + init() { this.eventBus.on(ShowSettingsModalEvent, (event) => { this.isVisible = event.isVisible; + this.shouldPause = event.shouldPause; + this.wasPausedWhenOpened = event.isPaused; + this.pauseGame(true); }); } @@ -81,6 +95,12 @@ export class SettingsModal extends LitElement implements Layer { this.isVisible = false; document.body.style.overflow = ""; this.requestUpdate(); + this.pauseGame(false); + } + + private pauseGame(pause: boolean) { + if (this.shouldPause && !this.wasPausedWhenOpened) + this.eventBus.emit(new PauseGameEvent(pause)); } private onTerrainButtonClick() {