From 6e5b46ea5ef628ed9679fc042533c875258867f1 Mon Sep 17 00:00:00 2001 From: Sense101 <67970865+Sense101@users.noreply.github.com> Date: Fri, 25 Jun 2021 12:46:53 +0100 Subject: [PATCH] cleaned up the clear buildings button code and renamed it to reset puzzle in all modes --- src/js/game/buildings/block.js | 8 ++++++++ src/js/game/buildings/constant_producer.js | 8 ++++++++ src/js/game/buildings/goal_acceptor.js | 8 ++++++++ src/js/game/hud/parts/mass_selector.js | 3 --- .../game/hud/parts/puzzle_editor_settings.js | 20 ++++++++----------- src/js/game/hud/parts/puzzle_play_settings.js | 20 ++++++++----------- src/js/game/meta_building.js | 9 +++++++++ translations/base-en.yaml | 1 - 8 files changed, 49 insertions(+), 28 deletions(-) diff --git a/src/js/game/buildings/block.js b/src/js/game/buildings/block.js index d6499648..0be49468 100644 --- a/src/js/game/buildings/block.js +++ b/src/js/game/buildings/block.js @@ -22,6 +22,14 @@ export class MetaBlockBuilding extends MetaBuilding { return root.gameMode.getIsEditor(); } + /** + * @param {import("../../savegame/savegame_serializer").GameRoot} root + * @returns {boolean} + */ + getIsPuzzleRemovable(root) { + return false; + } + /** * Creates the entity at the given location * @param {Entity} entity diff --git a/src/js/game/buildings/constant_producer.js b/src/js/game/buildings/constant_producer.js index c1c502d0..0337a665 100644 --- a/src/js/game/buildings/constant_producer.js +++ b/src/js/game/buildings/constant_producer.js @@ -26,6 +26,14 @@ export class MetaConstantProducerBuilding extends MetaBuilding { return root.gameMode.getIsEditor(); } + /** + * @param {import("../../savegame/savegame_serializer").GameRoot} root + * @returns {boolean} + */ + getIsPuzzleRemovable(root) { + return false; + } + /** * Creates the entity at the given location * @param {Entity} entity diff --git a/src/js/game/buildings/goal_acceptor.js b/src/js/game/buildings/goal_acceptor.js index dde720e3..ddc738f3 100644 --- a/src/js/game/buildings/goal_acceptor.js +++ b/src/js/game/buildings/goal_acceptor.js @@ -26,6 +26,14 @@ export class MetaGoalAcceptorBuilding extends MetaBuilding { return root.gameMode.getIsEditor(); } + /** + * @param {import("../../savegame/savegame_serializer").GameRoot} root + * @returns {boolean} + */ + getIsPuzzleRemovable(root) { + return false; + } + /** * Creates the entity at the given location * @param {Entity} entity diff --git a/src/js/game/hud/parts/mass_selector.js b/src/js/game/hud/parts/mass_selector.js index b8283d55..e826e411 100644 --- a/src/js/game/hud/parts/mass_selector.js +++ b/src/js/game/hud/parts/mass_selector.js @@ -1,6 +1,5 @@ import { globalConfig } from "../../../core/config"; import { DrawParameters } from "../../../core/draw_parameters"; -import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { createLogger } from "../../../core/logging"; import { STOP_PROPAGATION } from "../../../core/signal"; import { formatBigNumberFull } from "../../../core/utils"; @@ -8,8 +7,6 @@ import { Vector } from "../../../core/vector"; import { ACHIEVEMENTS } from "../../../platform/achievement_provider"; import { T } from "../../../translations"; import { Blueprint } from "../../blueprint"; -import { MetaBlockBuilding } from "../../buildings/block"; -import { MetaConstantProducerBuilding } from "../../buildings/constant_producer"; import { enumMouseButton } from "../../camera"; import { Component } from "../../component"; import { Entity } from "../../entity"; diff --git a/src/js/game/hud/parts/puzzle_editor_settings.js b/src/js/game/hud/parts/puzzle_editor_settings.js index 11b046bf..18595cab 100644 --- a/src/js/game/hud/parts/puzzle_editor_settings.js +++ b/src/js/game/hud/parts/puzzle_editor_settings.js @@ -1,14 +1,10 @@ /* typehints:start */ /* typehints:end */ import { globalConfig } from "../../../core/config"; -import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { createLogger } from "../../../core/logging"; import { Rectangle } from "../../../core/rectangle"; import { makeDiv } from "../../../core/utils"; import { T } from "../../../translations"; -import { MetaBlockBuilding } from "../../buildings/block"; -import { MetaConstantProducerBuilding } from "../../buildings/constant_producer"; -import { MetaGoalAcceptorBuilding } from "../../buildings/goal_acceptor"; import { StaticMapEntityComponent } from "../../components/static_map_entity"; import { PuzzleGameMode } from "../../modes/puzzle"; import { BaseHUDPart } from "../base_hud_part"; @@ -50,7 +46,7 @@ export class HUDPuzzleEditorSettings extends BaseHUDPart {
- +
` @@ -62,7 +58,7 @@ export class HUDPuzzleEditorSettings extends BaseHUDPart { bind(".zoneHeight .plus", () => this.modifyZone(0, 1)); bind("button.trim", this.trim); bind("button.clearItems", this.clearItems); - bind("button.clearBuildings", this.clearBuildings); + bind("button.resetPuzzle", this.resetPuzzle); } } @@ -70,15 +66,15 @@ export class HUDPuzzleEditorSettings extends BaseHUDPart { this.root.logic.clearAllBeltsAndItems(); } - clearBuildings() { + resetPuzzle() { for (const entity of this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent)) { const staticComp = entity.components.StaticMapEntity; + const goalComp = entity.components.GoalAcceptor; - if ( - [MetaGoalAcceptorBuilding, MetaConstantProducerBuilding, MetaBlockBuilding] - .map(metaClass => gMetaBuildingRegistry.findByClass(metaClass).id) - .includes(staticComp.getMetaBuilding().id) - ) { + if (!staticComp.getMetaBuilding().getIsPuzzleRemovable(this.root)) { + if (goalComp) { + goalComp.clear(); + } continue; } diff --git a/src/js/game/hud/parts/puzzle_play_settings.js b/src/js/game/hud/parts/puzzle_play_settings.js index 8ae28166..654c3ea1 100644 --- a/src/js/game/hud/parts/puzzle_play_settings.js +++ b/src/js/game/hud/parts/puzzle_play_settings.js @@ -1,10 +1,6 @@ -import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { createLogger } from "../../../core/logging"; import { makeDiv } from "../../../core/utils"; import { T } from "../../../translations"; -import { MetaBlockBuilding } from "../../buildings/block"; -import { MetaConstantProducerBuilding } from "../../buildings/constant_producer"; -import { MetaGoalAcceptorBuilding } from "../../buildings/goal_acceptor"; import { StaticMapEntityComponent } from "../../components/static_map_entity"; import { BaseHUDPart } from "../base_hud_part"; @@ -23,13 +19,13 @@ export class HUDPuzzlePlaySettings extends BaseHUDPart { ["section"], ` - + ` ); bind("button.clearItems", this.clearItems); - bind("button.clearBuildings", this.clearBuildings); + bind("button.resetPuzzle", this.resetPuzzle); } } @@ -37,15 +33,15 @@ export class HUDPuzzlePlaySettings extends BaseHUDPart { this.root.logic.clearAllBeltsAndItems(); } - clearBuildings() { + resetPuzzle() { for (const entity of this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent)) { const staticComp = entity.components.StaticMapEntity; + const goalComp = entity.components.GoalAcceptor; - if ( - [MetaGoalAcceptorBuilding, MetaConstantProducerBuilding, MetaBlockBuilding] - .map(metaClass => gMetaBuildingRegistry.findByClass(metaClass).id) - .includes(staticComp.getMetaBuilding().id) - ) { + if (!staticComp.getMetaBuilding().getIsPuzzleRemovable(this.root)) { + if (goalComp) { + goalComp.clear(); + } continue; } diff --git a/src/js/game/meta_building.js b/src/js/game/meta_building.js index 7bfbce25..807c22cf 100644 --- a/src/js/game/meta_building.js +++ b/src/js/game/meta_building.js @@ -115,6 +115,15 @@ export class MetaBuilding { return true; } + /** + * Returns whether this building is removable in puzzle mode + * @param {GameRoot} root + * @returns {boolean} + */ + getIsPuzzleRemovable(root) { + return true; + } + /** * Returns the placement sound * @returns {string} diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 02d8e948..12e13d61 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -632,7 +632,6 @@ ingame: zoneHeight: Height trimZone: Trim clearItems: Clear Items - clearBuildings: Clear Buildings resetPuzzle: Reset Puzzle share: Share report: Report