mirror of
https://github.com/tobspr/shapez.io.git
synced 2025-06-13 13:04:03 +00:00
Add support for a buffered second item to be ejected
This allows the double painter to start the next paint job immediately, thus eliminating the reason it ran slower than specified. Fixes #842
This commit is contained in:
parent
d33a72202a
commit
473d91365b
@ -182,7 +182,7 @@ export class MetaPainterBuilding extends MetaBuilding {
|
||||
]);
|
||||
|
||||
entity.components.ItemEjector.setSlots([
|
||||
{ pos: new Vector(1, 0), direction: enumDirection.right },
|
||||
{ pos: new Vector(1, 0), direction: enumDirection.right, buffered: true },
|
||||
]);
|
||||
|
||||
entity.components.ItemProcessor.type = enumItemProcessorTypes.painterDouble;
|
||||
|
@ -12,6 +12,7 @@ import { typeItemSingleton } from "../item_resolver";
|
||||
* direction: enumDirection,
|
||||
* item: BaseItem,
|
||||
* progress: number?,
|
||||
* nextItem?: BaseItem,
|
||||
* cachedDestSlot?: import("./item_acceptor").ItemAcceptorLocatedSlot,
|
||||
* cachedBeltPath?: BeltPath,
|
||||
* cachedTargetEntity?: Entity
|
||||
@ -38,7 +39,7 @@ export class ItemEjectorComponent extends Component {
|
||||
/**
|
||||
*
|
||||
* @param {object} param0
|
||||
* @param {Array<{pos: Vector, direction: enumDirection }>=} param0.slots The slots to eject on
|
||||
* @param {Array<{pos: Vector, direction: enumDirection, buffered?: boolean }>=} param0.slots The slots to eject on
|
||||
* @param {boolean=} param0.renderFloatingItems Whether to render items even if they are not connected
|
||||
*/
|
||||
constructor({ slots = [], renderFloatingItems = true }) {
|
||||
@ -49,7 +50,7 @@ export class ItemEjectorComponent extends Component {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Array<{pos: Vector, direction: enumDirection }>} slots The slots to eject on
|
||||
* @param {Array<{pos: Vector, direction: enumDirection, buffered?: boolean }>} slots The slots to eject on
|
||||
*/
|
||||
setSlots(slots) {
|
||||
/** @type {Array<ItemEjectorSlot>} */
|
||||
@ -61,6 +62,7 @@ export class ItemEjectorComponent extends Component {
|
||||
direction: slot.direction,
|
||||
item: null,
|
||||
progress: 0,
|
||||
nextItem: slot.buffered ? null : undefined,
|
||||
cachedDestSlot: null,
|
||||
cachedTargetEntity: null,
|
||||
});
|
||||
@ -97,7 +99,7 @@ export class ItemEjectorComponent extends Component {
|
||||
*/
|
||||
canEjectOnSlot(slotIndex) {
|
||||
assert(slotIndex >= 0 && slotIndex < this.slots.length, "Invalid ejector slot: " + slotIndex);
|
||||
return !this.slots[slotIndex].item;
|
||||
return !this.slots[slotIndex].item || this.slots[slotIndex].nextItem === null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -123,6 +125,10 @@ export class ItemEjectorComponent extends Component {
|
||||
if (!this.canEjectOnSlot(slotIndex)) {
|
||||
return false;
|
||||
}
|
||||
if (this.slots[slotIndex].item) {
|
||||
this.slots[slotIndex].nextItem = item;
|
||||
return true;
|
||||
}
|
||||
this.slots[slotIndex].item = item;
|
||||
this.slots[slotIndex].progress = 0;
|
||||
return true;
|
||||
@ -136,7 +142,12 @@ export class ItemEjectorComponent extends Component {
|
||||
takeSlotItem(slotIndex) {
|
||||
const slot = this.slots[slotIndex];
|
||||
const item = slot.item;
|
||||
if (slot.nextItem === undefined) {
|
||||
slot.item = null;
|
||||
} else {
|
||||
slot.item = slot.nextItem;
|
||||
slot.nextItem = null;
|
||||
}
|
||||
slot.progress = 0.0;
|
||||
return item;
|
||||
}
|
||||
|
@ -182,7 +182,7 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
|
||||
if (destPath) {
|
||||
// Try passing the item over
|
||||
if (destPath.tryAcceptItem(item)) {
|
||||
sourceSlot.item = null;
|
||||
sourceEjectorComp.takeSlotItem(j);
|
||||
}
|
||||
|
||||
// Always stop here, since there can *either* be a belt path *or*
|
||||
@ -209,7 +209,7 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
|
||||
item
|
||||
);
|
||||
}
|
||||
sourceSlot.item = null;
|
||||
sourceEjectorComp.takeSlotItem(j);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user