diff --git a/res_raw/sprites/blueprints/stacker-mirrored.png b/res_raw/sprites/blueprints/stacker-mirrored.png new file mode 100755 index 00000000..f01777b4 Binary files /dev/null and b/res_raw/sprites/blueprints/stacker-mirrored.png differ diff --git a/res_raw/sprites/buildings/stacker-mirrored.png b/res_raw/sprites/buildings/stacker-mirrored.png new file mode 100755 index 00000000..2240c20e Binary files /dev/null and b/res_raw/sprites/buildings/stacker-mirrored.png differ diff --git a/src/css/resources.scss b/src/css/resources.scss index 08bfa43f..1fd6df20 100644 --- a/src/css/resources.scss +++ b/src/css/resources.scss @@ -1,5 +1,5 @@ -$buildings: belt, cutter, miner, mixer, painter, rotater, balancer, stacker, trash, underground_belt, wire, - constant_signal, logic_gate, lever, filter, wire_tunnel, display, virtual_processor, reader, storage, +$buildings: belt, cutter, miner, mixer, painter, rotater, balancer, stacker, stacker-mirrored, trash, underground_belt, + wire, constant_signal, logic_gate, lever, filter, wire_tunnel, display, virtual_processor, reader, storage, transistor, analyzer, comparator, item_producer; @each $building in $buildings { @@ -9,8 +9,8 @@ $buildings: belt, cutter, miner, mixer, painter, rotater, balancer, stacker, tra } } -$buildingsAndVariants: belt, balancer, underground_belt, underground_belt-tier2, miner, miner-chainable, - cutter, cutter-quad, rotater, rotater-ccw, stacker, mixer, painter-double, painter-quad, trash, storage, +$buildingsAndVariants: belt, balancer, underground_belt, underground_belt-tier2, miner, miner-chainable, cutter, + cutter-quad, rotater, rotater-ccw, stacker, stacker-mirrored, mixer, painter-double, painter-quad, trash, storage, reader, rotater-rotate180, display, constant_signal, wire, wire_tunnel, logic_gate-or, logic_gate-not, logic_gate-xor, analyzer, virtual_processor-rotater, virtual_processor-unstacker, item_producer, virtual_processor-stacker, virtual_processor-painter, wire-second, painter, painter-mirrored, comparator; diff --git a/src/js/game/buildings/stacker.js b/src/js/game/buildings/stacker.js index 40a9c5ae..5bd7f66c 100644 --- a/src/js/game/buildings/stacker.js +++ b/src/js/game/buildings/stacker.js @@ -5,10 +5,13 @@ import { ItemAcceptorComponent } from "../components/item_acceptor"; import { ItemEjectorComponent } from "../components/item_ejector"; import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor"; import { Entity } from "../entity"; -import { MetaBuilding } from "../meta_building"; +import { defaultBuildingVariant, MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; import { enumHubGoalRewards } from "../tutorial_goals"; +/** @enum {string} */ +export const enumStackerVariants = { mirrored: "mirrored" }; + export class MetaStackerBuilding extends MetaBuilding { constructor() { super("stacker"); @@ -32,6 +35,14 @@ export class MetaStackerBuilding extends MetaBuilding { return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(speed)]]; } + /** + * @param {GameRoot} root + */ + getAvailableVariants(root) { + let variants = [defaultBuildingVariant, enumStackerVariants.mirrored]; + return variants; + } + /** * @param {GameRoot} root */ @@ -56,6 +67,7 @@ export class MetaStackerBuilding extends MetaBuilding { slots: [{ pos: new Vector(0, 0), direction: enumDirection.top }], }) ); + entity.addComponent( new ItemAcceptorComponent({ slots: [ @@ -73,4 +85,27 @@ export class MetaStackerBuilding extends MetaBuilding { }) ); } + /** + * + * @param {Entity} entity + * @param {number} rotationVariant + * @param {string} variant + */ + updateVariants(entity, rotationVariant, variant) { + let inv = variant === defaultBuildingVariant ? 0 : 1; + entity.components.ItemAcceptor.setSlots([ + { + pos: new Vector(inv, 0), + directions: [enumDirection.bottom], + filter: "shape", + }, + { + pos: new Vector(1 - inv, 0), + directions: [enumDirection.bottom], + filter: "shape", + }, + ]); + entity.components.ItemEjector.setSlots([{ pos: new Vector(inv, 0), direction: enumDirection.top }]) + } } + diff --git a/src/js/game/meta_building_registry.js b/src/js/game/meta_building_registry.js index 0613103e..370608ef 100644 --- a/src/js/game/meta_building_registry.js +++ b/src/js/game/meta_building_registry.js @@ -18,7 +18,7 @@ import { MetaMixerBuilding } from "./buildings/mixer"; import { enumPainterVariants, MetaPainterBuilding } from "./buildings/painter"; import { MetaReaderBuilding } from "./buildings/reader"; import { enumRotaterVariants, MetaRotaterBuilding } from "./buildings/rotater"; -import { MetaStackerBuilding } from "./buildings/stacker"; +import { enumStackerVariants, MetaStackerBuilding } from "./buildings/stacker"; import { MetaStorageBuilding } from "./buildings/storage"; import { enumTransistorVariants, MetaTransistorBuilding } from "./buildings/transistor"; import { MetaTrashBuilding } from "./buildings/trash"; @@ -87,6 +87,7 @@ export function initMetaBuildingRegistry() { // Stacker registerBuildingVariant(14, MetaStackerBuilding); + registerBuildingVariant(62, MetaStackerBuilding, enumStackerVariants.mirrored); // Mixer registerBuildingVariant(15, MetaMixerBuilding); diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 86bc8c90..a56ae512 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -565,6 +565,10 @@ buildings: name: &stacker Stacker description: Combines its inputs, on the same layer if possible, otherwise the right input is stacked on top of the left input. + mirrored: + name: *stacker + description: test + mixer: default: name: &mixer Color Mixer