diff --git a/src/client/InputHandler.ts b/src/client/InputHandler.ts index bdf80997c..522536cb9 100644 --- a/src/client/InputHandler.ts +++ b/src/client/InputHandler.ts @@ -48,6 +48,8 @@ export class AlternateViewEvent implements GameEvent { constructor(public readonly alternateView: boolean) {} } +export class CloseViewEvent implements GameEvent {} + export class RefreshGraphicsEvent implements GameEvent {} export class ShowBuildMenuEvent implements GameEvent { @@ -149,6 +151,11 @@ export class InputHandler { } } + if (e.code === "Escape") { + e.preventDefault(); + this.eventBus.emit(new CloseViewEvent()); + } + // Add all movement keys to activeKeys if ( [ diff --git a/src/client/graphics/layers/RadialMenu.ts b/src/client/graphics/layers/RadialMenu.ts index 9d963703b..88d861aa6 100644 --- a/src/client/graphics/layers/RadialMenu.ts +++ b/src/client/graphics/layers/RadialMenu.ts @@ -8,6 +8,7 @@ import { } from "../../../core/game/Game"; import { ClientID } from "../../../core/Schemas"; import { + CloseViewEvent, ContextMenuEvent, MouseUpEvent, ShowBuildMenuEvent, @@ -123,9 +124,22 @@ export class RadialMenu implements Layer { } this.buildMenu.showMenu(tile); }); + + this.eventBus.on(CloseViewEvent, () => this.closeMenu()); + this.createMenuElement(); } + private closeMenu() { + if (this.isVisible) { + this.hideRadialMenu(); + } + + if (this.buildMenu.isVisible) { + this.buildMenu.hideMenu(); + } + } + private createMenuElement() { this.menuElement = d3 .select(document.body)