diff --git a/src/js/game/base_item.js b/src/js/game/base_item.js index 061681c0..61dc3f34 100644 --- a/src/js/game/base_item.js +++ b/src/js/game/base_item.js @@ -1,12 +1,8 @@ import { DrawParameters } from "../core/draw_parameters"; import { BasicSerializableObject } from "../savegame/serialization"; -/** @enum {string} */ -export const enumItemType = { - shape: "shape", - color: "color", - boolean: "boolean", -}; +/** @type {ItemType[]} **/ +export const itemTypes = ["shape", "color", "boolean"]; /** * Class for items on belts etc. Not an entity for performance reasons @@ -25,10 +21,10 @@ export class BaseItem extends BasicSerializableObject { return {}; } - /** @returns {enumItemType} */ + /** @returns {ItemType} **/ getItemType() { abstract; - return ""; + return "shape"; } /** diff --git a/src/js/game/belt_path.js b/src/js/game/belt_path.js index fc062bcc..9e665487 100644 --- a/src/js/game/belt_path.js +++ b/src/js/game/belt_path.js @@ -8,7 +8,7 @@ import { BasicSerializableObject, types } from "../savegame/serialization"; import { BaseItem } from "./base_item"; import { Entity } from "./entity"; import { typeItemSingleton } from "./item_resolver"; -import { enumLayer, GameRoot } from "./root"; +import { GameRoot } from "./root"; const logger = createLogger("belt_path"); @@ -203,7 +203,7 @@ export class BeltPath extends BasicSerializableObject { const targetEntity = this.root.map.getLayerContentXY( ejectSlotTargetWsTile.x, ejectSlotTargetWsTile.y, - enumLayer.regular + "regular" ); if (targetEntity) { diff --git a/src/js/game/blueprint.js b/src/js/game/blueprint.js index ecffdc31..dc30554d 100644 --- a/src/js/game/blueprint.js +++ b/src/js/game/blueprint.js @@ -3,7 +3,7 @@ import { Loader } from "../core/loader"; import { createLogger } from "../core/logging"; import { Vector } from "../core/vector"; import { Entity } from "./entity"; -import { GameRoot, enumLayer } from "./root"; +import { GameRoot } from "./root"; import { findNiceIntegerValue } from "../core/utils"; import { blueprintShape } from "./upgrades"; import { globalConfig } from "../core/config"; @@ -20,11 +20,11 @@ export class Blueprint { /** * Returns the layer of this blueprint - * @returns {enumLayer} + * @returns {Layer} */ get layer() { if (this.entities.length === 0) { - return enumLayer.regular; + return "regular"; } return this.entities[0].layer; } diff --git a/src/js/game/buildings/belt_base.js b/src/js/game/buildings/belt_base.js index 059591ce..1aafa9e1 100644 --- a/src/js/game/buildings/belt_base.js +++ b/src/js/game/buildings/belt_base.js @@ -89,7 +89,7 @@ export class MetaBeltBaseBuilding extends MetaBuilding { * @param {Vector} param0.tile * @param {number} param0.rotation * @param {string} param0.variant - * @param {string} param0.layer + * @param {Layer} param0.layer * @return {{ rotation: number, rotationVariant: number, connectedEntities?: Array }} */ computeOptimalDirectionAndRotationVariantAtTile({ root, tile, rotation, variant, layer }) { diff --git a/src/js/game/buildings/constant_signal.js b/src/js/game/buildings/constant_signal.js index 5c88248f..93e0ab36 100644 --- a/src/js/game/buildings/constant_signal.js +++ b/src/js/game/buildings/constant_signal.js @@ -2,7 +2,7 @@ import { enumDirection, Vector } from "../../core/vector"; import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins"; import { Entity } from "../entity"; import { MetaBuilding } from "../meta_building"; -import { enumLayer, GameRoot } from "../root"; +import { GameRoot } from "../root"; import { ConstantSignalComponent } from "../components/constant_signal"; export class MetaConstantSignalBuilding extends MetaBuilding { @@ -22,8 +22,9 @@ export class MetaConstantSignalBuilding extends MetaBuilding { return true; } + /** @returns {"wires"} **/ getLayer() { - return enumLayer.wires; + return "wires"; } getDimensions() { diff --git a/src/js/game/buildings/cutter.js b/src/js/game/buildings/cutter.js index bfe142d5..739f4a05 100644 --- a/src/js/game/buildings/cutter.js +++ b/src/js/game/buildings/cutter.js @@ -8,7 +8,6 @@ import { Entity } from "../entity"; import { defaultBuildingVariant, MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; import { enumHubGoalRewards } from "../tutorial_goals"; -import { enumItemType } from "../base_item"; /** @enum {string} */ export const enumCutterVariants = { quad: "quad" }; @@ -82,7 +81,7 @@ export class MetaCutterBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.bottom], - filter: enumItemType.shape, + filter: "shape", }, ], }) diff --git a/src/js/game/buildings/hub.js b/src/js/game/buildings/hub.js index c11c9197..b9929b31 100644 --- a/src/js/game/buildings/hub.js +++ b/src/js/game/buildings/hub.js @@ -1,5 +1,4 @@ import { enumDirection, Vector } from "../../core/vector"; -import { enumItemType } from "../base_item"; import { HubComponent } from "../components/hub"; import { ItemAcceptorComponent } from "../components/item_acceptor"; import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor"; @@ -68,72 +67,72 @@ export class MetaHubBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.top, enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(1, 0), directions: [enumDirection.top], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(2, 0), directions: [enumDirection.top], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(3, 0), directions: [enumDirection.top, enumDirection.right], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(0, 3), directions: [enumDirection.bottom, enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(1, 3), directions: [enumDirection.bottom], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(2, 3), directions: [enumDirection.bottom], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(3, 3), directions: [enumDirection.bottom, enumDirection.right], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(0, 1), directions: [enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(0, 2), directions: [enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(0, 3), directions: [enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(3, 1), directions: [enumDirection.right], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(3, 2), directions: [enumDirection.right], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(3, 3), directions: [enumDirection.right], - filter: enumItemType.shape, + filter: "shape", }, ], }) diff --git a/src/js/game/buildings/logic_gate.js b/src/js/game/buildings/logic_gate.js index bc9c7777..e07db3ea 100644 --- a/src/js/game/buildings/logic_gate.js +++ b/src/js/game/buildings/logic_gate.js @@ -2,7 +2,7 @@ import { enumDirection, Vector } from "../../core/vector"; import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins"; import { Entity } from "../entity"; import { MetaBuilding, defaultBuildingVariant } from "../meta_building"; -import { enumLayer, GameRoot } from "../root"; +import { GameRoot } from "../root"; import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate"; /** @enum {string} */ @@ -39,8 +39,9 @@ export class MetaLogicGateBuilding extends MetaBuilding { return true; } + /** @returns {"wires"} **/ getLayer() { - return enumLayer.wires; + return "wires"; } getDimensions() { diff --git a/src/js/game/buildings/mixer.js b/src/js/game/buildings/mixer.js index a2b35280..cbde309e 100644 --- a/src/js/game/buildings/mixer.js +++ b/src/js/game/buildings/mixer.js @@ -1,7 +1,6 @@ import { formatItemsPerSecond } from "../../core/utils"; import { enumDirection, Vector } from "../../core/vector"; import { T } from "../../translations"; -import { enumItemType } from "../base_item"; import { ItemAcceptorComponent } from "../components/item_acceptor"; import { ItemEjectorComponent } from "../components/item_ejector"; import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor"; @@ -63,12 +62,12 @@ export class MetaMixerBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.bottom], - filter: enumItemType.color, + filter: "color", }, { pos: new Vector(1, 0), directions: [enumDirection.bottom], - filter: enumItemType.color, + filter: "color", }, ], }) diff --git a/src/js/game/buildings/painter.js b/src/js/game/buildings/painter.js index 61e77a7c..49c2ff69 100644 --- a/src/js/game/buildings/painter.js +++ b/src/js/game/buildings/painter.js @@ -8,7 +8,6 @@ import { Entity } from "../entity"; import { defaultBuildingVariant, MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; import { enumHubGoalRewards } from "../tutorial_goals"; -import { enumItemType } from "../base_item"; /** @enum {string} */ export const enumPainterVariants = { mirrored: "mirrored", double: "double", quad: "quad" }; @@ -98,12 +97,12 @@ export class MetaPainterBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(1, 0), directions: [enumDirection.top], - filter: enumItemType.color, + filter: "color", }, ], }) @@ -124,14 +123,14 @@ export class MetaPainterBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(1, 0), directions: [ variant === defaultBuildingVariant ? enumDirection.top : enumDirection.bottom, ], - filter: enumItemType.color, + filter: "color", }, ]); @@ -147,17 +146,17 @@ export class MetaPainterBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(0, 1), directions: [enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(1, 0), directions: [enumDirection.top], - filter: enumItemType.color, + filter: "color", }, ]); @@ -174,27 +173,27 @@ export class MetaPainterBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.left], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(0, 0), directions: [enumDirection.bottom], - filter: enumItemType.color, + filter: "color", }, { pos: new Vector(1, 0), directions: [enumDirection.bottom], - filter: enumItemType.color, + filter: "color", }, { pos: new Vector(2, 0), directions: [enumDirection.bottom], - filter: enumItemType.color, + filter: "color", }, { pos: new Vector(3, 0), directions: [enumDirection.bottom], - filter: enumItemType.color, + filter: "color", }, ]); diff --git a/src/js/game/buildings/rotater.js b/src/js/game/buildings/rotater.js index 45bb97b9..c278ef0d 100644 --- a/src/js/game/buildings/rotater.js +++ b/src/js/game/buildings/rotater.js @@ -8,7 +8,6 @@ import { Entity } from "../entity"; import { defaultBuildingVariant, MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; import { enumHubGoalRewards } from "../tutorial_goals"; -import { enumItemType } from "../base_item"; /** @enum {string} */ export const enumRotaterVariants = { ccw: "ccw", fl: "fl" }; @@ -89,7 +88,7 @@ export class MetaRotaterBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.bottom], - filter: enumItemType.shape, + filter: "shape", }, ], }) diff --git a/src/js/game/buildings/stacker.js b/src/js/game/buildings/stacker.js index 91ac3f62..40a9c5ae 100644 --- a/src/js/game/buildings/stacker.js +++ b/src/js/game/buildings/stacker.js @@ -8,7 +8,6 @@ import { Entity } from "../entity"; import { MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; import { enumHubGoalRewards } from "../tutorial_goals"; -import { enumItemType } from "../base_item"; export class MetaStackerBuilding extends MetaBuilding { constructor() { @@ -63,12 +62,12 @@ export class MetaStackerBuilding extends MetaBuilding { { pos: new Vector(0, 0), directions: [enumDirection.bottom], - filter: enumItemType.shape, + filter: "shape", }, { pos: new Vector(1, 0), directions: [enumDirection.bottom], - filter: enumItemType.shape, + filter: "shape", }, ], }) diff --git a/src/js/game/buildings/underground_belt.js b/src/js/game/buildings/underground_belt.js index 4b647c13..155b69e2 100644 --- a/src/js/game/buildings/underground_belt.js +++ b/src/js/game/buildings/underground_belt.js @@ -5,7 +5,7 @@ import { ItemEjectorComponent } from "../components/item_ejector"; import { enumUndergroundBeltMode, UndergroundBeltComponent } from "../components/underground_belt"; import { Entity } from "../entity"; import { MetaBuilding, defaultBuildingVariant } from "../meta_building"; -import { GameRoot, enumLayer } from "../root"; +import { GameRoot } from "../root"; import { globalConfig } from "../../core/config"; import { enumHubGoalRewards } from "../tutorial_goals"; import { formatItemsPerSecond, generateMatrixRotations } from "../../core/utils"; @@ -171,7 +171,7 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding { * @param {Vector} param0.tile * @param {number} param0.rotation * @param {string} param0.variant - * @param {string} param0.layer + * @param {Layer} param0.layer * @return {{ rotation: number, rotationVariant: number, connectedEntities?: Array }} */ computeOptimalDirectionAndRotationVariantAtTile({ root, tile, rotation, variant, layer }) { @@ -190,7 +190,7 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding { tile = tile.addScalars(searchVector.x, searchVector.y); /* WIRES: FIXME */ - const contents = root.map.getTileContent(tile, enumLayer.regular); + const contents = root.map.getTileContent(tile, "regular"); if (contents) { const undergroundComp = contents.components.UndergroundBelt; if (undergroundComp && undergroundComp.tier === tier) { diff --git a/src/js/game/buildings/wire.js b/src/js/game/buildings/wire.js index fa6e23a3..59c9cb7d 100644 --- a/src/js/game/buildings/wire.js +++ b/src/js/game/buildings/wire.js @@ -5,7 +5,7 @@ import { SOUNDS } from "../../platform/sound"; import { enumWireType, WireComponent } from "../components/wire"; import { Entity } from "../entity"; import { MetaBuilding } from "../meta_building"; -import { enumLayer, GameRoot } from "../root"; +import { GameRoot } from "../root"; export const arrayWireRotationVariantToType = [ enumWireType.regular, @@ -50,8 +50,9 @@ export class MetaWireBuilding extends MetaBuilding { return true; } + /** @returns {"wires"} **/ getLayer() { - return enumLayer.wires; + return "wires"; } getSprite() { diff --git a/src/js/game/buildings/wire_tunnel.js b/src/js/game/buildings/wire_tunnel.js index 80ab8799..f885abc6 100644 --- a/src/js/game/buildings/wire_tunnel.js +++ b/src/js/game/buildings/wire_tunnel.js @@ -1,7 +1,7 @@ import { Vector } from "../../core/vector"; import { Entity } from "../entity"; import { MetaBuilding, defaultBuildingVariant } from "../meta_building"; -import { GameRoot, enumLayer } from "../root"; +import { GameRoot } from "../root"; import { WireTunnelComponent } from "../components/wire_tunnel"; import { generateMatrixRotations } from "../../core/utils"; @@ -55,8 +55,9 @@ export class MetaWireTunnelBuilding extends MetaBuilding { return [defaultBuildingVariant, enumWireTunnelVariants.coating]; } + /** @returns {"wires"} **/ getLayer() { - return enumLayer.wires; + return "wires"; } getRotateAutomaticallyWhilePlacing() { diff --git a/src/js/game/components/item_acceptor.js b/src/js/game/components/item_acceptor.js index d4fdaf72..ebd7ae5f 100644 --- a/src/js/game/components/item_acceptor.js +++ b/src/js/game/components/item_acceptor.js @@ -1,12 +1,12 @@ import { enumDirection, enumInvertedDirections, Vector } from "../../core/vector"; import { types } from "../../savegame/serialization"; -import { BaseItem, enumItemType } from "../base_item"; +import { BaseItem } from "../base_item"; import { Component } from "../component"; /** @typedef {{ * pos: Vector, * directions: enumDirection[], - * filter?: enumItemType + * filter?: ItemType * }} ItemAcceptorSlot */ /** @@ -20,7 +20,7 @@ import { Component } from "../component"; /** @typedef {{ * pos: Vector, * directions: enumDirection[], - * filter?: enumItemType + * filter?: ItemType * }} ItemAcceptorSlotConfig */ export class ItemAcceptorComponent extends Component { @@ -74,7 +74,7 @@ export class ItemAcceptorComponent extends Component { pos: slot.pos, directions: slot.directions, - // Which type of item to accept (shape | color | all) @see enumItemType + // Which type of item to accept (shape | color | all) @see ItemType filter: slot.filter, }); } diff --git a/src/js/game/components/storage.js b/src/js/game/components/storage.js index 34e51f4b..3b32f6a3 100644 --- a/src/js/game/components/storage.js +++ b/src/js/game/components/storage.js @@ -1,5 +1,5 @@ import { types } from "../../savegame/serialization"; -import { BaseItem, enumItemType } from "../base_item"; +import { BaseItem } from "../base_item"; import { Component } from "../component"; import { typeItemSingleton } from "../item_resolver"; import { ColorItem } from "../items/color_item"; @@ -65,11 +65,11 @@ export class StorageComponent extends Component { return false; } - if (itemType === enumItemType.color) { + if (itemType === "color") { return /** @type {ColorItem} */ (this.storedItem).color === /** @type {ColorItem} */ (item).color; } - if (itemType === enumItemType.shape) { + if (itemType === "shape") { return ( /** @type {ShapeItem} */ (this.storedItem).definition.getHash() === /** @type {ShapeItem} */ (item).definition.getHash() diff --git a/src/js/game/core.js b/src/js/game/core.js index 0a8aaf7a..70d69c2c 100644 --- a/src/js/game/core.js +++ b/src/js/game/core.js @@ -26,7 +26,7 @@ import { GameLogic } from "./logic"; import { MapView } from "./map_view"; import { defaultBuildingVariant } from "./meta_building"; import { ProductionAnalytics } from "./production_analytics"; -import { enumLayer, GameRoot } from "./root"; +import { GameRoot } from "./root"; import { ShapeDefinitionManager } from "./shape_definition_manager"; import { SoundProxy } from "./sound_proxy"; import { GameTime } from "./time/game_time"; @@ -411,7 +411,7 @@ export class GameCore { // Green wires overlay root.hud.parts.wiresOverlay.draw(params); - if (this.root.currentLayer === enumLayer.wires) { + if (this.root.currentLayer === "wires") { // Static map entities root.map.drawWiresForegroundLayer(params); diff --git a/src/js/game/entity.js b/src/js/game/entity.js index d3a53e90..ca21a16d 100644 --- a/src/js/game/entity.js +++ b/src/js/game/entity.js @@ -3,7 +3,7 @@ import { DrawParameters } from "../core/draw_parameters"; import { Component } from "./component"; /* typehints:end */ -import { GameRoot, enumLayer } from "./root"; +import { GameRoot } from "./root"; import { globalConfig } from "../core/config"; import { enumDirectionToVector, enumDirectionToAngle } from "../core/vector"; import { BasicSerializableObject, types } from "../savegame/serialization"; @@ -36,8 +36,9 @@ export class Entity extends BasicSerializableObject { /** * On which layer this entity is + * @type {Layer} */ - this.layer = enumLayer.regular; + this.layer = "regular"; /** * Internal entity unique id, set by the @see EntityManager diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index d946ce51..8adee905 100644 --- a/src/js/game/hub_goals.js +++ b/src/js/game/hub_goals.js @@ -3,7 +3,7 @@ import { clamp, findNiceIntegerValue, randomChoice, randomInt } from "../core/ut import { BasicSerializableObject, types } from "../savegame/serialization"; import { enumColors } from "./colors"; import { enumItemProcessorTypes } from "./components/item_processor"; -import { GameRoot, enumLayer } from "./root"; +import { GameRoot } from "./root"; import { enumSubShape, ShapeDefinition } from "./shape_definition"; import { enumHubGoalRewards, tutorialGoals } from "./tutorial_goals"; import { UPGRADES } from "./upgrades"; diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 38341395..47bf1363 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -11,7 +11,6 @@ import { BaseHUDPart } from "../base_hud_part"; import { DynamicDomAttach } from "../dynamic_dom_attach"; import { Blueprint } from "../../blueprint"; import { SOUNDS } from "../../../platform/sound"; -import { enumLayer } from "../../root"; export class HUDBlueprintPlacer extends BaseHUDPart { createElements(parent) { @@ -60,7 +59,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { /** * Called when the layer was changed - * @param {enumLayer} layer + * @param {Layer} layer */ onEditModeChanged(layer) { // Check if the layer of the blueprint differs and thus we have to deselect it diff --git a/src/js/game/hud/parts/building_placer.js b/src/js/game/hud/parts/building_placer.js index a3d87dc6..013fcde4 100644 --- a/src/js/game/hud/parts/building_placer.js +++ b/src/js/game/hud/parts/building_placer.js @@ -18,7 +18,7 @@ import { THEME } from "../../theme"; import { DynamicDomAttach } from "../dynamic_dom_attach"; import { HUDBuildingPlacerLogic } from "./building_placer_logic"; import { makeOffscreenBuffer } from "../../../core/buffer_utils"; -import { enumLayer } from "../../root"; +import { layers } from "../../root"; import { getCodeFromBuildingData } from "../../building_codes"; export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { @@ -61,9 +61,9 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { this.currentInterpolatedCornerTile = new Vector(); this.lockIndicatorSprites = {}; - for (const layerId in enumLayer) { - this.lockIndicatorSprites[layerId] = this.makeLockIndicatorSprite(layerId); - } + layers.forEach(layer => { + this.lockIndicatorSprites[layer] = this.makeLockIndicatorSprite(layer); + }); // @@ -76,7 +76,7 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { /** * Makes the lock indicator sprite for the given layer - * @param {enumLayer} layer + * @param {Layer} layer */ makeLockIndicatorSprite(layer) { const dims = 48; diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index b010ff40..898801c0 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -12,7 +12,6 @@ import { BaseHUDPart } from "../base_hud_part"; import { SOUNDS } from "../../../platform/sound"; import { MetaMinerBuilding, enumMinerVariants } from "../../buildings/miner"; import { enumHubGoalRewards } from "../../tutorial_goals"; -import { enumLayer } from "../../root"; import { getBuildingDataFromCode, getCodeFromBuildingData } from "../../building_codes"; import { MetaHubBuilding } from "../../buildings/hub"; @@ -133,12 +132,12 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { /** * Called when the edit mode got changed - * @param {enumLayer} editMode + * @param {Layer} layer */ - onEditModeChanged(editMode) { + onEditModeChanged(layer) { const metaBuilding = this.currentMetaBuilding.get(); if (metaBuilding) { - if (metaBuilding.getLayer() !== editMode) { + if (metaBuilding.getLayer() !== layer) { // This layer doesn't fit the edit mode anymore this.currentMetaBuilding.set(null); } diff --git a/src/js/game/hud/parts/buildings_toolbar.js b/src/js/game/hud/parts/buildings_toolbar.js index be46f239..8c05ab70 100644 --- a/src/js/game/hud/parts/buildings_toolbar.js +++ b/src/js/game/hud/parts/buildings_toolbar.js @@ -8,7 +8,6 @@ import { MetaSplitterBuilding } from "../../buildings/splitter"; import { MetaStackerBuilding } from "../../buildings/stacker"; import { MetaTrashBuilding } from "../../buildings/trash"; import { MetaUndergroundBeltBuilding } from "../../buildings/underground_belt"; -import { enumLayer } from "../../root"; import { HUDBaseToolbar } from "./base_toolbar"; import { MetaLeverBuilding } from "../../buildings/lever"; import { MetaFilterBuilding } from "../../buildings/filter"; @@ -35,7 +34,7 @@ export class HUDBuildingsToolbar extends HUDBaseToolbar { super(root, { supportedBuildings, visibilityCondition: () => - !this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === enumLayer.regular, + !this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === "regular", htmlElementId: "ingame_HUD_buildings_toolbar", }); } diff --git a/src/js/game/hud/parts/color_blind_helper.js b/src/js/game/hud/parts/color_blind_helper.js index 46890979..e5572228 100644 --- a/src/js/game/hud/parts/color_blind_helper.js +++ b/src/js/game/hud/parts/color_blind_helper.js @@ -7,8 +7,6 @@ import { DrawParameters } from "../../../core/draw_parameters"; import { THEME } from "../../theme"; import { globalConfig } from "../../../core/config"; import { T } from "../../../translations"; -import { enumItemType } from "../../base_item"; -import { enumLayer } from "../../root"; export class HUDColorBlindHelper extends BaseHUDPart { createElements(parent) { @@ -41,7 +39,7 @@ export class HUDColorBlindHelper extends BaseHUDPart { return null; } - if (this.root.currentLayer !== enumLayer.regular) { + if (this.root.currentLayer !== "regular") { // Not in regular mode return null; } @@ -56,7 +54,7 @@ export class HUDColorBlindHelper extends BaseHUDPart { // Check if the belt has a color item if (beltComp) { const item = beltComp.assignedPath.findItemAtTile(tile); - if (item && item.getItemType() === enumItemType.color) { + if (item && item.getItemType() === "color") { return /** @type {ColorItem} */ (item).color; } } @@ -66,7 +64,7 @@ export class HUDColorBlindHelper extends BaseHUDPart { if (ejectorComp) { for (let i = 0; i < ejectorComp.slots.length; ++i) { const slot = ejectorComp.slots[i]; - if (slot.item && slot.item.getItemType() === enumItemType.color) { + if (slot.item && slot.item.getItemType() === "color") { return /** @type {ColorItem} */ (slot.item).color; } } @@ -74,7 +72,7 @@ export class HUDColorBlindHelper extends BaseHUDPart { } else { // We hovered a lower layer, show the color there const lowerLayer = this.root.map.getLowerLayerContentXY(tile.x, tile.y); - if (lowerLayer && lowerLayer.getItemType() === enumItemType.color) { + if (lowerLayer && lowerLayer.getItemType() === "color") { return /** @type {ColorItem} */ (lowerLayer).color; } } diff --git a/src/js/game/hud/parts/layer_preview.js b/src/js/game/hud/parts/layer_preview.js index cc66a817..36e0ea58 100644 --- a/src/js/game/hud/parts/layer_preview.js +++ b/src/js/game/hud/parts/layer_preview.js @@ -3,7 +3,6 @@ import { globalConfig } from "../../../core/config"; import { Loader } from "../../../core/loader"; import { Vector } from "../../../core/vector"; import { MapChunkView } from "../../map_chunk_view"; -import { enumLayer } from "../../root"; import { THEME } from "../../theme"; import { BaseHUDPart } from "../base_hud_part"; @@ -76,7 +75,7 @@ export class HUDLayerPreview extends BaseHUDPart { const tileX = dx + startTileX; const tileY = dy + startTileY; - const content = this.root.map.getLayerContentXY(tileX, tileY, enumLayer.wires); + const content = this.root.map.getLayerContentXY(tileX, tileY, "wires"); if (content) { MapChunkView.drawSingleWiresOverviewTile({ context: this.context, @@ -104,7 +103,7 @@ export class HUDLayerPreview extends BaseHUDPart { * @param {number} scale 1 / zoomLevel */ renderPreview(parameters, worldPos, scale) { - if (this.root.currentLayer !== enumLayer.regular) { + if (this.root.currentLayer !== "regular") { // Only supporting wires right now return; } diff --git a/src/js/game/hud/parts/lever_toggle.js b/src/js/game/hud/parts/lever_toggle.js index 8458022f..1859f7ab 100644 --- a/src/js/game/hud/parts/lever_toggle.js +++ b/src/js/game/hud/parts/lever_toggle.js @@ -1,7 +1,6 @@ import { STOP_PROPAGATION } from "../../../core/signal"; import { Vector } from "../../../core/vector"; import { enumMouseButton } from "../../camera"; -import { enumLayer } from "../../root"; import { BaseHUDPart } from "../base_hud_part"; export class HUDLeverToggle extends BaseHUDPart { @@ -15,7 +14,7 @@ export class HUDLeverToggle extends BaseHUDPart { */ downPreHandler(pos, button) { const tile = this.root.camera.screenToWorld(pos).toTileSpace(); - const contents = this.root.map.getLayerContentXY(tile.x, tile.y, enumLayer.regular); + const contents = this.root.map.getLayerContentXY(tile.x, tile.y, "regular"); if (contents) { const leverComp = contents.components.Lever; if (leverComp) { diff --git a/src/js/game/hud/parts/wire_info.js b/src/js/game/hud/parts/wire_info.js index a4e03fbb..f73d53d7 100644 --- a/src/js/game/hud/parts/wire_info.js +++ b/src/js/game/hud/parts/wire_info.js @@ -1,6 +1,5 @@ import { globalConfig } from "../../../core/config"; import { MapChunkView } from "../../map_chunk_view"; -import { enumLayer } from "../../root"; import { WireNetwork } from "../../systems/wire"; import { THEME } from "../../theme"; import { BaseHUDPart } from "../base_hud_part"; @@ -17,7 +16,7 @@ export class HUDWireInfo extends BaseHUDPart { * @param {import("../../../core/draw_utils").DrawParameters} parameters */ drawOverlays(parameters) { - if (this.root.currentLayer !== enumLayer.wires) { + if (this.root.currentLayer !== "wires") { // Not in the wires layer return; } @@ -30,7 +29,7 @@ export class HUDWireInfo extends BaseHUDPart { const worldPos = this.root.camera.screenToWorld(mousePos); const tile = worldPos.toTileSpace(); - const entity = this.root.map.getLayerContentXY(tile.x, tile.y, enumLayer.wires); + const entity = this.root.map.getLayerContentXY(tile.x, tile.y, "wires"); if (!entity) { // No entity diff --git a/src/js/game/hud/parts/wires_overlay.js b/src/js/game/hud/parts/wires_overlay.js index 10652e11..364002fd 100644 --- a/src/js/game/hud/parts/wires_overlay.js +++ b/src/js/game/hud/parts/wires_overlay.js @@ -2,7 +2,6 @@ import { makeOffscreenBuffer } from "../../../core/buffer_utils"; import { globalConfig } from "../../../core/config"; import { DrawParameters } from "../../../core/draw_parameters"; import { KEYMAPPINGS } from "../../key_action_mapper"; -import { enumLayer } from "../../root"; import { THEME } from "../../theme"; import { BaseHUDPart } from "../base_hud_part"; import { Loader } from "../../../core/loader"; @@ -26,10 +25,10 @@ export class HUDWiresOverlay extends BaseHUDPart { * Switches between layers */ switchLayers() { - if (this.root.currentLayer === enumLayer.regular) { - this.root.currentLayer = enumLayer.wires; + if (this.root.currentLayer === "regular") { + this.root.currentLayer = "wires"; } else { - this.root.currentLayer = enumLayer.regular; + this.root.currentLayer = "regular"; } this.root.signals.editModeChanged.dispatch(this.root.currentLayer); } @@ -51,7 +50,7 @@ export class HUDWiresOverlay extends BaseHUDPart { } update() { - const desiredAlpha = this.root.currentLayer === enumLayer.wires ? 1.0 : 0.0; + const desiredAlpha = this.root.currentLayer === "wires" ? 1.0 : 0.0; this.currentAlpha = lerp(this.currentAlpha, desiredAlpha, 0.12); } diff --git a/src/js/game/hud/parts/wires_toolbar.js b/src/js/game/hud/parts/wires_toolbar.js index 35ed21e8..542218e2 100644 --- a/src/js/game/hud/parts/wires_toolbar.js +++ b/src/js/game/hud/parts/wires_toolbar.js @@ -1,4 +1,3 @@ -import { enumLayer } from "../../root"; import { HUDBaseToolbar } from "./base_toolbar"; import { MetaWireBuilding } from "../../buildings/wire"; import { MetaConstantSignalBuilding } from "../../buildings/constant_signal"; @@ -19,7 +18,7 @@ export class HUDWiresToolbar extends HUDBaseToolbar { super(root, { supportedBuildings, visibilityCondition: () => - !this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === enumLayer.wires, + !this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === "wires", htmlElementId: "ingame_HUD_wires_toolbar", }); } diff --git a/src/js/game/hud/trailer_maker.js b/src/js/game/hud/trailer_maker.js index cb81aab3..8655def4 100644 --- a/src/js/game/hud/trailer_maker.js +++ b/src/js/game/hud/trailer_maker.js @@ -1,4 +1,4 @@ -import { GameRoot, enumLayer } from "../root"; +import { GameRoot } from "../root"; import { globalConfig } from "../../core/config"; import { Vector, mixVector } from "../../core/vector"; import { lerp } from "../../core/utils"; diff --git a/src/js/game/items/boolean_item.js b/src/js/game/items/boolean_item.js index 971defc5..57342bde 100644 --- a/src/js/game/items/boolean_item.js +++ b/src/js/game/items/boolean_item.js @@ -1,7 +1,7 @@ import { DrawParameters } from "../../core/draw_parameters"; import { Loader } from "../../core/loader"; import { types } from "../../savegame/serialization"; -import { BaseItem, enumItemType } from "../base_item"; +import { BaseItem } from "../base_item"; export class BooleanItem extends BaseItem { static getId() { @@ -20,8 +20,9 @@ export class BooleanItem extends BaseItem { this.value = data; } + /** @returns {"boolean"} **/ getItemType() { - return enumItemType.boolean; + return "boolean"; } /** diff --git a/src/js/game/items/color_item.js b/src/js/game/items/color_item.js index c62e6f6b..76a1e1d0 100644 --- a/src/js/game/items/color_item.js +++ b/src/js/game/items/color_item.js @@ -2,7 +2,7 @@ import { globalConfig } from "../../core/config"; import { smoothenDpi } from "../../core/dpi_manager"; import { DrawParameters } from "../../core/draw_parameters"; import { types } from "../../savegame/serialization"; -import { BaseItem, enumItemType } from "../base_item"; +import { BaseItem } from "../base_item"; import { enumColors, enumColorsToHexCode } from "../colors"; import { THEME } from "../theme"; @@ -23,8 +23,9 @@ export class ColorItem extends BaseItem { this.color = data; } + /** @returns {"color"} **/ getItemType() { - return enumItemType.color; + return "color"; } /** diff --git a/src/js/game/items/shape_item.js b/src/js/game/items/shape_item.js index 7248c581..44081cab 100644 --- a/src/js/game/items/shape_item.js +++ b/src/js/game/items/shape_item.js @@ -1,6 +1,6 @@ import { DrawParameters } from "../../core/draw_parameters"; import { types } from "../../savegame/serialization"; -import { BaseItem, enumItemType } from "../base_item"; +import { BaseItem } from "../base_item"; import { ShapeDefinition } from "../shape_definition"; import { THEME } from "../theme"; @@ -21,8 +21,9 @@ export class ShapeItem extends BaseItem { this.definition = ShapeDefinition.fromShortKey(data); } + /** @returns {"shape"} **/ getItemType() { - return enumItemType.shape; + return "shape"; } /** diff --git a/src/js/game/logic.js b/src/js/game/logic.js index 48e47c3a..ce4d18a5 100644 --- a/src/js/game/logic.js +++ b/src/js/game/logic.js @@ -5,7 +5,7 @@ import { enumDirection, enumDirectionToVector, enumInvertedDirections, Vector } import { getBuildingDataFromCode } from "./building_codes"; import { Entity } from "./entity"; import { MetaBuilding } from "./meta_building"; -import { enumLayer, GameRoot } from "./root"; +import { GameRoot } from "./root"; import { WireNetwork } from "./systems/wire"; import { globalConfig } from "../core/config"; import { CHUNK_OVERLAY_RES } from "./map_chunk_view"; @@ -347,7 +347,7 @@ export class GameLogic { } // Now check if there's a connectable wire - const targetEntity = this.root.map.getTileContent(tile, enumLayer.wires); + const targetEntity = this.root.map.getTileContent(tile, "wires"); if (!targetEntity) { return enumWireEdgeFlag.empty; } @@ -401,7 +401,7 @@ export class GameLogic { continue; } - const entity = this.root.map.getLayerContentXY(tile.x + dx, tile.y + dy, enumLayer.regular); + const entity = this.root.map.getLayerContentXY(tile.x + dx, tile.y + dy, "regular"); if (entity) { let ejectorSlots = []; let acceptorSlots = []; diff --git a/src/js/game/map.js b/src/js/game/map.js index f818bc46..5ff51ce8 100644 --- a/src/js/game/map.js +++ b/src/js/game/map.js @@ -4,7 +4,7 @@ import { BasicSerializableObject, types } from "../savegame/serialization"; import { BaseItem } from "./base_item"; import { Entity } from "./entity"; import { MapChunkView } from "./map_chunk_view"; -import { enumLayer, GameRoot } from "./root"; +import { GameRoot } from "./root"; export class BaseMap extends BasicSerializableObject { static getId() { @@ -94,7 +94,7 @@ export class BaseMap extends BasicSerializableObject { /** * Returns the tile content of a given tile * @param {Vector} tile - * @param {enumLayer} layer + * @param {Layer} layer * @returns {Entity} Entity or null */ getTileContent(tile, layer) { @@ -119,7 +119,7 @@ export class BaseMap extends BasicSerializableObject { * Returns the tile content of a given tile * @param {number} x * @param {number} y - * @param {enumLayer} layer + * @param {Layer} layer * @returns {Entity} Entity or null */ getLayerContentXY(x, y, layer) { @@ -144,7 +144,7 @@ export class BaseMap extends BasicSerializableObject { /** * Checks if the tile is used * @param {Vector} tile - * @param {enumLayer} layer + * @param {Layer} layer * @returns {boolean} */ isTileUsed(tile, layer) { @@ -159,7 +159,7 @@ export class BaseMap extends BasicSerializableObject { * Checks if the tile is used * @param {number} x * @param {number} y - * @param {enumLayer} layer + * @param {Layer} layer * @returns {boolean} */ isTileUsedXY(x, y, layer) { diff --git a/src/js/game/map_chunk.js b/src/js/game/map_chunk.js index 19fd73b4..54af1125 100644 --- a/src/js/game/map_chunk.js +++ b/src/js/game/map_chunk.js @@ -7,7 +7,7 @@ import { BaseItem } from "./base_item"; import { enumColors } from "./colors"; import { Entity } from "./entity"; import { COLOR_ITEM_SINGLETONS } from "./items/color_item"; -import { enumLayer, GameRoot } from "./root"; +import { GameRoot } from "./root"; import { enumSubShape } from "./shape_definition"; import { Rectangle } from "../core/rectangle"; @@ -70,11 +70,11 @@ export class MapChunk { /** * Which entities this chunk contains, sorted by layer - * @type {Object>} + * @type {Record>} */ this.containedEntitiesByLayer = { - [enumLayer.regular]: [], - [enumLayer.wires]: [], + regular: [], + wires: [], }; /** @@ -362,7 +362,7 @@ export class MapChunk { * Returns the contents of this chunk from the given world space coordinates * @param {number} worldX * @param {number} worldY - * @param {enumLayer} layer + * @param {Layer} layer * @returns {Entity=} */ getLayerContentFromWorldCoords(worldX, worldY, layer) { @@ -372,7 +372,7 @@ export class MapChunk { assert(localY >= 0, "Local Y is < 0"); assert(localX < globalConfig.mapChunkSize, "Local X is >= chunk size"); assert(localY < globalConfig.mapChunkSize, "Local Y is >= chunk size"); - if (layer === enumLayer.regular) { + if (layer === "regular") { return this.contents[localX][localY] || null; } else { return this.wireContents[localX][localY] || null; @@ -425,7 +425,7 @@ export class MapChunk { * @param {number} tileX * @param {number} tileY * @param {Entity=} contents - * @param {enumLayer} layer + * @param {Layer} layer */ setLayerContentFromWorldCords(tileX, tileY, contents, layer) { const localX = tileX - this.tileX; @@ -436,7 +436,7 @@ export class MapChunk { assert(localY < globalConfig.mapChunkSize, "Local Y is >= chunk size"); let oldContents; - if (layer === enumLayer.regular) { + if (layer === "regular") { oldContents = this.contents[localX][localY]; } else { oldContents = this.wireContents[localX][localY]; @@ -450,7 +450,7 @@ export class MapChunk { fastArrayDeleteValueIfContained(this.containedEntitiesByLayer[layer], oldContents); } - if (layer === enumLayer.regular) { + if (layer === "regular") { this.contents[localX][localY] = contents; } else { this.wireContents[localX][localY] = contents; diff --git a/src/js/game/map_chunk_view.js b/src/js/game/map_chunk_view.js index f7ce1064..c62a3401 100644 --- a/src/js/game/map_chunk_view.js +++ b/src/js/game/map_chunk_view.js @@ -3,7 +3,7 @@ import { DrawParameters } from "../core/draw_parameters"; import { getBuildingDataFromCode } from "./building_codes"; import { Entity } from "./entity"; import { MapChunk } from "./map_chunk"; -import { enumLayer, GameRoot } from "./root"; +import { GameRoot } from "./root"; import { THEME } from "./theme"; import { drawSpriteClipped } from "../core/draw_utils"; @@ -91,7 +91,7 @@ export class MapChunkView extends MapChunk { parameters.context.imageSmoothingEnabled = true; // Draw patch items - if (this.root.currentLayer === enumLayer.regular) { + if (this.root.currentLayer === "regular") { for (let i = 0; i < this.patches.length; ++i) { const patch = this.patches[i]; @@ -193,7 +193,7 @@ export class MapChunkView extends MapChunk { } } - if (this.root.currentLayer === enumLayer.wires) { + if (this.root.currentLayer === "wires") { // Draw wires overlay context.fillStyle = THEME.map.wires.overlayColor; diff --git a/src/js/game/meta_building.js b/src/js/game/meta_building.js index 21189d22..b09e901e 100644 --- a/src/js/game/meta_building.js +++ b/src/js/game/meta_building.js @@ -4,7 +4,7 @@ import { Vector } from "../core/vector"; import { SOUNDS } from "../platform/sound"; import { StaticMapEntityComponent } from "./components/static_map_entity"; import { Entity } from "./entity"; -import { enumLayer, GameRoot } from "./root"; +import { GameRoot } from "./root"; import { getCodeFromBuildingData } from "./building_codes"; export const defaultBuildingVariant = "default"; @@ -27,10 +27,10 @@ export class MetaBuilding { /** * Returns the edit layer of the building - * @returns {enumLayer} + * @returns {Layer} */ getLayer() { - return enumLayer.regular; + return "regular"; } /** @@ -236,7 +236,7 @@ export class MetaBuilding { * @param {Vector} param0.tile * @param {number} param0.rotation * @param {string} param0.variant - * @param {string} param0.layer + * @param {Layer} param0.layer * @return {{ rotation: number, rotationVariant: number, connectedEntities?: Array }} */ computeOptimalDirectionAndRotationVariantAtTile({ root, tile, rotation, variant, layer }) { diff --git a/src/js/game/production_analytics.js b/src/js/game/production_analytics.js index 41ec31ae..eda79c83 100644 --- a/src/js/game/production_analytics.js +++ b/src/js/game/production_analytics.js @@ -1,7 +1,7 @@ import { GameRoot } from "./root"; import { ShapeDefinition } from "./shape_definition"; import { globalConfig } from "../core/config"; -import { BaseItem, enumItemType } from "./base_item"; +import { BaseItem } from "./base_item"; import { ShapeItem } from "./items/shape_item"; import { BasicSerializableObject } from "../savegame/serialization"; @@ -53,7 +53,7 @@ export class ProductionAnalytics extends BasicSerializableObject { * @param {BaseItem} item */ onItemProduced(item) { - if (item.getItemType() === enumItemType.shape) { + if (item.getItemType() === "shape") { const definition = /** @type {ShapeItem} */ (item).definition; const key = definition.getHash(); const entry = this.history[enumAnalyticsDataSource.produced]; diff --git a/src/js/game/root.js b/src/js/game/root.js index 3279c693..dfb8025a 100644 --- a/src/js/game/root.js +++ b/src/js/game/root.js @@ -1,5 +1,4 @@ /* eslint-disable no-unused-vars */ - import { Signal } from "../core/signal"; import { RandomNumberGenerator } from "../core/rng"; import { createLogger } from "../core/logging"; @@ -32,14 +31,8 @@ import { Vector } from "../core/vector"; const logger = createLogger("game/root"); -/** @enum {string} */ -export const enumLayer = { - regular: "regular", - wires: "wires", -}; - -/** @type {Array} */ -export const arrayLayers = [enumLayer.regular, enumLayer.wires]; +/** @type {Array} */ +export const layers = ["regular", "wires"]; /** * The game root is basically the whole game state at a given point, @@ -134,8 +127,8 @@ export class GameRoot { /** @type {DynamicTickrate} */ this.dynamicTickrate = null; - /** @type {enumLayer} */ - this.currentLayer = enumLayer.regular; + /** @type {Layer} */ + this.currentLayer = "regular"; this.signals = { // Entities @@ -167,7 +160,7 @@ export class GameRoot { bulkOperationFinished: /** @type {TypedSignal<[]>} */ (new Signal()), - editModeChanged: /** @type {TypedSignal<[enumLayer]>} */ (new Signal()), + editModeChanged: /** @type {TypedSignal<[Layer]>} */ (new Signal()), // Called to check if an entity can be placed, second parameter is an additional offset. // Use to introduce additional placement checks diff --git a/src/js/game/systems/display.js b/src/js/game/systems/display.js index dd3493c1..6cdb8622 100644 --- a/src/js/game/systems/display.js +++ b/src/js/game/systems/display.js @@ -1,12 +1,11 @@ import { globalConfig } from "../../core/config"; import { Loader } from "../../core/loader"; -import { BaseItem, enumItemType } from "../base_item"; +import { BaseItem } from "../base_item"; import { enumColors } from "../colors"; import { DisplayComponent } from "../components/display"; import { GameSystemWithFilter } from "../game_system_with_filter"; import { ColorItem, COLOR_ITEM_SINGLETONS } from "../items/color_item"; import { MapChunkView } from "../map_chunk_view"; -import { enumLayer } from "../root"; import { BooleanItem } from "../items/boolean_item"; export class DisplaySystem extends GameSystemWithFilter { @@ -35,18 +34,18 @@ export class DisplaySystem extends GameSystemWithFilter { } switch (value.getItemType()) { - case enumItemType.boolean: { + case "boolean": { return /** @type {BooleanItem} */ (value).value ? COLOR_ITEM_SINGLETONS[enumColors.white] : null; } - case enumItemType.color: { + case "color": { const item = /**@type {ColorItem} */ (value); return item.color === enumColors.uncolored ? null : item; } - case enumItemType.shape: { + case "shape": { return value; } @@ -61,7 +60,7 @@ export class DisplaySystem extends GameSystemWithFilter { * @param {MapChunkView} chunk */ drawChunk(parameters, chunk) { - const contents = chunk.containedEntitiesByLayer[enumLayer.regular]; + const contents = chunk.containedEntitiesByLayer.regular; for (let i = 0; i < contents.length; ++i) { const entity = contents[i]; if (entity && entity.components.Display) { @@ -77,15 +76,15 @@ export class DisplaySystem extends GameSystemWithFilter { } const origin = entity.components.StaticMapEntity.origin; - if (value.getItemType() === enumItemType.color) { + if (value.getItemType() === "color") { this.displaySprites[/** @type {ColorItem} */ (value).color].drawCachedCentered( parameters, (origin.x + 0.5) * globalConfig.tileSize, (origin.y + 0.5) * globalConfig.tileSize, globalConfig.tileSize ); - } else if (value.getItemType() === enumItemType.shape) { - value.drawCentered( + } else if (value.getItemType() === "shape") { + value.draw( (origin.x + 0.5) * globalConfig.tileSize, (origin.y + 0.5) * globalConfig.tileSize, parameters, diff --git a/src/js/game/systems/item_acceptor.js b/src/js/game/systems/item_acceptor.js index 4d06f17e..b67bd867 100644 --- a/src/js/game/systems/item_acceptor.js +++ b/src/js/game/systems/item_acceptor.js @@ -5,7 +5,6 @@ import { enumDirectionToVector } from "../../core/vector"; import { ItemAcceptorComponent } from "../components/item_acceptor"; import { Entity } from "../entity"; import { GameSystemWithFilter } from "../game_system_with_filter"; -import { enumLayer } from "../root"; export class ItemAcceptorSystem extends GameSystemWithFilter { constructor(root) { diff --git a/src/js/game/systems/lever.js b/src/js/game/systems/lever.js index c8ebf1a2..fa727535 100644 --- a/src/js/game/systems/lever.js +++ b/src/js/game/systems/lever.js @@ -4,7 +4,6 @@ import { BOOL_TRUE_SINGLETON, BOOL_FALSE_SINGLETON } from "../items/boolean_item import { MapChunkView } from "../map_chunk_view"; import { globalConfig } from "../../core/config"; import { Loader } from "../../core/loader"; -import { enumLayer } from "../root"; export class LeverSystem extends GameSystemWithFilter { constructor(root) { @@ -32,7 +31,7 @@ export class LeverSystem extends GameSystemWithFilter { * @param {MapChunkView} chunk */ drawChunk(parameters, chunk) { - const contents = chunk.containedEntitiesByLayer[enumLayer.regular]; + const contents = chunk.containedEntitiesByLayer.regular; for (let i = 0; i < contents.length; ++i) { const entity = contents[i]; if (entity && entity.components.Lever) { diff --git a/src/js/game/systems/logic_gate.js b/src/js/game/systems/logic_gate.js index ed20ea69..9fe41250 100644 --- a/src/js/game/systems/logic_gate.js +++ b/src/js/game/systems/logic_gate.js @@ -1,6 +1,6 @@ import { LogicGateComponent, enumLogicGateType } from "../components/logic_gate"; import { GameSystemWithFilter } from "../game_system_with_filter"; -import { BaseItem, enumItemType } from "../base_item"; +import { BaseItem } from "../base_item"; import { enumPinSlotType } from "../components/wired_pins"; import { BOOL_TRUE_SINGLETON, BOOL_FALSE_SINGLETON, BooleanItem } from "../items/boolean_item"; import { enumItemProcessorTypes } from "../components/item_processor"; @@ -72,7 +72,7 @@ export class LogicGateSystem extends GameSystemWithFilter { return BOOL_FALSE_SINGLETON; } - if (itemType === enumItemType.boolean) { + if (itemType === "boolean") { return /** @type {BooleanItem} */ (param1).value && /** @type {BooleanItem} */ (param2).value ? BOOL_TRUE_SINGLETON : BOOL_FALSE_SINGLETON; @@ -91,7 +91,7 @@ export class LogicGateSystem extends GameSystemWithFilter { return BOOL_TRUE_SINGLETON; } - if (item.getItemType() !== enumItemType.boolean) { + if (item.getItemType() !== "boolean") { // Not a boolean actually return BOOL_FALSE_SINGLETON; } @@ -115,11 +115,11 @@ export class LogicGateSystem extends GameSystemWithFilter { } // Check for the right types - if (param1 && param1.getItemType() !== enumItemType.boolean) { + if (param1 && param1.getItemType() !== "boolean") { return BOOL_FALSE_SINGLETON; } - if (param2 && param2.getItemType() !== enumItemType.boolean) { + if (param2 && param2.getItemType() !== "boolean") { return BOOL_FALSE_SINGLETON; } @@ -144,13 +144,9 @@ export class LogicGateSystem extends GameSystemWithFilter { } const valueParam1 = - param1 && param1.getItemType() === enumItemType.boolean - ? /** @type {BooleanItem} */ (param1).value - : 0; + param1 && param1.getItemType() === "boolean" ? /** @type {BooleanItem} */ (param1).value : 0; const valueParam2 = - param2 && param2.getItemType() === enumItemType.boolean - ? /** @type {BooleanItem} */ (param2).value - : 0; + param2 && param2.getItemType() === "boolean" ? /** @type {BooleanItem} */ (param2).value : 0; return valueParam1 || valueParam2 ? BOOL_TRUE_SINGLETON : BOOL_FALSE_SINGLETON; } @@ -169,7 +165,7 @@ export class LogicGateSystem extends GameSystemWithFilter { return null; } - if (flag.getItemType() !== enumItemType.boolean) { + if (flag.getItemType() !== "boolean") { // Flag is not a boolean return null; } diff --git a/src/js/game/systems/miner.js b/src/js/game/systems/miner.js index b8fd6b5a..0f1fbc45 100644 --- a/src/js/game/systems/miner.js +++ b/src/js/game/systems/miner.js @@ -6,7 +6,6 @@ import { MinerComponent } from "../components/miner"; import { Entity } from "../entity"; import { GameSystemWithFilter } from "../game_system_with_filter"; import { MapChunkView } from "../map_chunk_view"; -import { enumLayer } from "../root"; export class MinerSystem extends GameSystemWithFilter { constructor(root) { @@ -75,7 +74,7 @@ export class MinerSystem extends GameSystemWithFilter { const ejectingDirection = staticComp.localDirectionToWorld(ejectingSlot.direction); const targetTile = ejectingPos.add(enumDirectionToVector[ejectingDirection]); - const targetContents = this.root.map.getTileContent(targetTile, enumLayer.regular); + const targetContents = this.root.map.getTileContent(targetTile, "regular"); // Check if we are connected to another miner and thus do not eject directly if (targetContents) { diff --git a/src/js/game/systems/underground_belt.js b/src/js/game/systems/underground_belt.js index 5bbb280c..90d29e50 100644 --- a/src/js/game/systems/underground_belt.js +++ b/src/js/game/systems/underground_belt.js @@ -13,7 +13,6 @@ import { enumUndergroundBeltMode, UndergroundBeltComponent } from "../components import { Entity } from "../entity"; import { GameSystemWithFilter } from "../game_system_with_filter"; import { fastArrayDelete } from "../../core/utils"; -import { enumLayer } from "../root"; const logger = createLogger("tunnels"); @@ -298,7 +297,7 @@ export class UndergroundBeltSystem extends GameSystemWithFilter { ) { currentTile = currentTile.add(searchVector); - const potentialReceiver = this.root.map.getTileContent(currentTile, enumLayer.regular); + const potentialReceiver = this.root.map.getTileContent(currentTile, "regular"); if (!potentialReceiver) { // Empty tile continue; diff --git a/src/js/game/systems/wire.js b/src/js/game/systems/wire.js index 17192093..19a2d8be 100644 --- a/src/js/game/systems/wire.js +++ b/src/js/game/systems/wire.js @@ -12,7 +12,8 @@ import { enumInvertedDirections, Vector, } from "../../core/vector"; -import { BaseItem, enumItemType } from "../base_item"; +import { BaseItem } from "../base_item"; +import { BooleanItem } from "../items/boolean_item"; import { arrayWireRotationVariantToType, MetaWireBuilding } from "../buildings/wire"; import { getCodeFromBuildingData } from "../building_codes"; import { enumWireType, WireComponent } from "../components/wire"; @@ -577,17 +578,17 @@ export class WireSystem extends GameSystemWithFilter { } const valueType = value.getItemType(); - if (valueType === enumItemType.shape) { + if (valueType === "shape") { return { spriteSet: this.wireSprites.shape, opacity: 1, }; - } else if (valueType === enumItemType.color) { + } else if (valueType === "color") { return { spriteSet: this.wireSprites.color, opacity: 1, }; - } else if (valueType === enumItemType.boolean) { + } else if (valueType === "boolean") { return { spriteSet: this.wireSprites.regular, opacity: /** @type {BooleanItem} */ (value).value ? 1 : 0.5, diff --git a/src/js/game/systems/wired_pins.js b/src/js/game/systems/wired_pins.js index c4ef1b6e..02e84372 100644 --- a/src/js/game/systems/wired_pins.js +++ b/src/js/game/systems/wired_pins.js @@ -5,7 +5,6 @@ import { Vector, enumDirectionToAngle } from "../../core/vector"; import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins"; import { Entity } from "../entity"; import { GameSystemWithFilter } from "../game_system_with_filter"; -import { enumLayer } from "../root"; import { STOP_PROPAGATION } from "../../core/signal"; import { drawRotatedSprite } from "../../core/draw_utils"; import { GLOBAL_APP } from "../../core/globals"; @@ -38,7 +37,7 @@ export class WiredPinsSystem extends GameSystemWithFilter { // If this entity is placed on the wires layer, make sure we don't // place it above a pin - if (entity.layer === enumLayer.wires) { + if (entity.layer === "wires") { for (let x = rect.x; x < rect.x + rect.w; ++x) { for (let y = rect.y; y < rect.y + rect.h; ++y) { // Find which entities are in same tiles of both layers @@ -103,7 +102,7 @@ export class WiredPinsSystem extends GameSystemWithFilter { } // Check if there is any entity on that tile (Wired pins are always on the wires layer) - const collidingEntity = this.root.map.getLayerContentXY(worldPos.x, worldPos.y, enumLayer.wires); + const collidingEntity = this.root.map.getLayerContentXY(worldPos.x, worldPos.y, "wires"); // If there's an entity, and it can't get removed -> That's a collision if (collidingEntity) { @@ -130,7 +129,7 @@ export class WiredPinsSystem extends GameSystemWithFilter { for (let i = 0; i < pinsComp.slots.length; ++i) { const slot = pinsComp.slots[i]; const worldPos = entity.components.StaticMapEntity.localTileToWorld(slot.pos); - const collidingEntity = this.root.map.getLayerContentXY(worldPos.x, worldPos.y, enumLayer.wires); + const collidingEntity = this.root.map.getLayerContentXY(worldPos.x, worldPos.y, "wires"); if (collidingEntity) { assertAlways( collidingEntity.components.StaticMapEntity.getMetaBuilding().getIsReplaceable(), diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts index 3f842e7e..51e4a2c3 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -193,6 +193,9 @@ declare interface TypedSignal> { removeAll(); } +declare type Layer = "regular" | "wires"; +declare type ItemType = "shape" | "color" | "boolean"; + declare module "worker-loader?inline=true&fallback=false!*" { class WebpackWorker extends Worker { constructor(); diff --git a/src/js/savegame/serialization_data_types.js b/src/js/savegame/serialization_data_types.js index 033acda1..9fb53bb8 100644 --- a/src/js/savegame/serialization_data_types.js +++ b/src/js/savegame/serialization_data_types.js @@ -456,7 +456,7 @@ export class TypeEnum extends BaseDataType { */ constructor(enumeration = {}) { super(); - this.availableValues = Object.keys(enumeration); + this.availableValues = Object.values(enumeration); } serialize(value) {