diff --git a/.gitignore b/.gitignore index 976703fa9..8652c3158 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ TODO.txt resources/images/.DS_Store resources/.DS_Store .env -.prettierrc \ No newline at end of file +.prettierrc +.prettierignore \ No newline at end of file diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index 298fbaa5e..7f3ec7904 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -56,6 +56,8 @@ export interface LobbyConfig { gameID: GameID; map: GameMapType | null; difficulty: Difficulty | null; + disableBots: boolean | null; + disableNPCs: boolean | null; } export function joinLobby( @@ -77,6 +79,8 @@ export function joinLobby( gameType: GameType.Singleplayer, gameMap: lobbyConfig.map, difficulty: lobbyConfig.difficulty, + disableBots: lobbyConfig.disableBots, + disableNPCs: lobbyConfig.disableNPCs, }; } diff --git a/src/client/HostLobbyModal.ts b/src/client/HostLobbyModal.ts index 8233cd584..28dc377d7 100644 --- a/src/client/HostLobbyModal.ts +++ b/src/client/HostLobbyModal.ts @@ -9,6 +9,8 @@ export class HostLobbyModal extends LitElement { @state() private isModalOpen = false; @state() private selectedMap: GameMapType = GameMapType.World; @state() private selectedDiffculty: Difficulty = Difficulty.Medium; + @state() private disableNPCs = false; + @state() private disableBots = false; @state() private lobbyId = ""; @state() private copySuccess = false; @state() private players: string[] = []; @@ -165,6 +167,22 @@ export class HostLobbyModal extends LitElement { )} +
Players: ${this.players.join(", ")}
@@ -191,6 +209,8 @@ export class HostLobbyModal extends LitElement { }, map: this.selectedMap, difficulty: this.selectedDiffculty, + disableBots: this.disableBots, + disableNPCs: this.disableNPCs, }, bubbles: true, composed: true, @@ -226,6 +246,18 @@ export class HostLobbyModal extends LitElement { this.putGameConfig(); } + private async handleDisableBotsChange(e: Event) { + this.disableBots = Boolean((e.target as HTMLInputElement).checked); + consolex.log(`updating disable bots to ${this.disableBots}`); + this.putGameConfig(); + } + + private async handleDisableNPCsChange(e: Event) { + this.disableNPCs = Boolean((e.target as HTMLInputElement).checked); + consolex.log(`updating disable npcs to ${this.disableNPCs}`); + this.putGameConfig(); + } + private async putGameConfig() { const response = await fetch(`/private_lobby/${this.lobbyId}`, { method: "PUT", @@ -235,6 +267,8 @@ export class HostLobbyModal extends LitElement { body: JSON.stringify({ gameMap: this.selectedMap, difficulty: this.selectedDiffculty, + disableBots: this.disableBots, + disableNPCs: this.disableNPCs, }), }); } diff --git a/src/client/Main.ts b/src/client/Main.ts index dede86905..52b586cff 100644 --- a/src/client/Main.ts +++ b/src/client/Main.ts @@ -95,6 +95,8 @@ class Client { clientID: generateID(), map: event.detail.map, difficulty: event.detail.difficulty, + disableBots: event.detail.disableBots, + disableNPCs: event.detail.disableNPCs, }, () => this.joinModal.close() ); diff --git a/src/client/SinglePlayerModal.ts b/src/client/SinglePlayerModal.ts index cc3f98480..9645b25f3 100644 --- a/src/client/SinglePlayerModal.ts +++ b/src/client/SinglePlayerModal.ts @@ -9,6 +9,8 @@ export class SinglePlayerModal extends LitElement { @state() private isModalOpen = false; @state() private selectedMap: GameMapType = GameMapType.World; @state() private selectedDifficulty: Difficulty = Difficulty.Medium; + @state() private disableNPCs = false; + @state() private disableBots = false; static styles = css` .modal-overlay { @@ -115,6 +117,22 @@ export class SinglePlayerModal extends LitElement { )}