1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-06-13 13:04:03 +00:00

Define the Component that passes the process in ItemAcceptor

Require migrate
This commit is contained in:
isaisstillalive 2020-07-03 01:31:10 +09:00
parent d75fb184a4
commit e1a47905e8
2 changed files with 25 additions and 5 deletions

View File

@ -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,
});
}
}

View File

@ -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()];