From febabf00db646496277b3c718b76fa60ab9c06d1 Mon Sep 17 00:00:00 2001 From: evanpelle Date: Wed, 13 Nov 2024 15:31:31 -0800 Subject: [PATCH] must build port before destroyer --- .../graphics/layers/radial/BuildMenu.ts | 38 ++++++++++++------- src/core/execution/NukeExecution.ts | 6 +-- src/core/game/Game.ts | 19 ++++++---- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/client/graphics/layers/radial/BuildMenu.ts b/src/client/graphics/layers/radial/BuildMenu.ts index 43ac74632..0f174e941 100644 --- a/src/client/graphics/layers/radial/BuildMenu.ts +++ b/src/client/graphics/layers/radial/BuildMenu.ts @@ -1,7 +1,7 @@ import { LitElement, html, css } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { EventBus } from '../../../../core/EventBus'; -import { Cell, Game, Item, Items, Player, UnitType } from '../../../../core/game/Game'; +import { Cell, Game, Item, BuildItems, Player, UnitType } from '../../../../core/game/Game'; import { BuildUnitIntentEvent as BuildItemIntentEvent, BuildUnitIntentEvent, SendNukeIntentEvent } from '../../../Transport'; import nukeIcon from '../../../../../resources/images/NukeIconWhite.svg'; import destroyerIcon from '../../../../../resources/images/DestroyerIconWhite.svg'; @@ -17,9 +17,9 @@ interface BuildItem { const buildTable: BuildItem[][] = [ [ - { item: Items.Nuke, icon: nukeIcon }, - { item: Items.Destroyer, icon: destroyerIcon }, - { item: Items.Port, icon: portIcon } + { item: BuildItems.Nuke, icon: nukeIcon }, + { item: BuildItems.Destroyer, icon: destroyerIcon }, + { item: BuildItems.Port, icon: portIcon } ] ]; @@ -145,19 +145,29 @@ export class BuildMenu extends LitElement { @state() private _hidden = true; - private canAfford(item: BuildItem): boolean { - return this.myPlayer && this.myPlayer.gold() >= item.item.cost; + private canBuild(item: BuildItem): boolean { + if (!this.myPlayer || this.myPlayer.gold() < item.item.cost) { + return false + } + switch (item.item) { + case BuildItems.Destroyer: + return this.myPlayer.units(UnitType.Port).length > 0 + default: + return true + } } public onBuildSelected = (item: BuildItem) => { - switch (item.item.name) { - case "Nuke": + switch (item.item) { + case BuildItems.Nuke: this.eventBus.emit(new SendNukeIntentEvent(this.myPlayer, this.clickedCell, null)) break - case "Destroyer": + case BuildItems.Destroyer: this.eventBus.emit(new BuildUnitIntentEvent(UnitType.Destroyer, this.clickedCell)) - case "Port": + break + case BuildItems.Port: this.eventBus.emit(new BuildUnitIntentEvent(UnitType.Port, this.clickedCell)) + break } this.hideMenu() }; @@ -171,11 +181,11 @@ export class BuildMenu extends LitElement {