mirror of
https://github.com/tobspr/shapez.io.git
synced 2026-03-02 03:39:21 +00:00
Improve performance by getting rid of instanceof
This commit is contained in:
@@ -37,12 +37,7 @@ export class EnergyGeneratorComponent extends Component {
|
||||
* @param {BaseItem} item
|
||||
*/
|
||||
tryTakeItem(item) {
|
||||
if (!(item instanceof ShapeItem)) {
|
||||
// Not a shape
|
||||
return false;
|
||||
}
|
||||
|
||||
if (item.definition.getHash() !== this.requiredKey) {
|
||||
if (/** @type {ShapeItem} */ (item).definition.getHash() !== this.requiredKey) {
|
||||
// Not our shape
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,23 +1,12 @@
|
||||
import { Component } from "../component";
|
||||
import { Vector, enumDirection, enumInvertedDirections } from "../../core/vector";
|
||||
import { BaseItem } from "../base_item";
|
||||
import { ShapeItem } from "../items/shape_item";
|
||||
import { ColorItem } from "../items/color_item";
|
||||
import { enumDirection, enumInvertedDirections, Vector } from "../../core/vector";
|
||||
import { types } from "../../savegame/serialization";
|
||||
|
||||
/**
|
||||
* @enum {string?}
|
||||
*/
|
||||
export const enumItemAcceptorItemFilter = {
|
||||
shape: "shape",
|
||||
color: "color",
|
||||
none: null,
|
||||
};
|
||||
import { BaseItem, enumItemType } from "../base_item";
|
||||
import { Component } from "../component";
|
||||
|
||||
/** @typedef {{
|
||||
* pos: Vector,
|
||||
* directions: enumDirection[],
|
||||
* filter?: enumItemAcceptorItemFilter
|
||||
* filter?: enumItemType
|
||||
* }} ItemAcceptorSlot */
|
||||
|
||||
/**
|
||||
@@ -39,7 +28,7 @@ export class ItemAcceptorComponent extends Component {
|
||||
types.structured({
|
||||
pos: types.vector,
|
||||
directions: types.array(types.enum(enumDirection)),
|
||||
filter: types.nullable(types.enum(enumItemAcceptorItemFilter)),
|
||||
filter: types.nullable(types.enum(enumItemType)),
|
||||
})
|
||||
),
|
||||
animated: types.bool,
|
||||
@@ -49,16 +38,6 @@ export class ItemAcceptorComponent extends Component {
|
||||
direction: types.enum(enumDirection),
|
||||
})
|
||||
),
|
||||
|
||||
// We don't actually need to store the animations
|
||||
// itemConsumptionAnimations: types.array(
|
||||
// types.structured({
|
||||
// item: types.obj(gItemRegistry),
|
||||
// slotIndex: types.uint,
|
||||
// animProgress: types.float,
|
||||
// direction: types.enum(enumDirection),
|
||||
// })
|
||||
// ),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -92,7 +71,7 @@ export class ItemAcceptorComponent extends Component {
|
||||
/**
|
||||
*
|
||||
* @param {object} param0
|
||||
* @param {Array<{pos: Vector, directions: enumDirection[], filter?: enumItemAcceptorItemFilter}>} param0.slots The slots from which we accept items
|
||||
* @param {Array<{pos: Vector, directions: enumDirection[], filter?: enumItemType}>} param0.slots The slots from which we accept items
|
||||
* @param {boolean=} param0.animated Whether to animate item consumption
|
||||
* @param {Array<{pos: Vector, direction: enumDirection}>=} param0.beltUnderlays Where to render belt underlays
|
||||
*/
|
||||
@@ -115,10 +94,10 @@ export class ItemAcceptorComponent extends Component {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {Array<{pos: Vector, directions: enumDirection[], filter?: enumItemAcceptorItemFilter}>} slots
|
||||
* @param {Array<{pos: Vector, directions: enumDirection[], filter?: enumItemType}>} slots
|
||||
*/
|
||||
setSlots(slots) {
|
||||
/** @type {Array<{pos: Vector, directions: enumDirection[], filter?: enumItemAcceptorItemFilter}>} */
|
||||
/** @type {Array<{pos: Vector, directions: enumDirection[], filter?: enumItemType}>} */
|
||||
this.slots = [];
|
||||
for (let i = 0; i < slots.length; ++i) {
|
||||
const slot = slots[i];
|
||||
@@ -126,7 +105,7 @@ export class ItemAcceptorComponent extends Component {
|
||||
pos: slot.pos,
|
||||
directions: slot.directions,
|
||||
|
||||
// Which type of item to accept (shape | color | all) @see enumItemAcceptorItemFilter
|
||||
// Which type of item to accept (shape | color | all) @see enumItemType
|
||||
filter: slot.filter,
|
||||
});
|
||||
}
|
||||
@@ -139,16 +118,7 @@ export class ItemAcceptorComponent extends Component {
|
||||
*/
|
||||
canAcceptItem(slotIndex, item) {
|
||||
const slot = this.slots[slotIndex];
|
||||
switch (slot.filter) {
|
||||
case enumItemAcceptorItemFilter.shape: {
|
||||
return item instanceof ShapeItem;
|
||||
}
|
||||
case enumItemAcceptorItemFilter.color: {
|
||||
return item instanceof ColorItem;
|
||||
}
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
return slot.filter === null || slot.filter === item.getItemType();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Component } from "../component";
|
||||
import { types } from "../../savegame/serialization";
|
||||
import { gItemRegistry } from "../../core/global_registries";
|
||||
import { BaseItem } from "../base_item";
|
||||
import { BaseItem, enumItemType } from "../base_item";
|
||||
import { ColorItem } from "../items/color_item";
|
||||
import { ShapeItem } from "../items/shape_item";
|
||||
|
||||
@@ -60,17 +60,23 @@ export class StorageComponent extends Component {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (item instanceof ColorItem) {
|
||||
return this.storedItem instanceof ColorItem && this.storedItem.color === item.color;
|
||||
const itemType = item.getItemType();
|
||||
|
||||
// Check type matches
|
||||
if (itemType !== this.storedItem.getItemType()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (item instanceof ShapeItem) {
|
||||
if (itemType === enumItemType.color) {
|
||||
return /** @type {ColorItem} */ (this.storedItem).color === /** @type {ColorItem} */ (item).color;
|
||||
}
|
||||
|
||||
if (itemType === enumItemType.shape) {
|
||||
return (
|
||||
this.storedItem instanceof ShapeItem &&
|
||||
this.storedItem.definition.getHash() === item.definition.getHash()
|
||||
/** @type {ShapeItem} */ (this.storedItem).definition.getHash() ===
|
||||
/** @type {ShapeItem} */ (item).definition.getHash()
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user