diff --git a/src/js/game/buildings/miner.js b/src/js/game/buildings/miner.js index ed87bc85..2baf3fd4 100644 --- a/src/js/game/buildings/miner.js +++ b/src/js/game/buildings/miner.js @@ -44,9 +44,15 @@ export class MetaMinerBuilding extends MetaBuilding { /** * Creates the entity at the given location * @param {Entity} entity + * @param {GameRoot} root */ - setupEntityComponents(entity) { - entity.addComponent(new MinerComponent({})); + setupEntityComponents(entity, root) { + let itemBelow = null; + if (root) { + const staticComp = entity.components.StaticMapEntity; + itemBelow = root.map.getLowerLayerContentXY(staticComp.origin.x, staticComp.origin.y); + } + entity.addComponent(new MinerComponent({ minedItem: itemBelow })); entity.addComponent( new ItemEjectorComponent({ slots: [{ pos: new Vector(0, 0), direction: enumDirection.top }], diff --git a/src/js/game/components/miner.js b/src/js/game/components/miner.js index 57de7e2f..7a4d77dd 100644 --- a/src/js/game/components/miner.js +++ b/src/js/game/components/miner.js @@ -15,6 +15,7 @@ export class MinerComponent extends Component { return { lastMiningTime: types.ufloat, chainable: types.bool, + minedItem: types.nullable(types.obj(gItemRegistry)), itemChainBuffer: types.array(types.obj(gItemRegistry)), }; } @@ -22,12 +23,15 @@ export class MinerComponent extends Component { duplicateWithoutContents() { return new MinerComponent({ chainable: this.chainable, + minedItem: this.minedItem }); } /** + * + * @param {{chainable?: boolean, minedItem?: BaseItem}} param0 */ - constructor({ chainable = false }) { + constructor({ chainable = false, minedItem = null }) { super(); this.lastMiningTime = 0; this.chainable = chainable; @@ -38,6 +42,11 @@ export class MinerComponent extends Component { * @type {Array} */ this.itemChainBuffer = []; + + /** + * @type {BaseItem} + */ + this.minedItem = minedItem; } /** diff --git a/src/js/game/systems/miner.js b/src/js/game/systems/miner.js index 78223516..41786603 100644 --- a/src/js/game/systems/miner.js +++ b/src/js/game/systems/miner.js @@ -24,10 +24,8 @@ export class MinerSystem extends GameSystemWithFilter { // Check if miner is above an actual tile const minerComp = entity.components.Miner; - const staticComp = entity.components.StaticMapEntity; - const tileBelow = this.root.map.getLowerLayerContentXY(staticComp.origin.x, staticComp.origin.y); - if (!tileBelow) { + if (!minerComp.minedItem) { continue; } @@ -40,20 +38,9 @@ export class MinerSystem extends GameSystemWithFilter { } if (this.root.time.isIngameTimerExpired(minerComp.lastMiningTime, 1 / miningSpeed)) { - const lowerLayerItem = this.root.map.getLowerLayerContentXY( - staticComp.origin.x, - staticComp.origin.y - ); - - // TODO: Should not be required actually - if (!lowerLayerItem) { - // Nothing below; - continue; - } - - if (this.tryPerformMinerEject(entity, lowerLayerItem)) { + if (this.tryPerformMinerEject(entity, minerComp.minedItem)) { // Analytics hook - this.root.signals.itemProduced.dispatch(lowerLayerItem); + this.root.signals.itemProduced.dispatch(minerComp.minedItem); // Actually mine minerComp.lastMiningTime = this.root.time.now(); @@ -114,18 +101,14 @@ export class MinerSystem extends GameSystemWithFilter { if (entity && entity.components.Miner) { const staticComp = entity.components.StaticMapEntity; + const minerComp = entity.components.Miner; if (!staticComp.shouldBeDrawn(parameters)) { continue; } - const lowerLayerItem = this.root.map.getLowerLayerContentXY( - staticComp.origin.x, - staticComp.origin.y - ); - - if (lowerLayerItem) { + if (minerComp.minedItem) { const padding = 3; - parameters.context.fillStyle = lowerLayerItem.getBackgroundColorAsResource(); + parameters.context.fillStyle = minerComp.minedItem.getBackgroundColorAsResource(); parameters.context.fillRect( staticComp.origin.x * globalConfig.tileSize + padding, staticComp.origin.y * globalConfig.tileSize + padding, @@ -134,8 +117,8 @@ export class MinerSystem extends GameSystemWithFilter { ); } - if (lowerLayerItem) { - lowerLayerItem.draw( + if (minerComp.minedItem) { + minerComp.minedItem.draw( (0.5 + staticComp.origin.x) * globalConfig.tileSize, (0.5 + staticComp.origin.y) * globalConfig.tileSize, parameters