1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2026-03-02 03:39:21 +00:00

Optimize performance by using singletons for items

This commit is contained in:
tobspr
2020-08-14 13:09:10 +02:00
parent 3c34227c24
commit 8c39d31c5b
18 changed files with 145 additions and 88 deletions

View File

@@ -2,6 +2,7 @@ import { gItemRegistry } from "../../core/global_registries";
import { types } from "../../savegame/serialization";
import { Component } from "../component";
import { BaseItem } from "../base_item";
import { typeItemSingleton } from "../item_resolver";
export class ConstantSignalComponent extends Component {
static getId() {
@@ -10,7 +11,7 @@ export class ConstantSignalComponent extends Component {
static getSchema() {
return {
signal: types.nullable(types.obj(gItemRegistry)),
signal: types.nullable(typeItemSingleton),
};
}

View File

@@ -1,11 +1,10 @@
import { Vector, enumDirection, enumDirectionToVector } from "../../core/vector";
import { BaseItem } from "../base_item";
import { Component } from "../component";
import { enumDirection, enumDirectionToVector, Vector } from "../../core/vector";
import { types } from "../../savegame/serialization";
import { gItemRegistry } from "../../core/global_registries";
import { Entity } from "../entity";
import { enumLayer } from "../root";
import { BaseItem } from "../base_item";
import { BeltPath } from "../belt_path";
import { Component } from "../component";
import { Entity } from "../entity";
import { typeItemSingleton } from "../item_resolver";
/**
* @typedef {{
@@ -29,7 +28,7 @@ export class ItemEjectorComponent extends Component {
return {
slots: types.array(
types.structured({
item: types.nullable(types.obj(gItemRegistry)),
item: types.nullable(typeItemSingleton),
progress: types.float,
})
),

View File

@@ -1,7 +1,7 @@
import { gItemRegistry } from "../../core/global_registries";
import { types } from "../../savegame/serialization";
import { BaseItem } from "../base_item";
import { Component } from "../component";
import { typeItemSingleton } from "../item_resolver";
/** @enum {string} */
export const enumItemProcessorTypes = {
@@ -32,13 +32,13 @@ export class ItemProcessorComponent extends Component {
nextOutputSlot: types.uint,
inputSlots: types.array(
types.structured({
item: types.obj(gItemRegistry),
item: typeItemSingleton,
sourceSlot: types.uint,
})
),
itemsToEject: types.array(
types.structured({
item: types.obj(gItemRegistry),
item: typeItemSingleton,
requiredSlot: types.nullable(types.uint),
preferredSlot: types.nullable(types.uint),
})

View File

@@ -1,8 +1,7 @@
import { globalConfig } from "../../core/config";
import { types } from "../../savegame/serialization";
import { Component } from "../component";
import { BaseItem } from "../base_item";
import { gItemRegistry } from "../../core/global_registries";
import { Component } from "../component";
import { typeItemSingleton } from "../item_resolver";
const chainBufferSize = 3;
@@ -15,7 +14,7 @@ export class MinerComponent extends Component {
// cachedMinedItem is not serialized.
return {
lastMiningTime: types.ufloat,
itemChainBuffer: types.array(types.obj(gItemRegistry)),
itemChainBuffer: types.array(typeItemSingleton),
};
}

View File

@@ -1,9 +1,7 @@
import { Component } from "../component";
import { types } from "../../savegame/serialization";
import { gItemRegistry } from "../../core/global_registries";
import { BaseItem, enumItemType } from "../base_item";
import { ColorItem } from "../items/color_item";
import { ShapeItem } from "../items/shape_item";
import { Component } from "../component";
import { typeItemSingleton } from "../item_resolver";
export class StorageComponent extends Component {
static getId() {
@@ -13,7 +11,7 @@ export class StorageComponent extends Component {
static getSchema() {
return {
storedCount: types.uint,
storedItem: types.nullable(types.obj(gItemRegistry)),
storedItem: types.nullable(typeItemSingleton),
};
}

View File

@@ -1,10 +1,9 @@
import { BaseItem } from "../base_item";
import { Component } from "../component";
import { globalConfig } from "../../core/config";
import { types } from "../../savegame/serialization";
import { gItemRegistry } from "../../core/global_registries";
import { BaseItem } from "../base_item";
import { Component } from "../component";
import { Entity } from "../entity";
import { enumLayer } from "../root";
import { typeItemSingleton } from "../item_resolver";
/** @enum {string} */
export const enumUndergroundBeltMode = {
@@ -26,7 +25,7 @@ export class UndergroundBeltComponent extends Component {
static getSchema() {
return {
pendingItems: types.array(types.pair(types.obj(gItemRegistry), types.float)),
pendingItems: types.array(types.pair(typeItemSingleton, types.float)),
};
}