diff --git a/src/js/game/components/item_acceptor.js b/src/js/game/components/item_acceptor.js index 0b7f6a1b..7a787eb6 100644 --- a/src/js/game/components/item_acceptor.js +++ b/src/js/game/components/item_acceptor.js @@ -8,7 +8,8 @@ import { enumLayer } from "../root"; * pos: Vector, * directions: enumDirection[], * layer: enumLayer, - * filter?: enumItemType + * filter?: enumItemType, + * processor?: string * }} ItemAcceptorSlot */ /** @@ -23,7 +24,8 @@ import { enumLayer } from "../root"; * pos: Vector, * directions: enumDirection[], * layer?: enumLayer, - * filter?: enumItemType + * filter?: enumItemType, + * processor?: string * }} ItemAcceptorSlotConfig */ export class ItemAcceptorComponent extends Component { @@ -41,6 +43,8 @@ export class ItemAcceptorComponent extends Component { // TODO: MIGRATE layer: types.enum(enumLayer), + + processor: types.nullable(types.string), }) ), animated: types.bool, @@ -125,6 +129,7 @@ export class ItemAcceptorComponent extends Component { // Which type of item to accept (shape | color | all) @see enumItemType filter: slot.filter, + processor: slot.processor, }); } } diff --git a/src/js/game/systems/item_ejector.js b/src/js/game/systems/item_ejector.js index 316dc053..d7a9dbe0 100644 --- a/src/js/game/systems/item_ejector.js +++ b/src/js/game/systems/item_ejector.js @@ -236,7 +236,7 @@ export class ItemEjectorSystem extends GameSystemWithFilter { } // Try to hand over the item - if (this.tryPassOverItem(item, targetEntity, destSlot.index)) { + if (this.tryPassOverItem(item, targetEntity, destSlot)) { // Handover successful, clear slot targetAcceptorComp.onItemAccepted(destSlot.index, destSlot.acceptedDirection, item); sourceSlot.item = null; @@ -250,12 +250,27 @@ export class ItemEjectorSystem extends GameSystemWithFilter { * * @param {BaseItem} item * @param {Entity} receiver - * @param {number} slotIndex + * @param {import("../components/item_acceptor").ItemAcceptorLocatedSlot} slot + * @returns {boolean} */ - tryPassOverItem(item, receiver, slotIndex) { + tryPassOverItem(item, receiver, slot) { + const processor = slot.slot.processor; + if (processor) { + const itemProcessorComp = receiver.components[processor]; + if (itemProcessorComp) { + // Its an item processor .. + if (itemProcessorComp.tryTakeItem(item, slot.index)) { + return true; + } + // Item processor can have nothing else + return false; + } + } + // Try figuring out how what to do with the item // TODO: Kinda hacky. How to solve this properly? Don't want to go through inheritance hell. // Also its just a few cases (hope it stays like this .. :x). + const slotIndex = slot.index; const itemLayer = enumItemTypeToLayer[item.getItemType()];