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

Some Performance Updates And Wireless Display's Copy/Paste Bug Fixed

This commit is contained in:
TcePrepK 2020-10-26 21:52:06 +03:00
parent ee28cb8435
commit 3226b59b96
3 changed files with 52 additions and 37 deletions

View File

@ -12,6 +12,7 @@ import { Loader } from "../core/loader";
import { drawRotatedSprite } from "../core/draw_utils"; import { drawRotatedSprite } from "../core/draw_utils";
import { gComponentRegistry } from "../core/global_registries"; import { gComponentRegistry } from "../core/global_registries";
import { getBuildingDataFromCode } from "./building_codes"; import { getBuildingDataFromCode } from "./building_codes";
import { WirelessDisplayComponent } from "./components/wireless_display";
export class Entity extends BasicSerializableObject { export class Entity extends BasicSerializableObject {
/** /**
@ -66,8 +67,9 @@ export class Entity extends BasicSerializableObject {
/** /**
* Stores wireless code of this entity * Stores wireless code of this entity
* @type {string}
*/ */
this.wireless_code = 0; this.wireless_code;
/* typehints:end */ /* typehints:end */
} }
@ -81,6 +83,7 @@ export class Entity extends BasicSerializableObject {
* @returns {import("../savegame/serialization").Schema} * @returns {import("../savegame/serialization").Schema}
*/ */
static getSchema() { static getSchema() {
console.log(types);
return { return {
uid: types.uint, uid: types.uint,
components: types.keyValueMap(types.objData(gComponentRegistry), false), components: types.keyValueMap(types.objData(gComponentRegistry), false),
@ -91,6 +94,7 @@ export class Entity extends BasicSerializableObject {
* Returns a clone of this entity * Returns a clone of this entity
*/ */
clone() { clone() {
const wireless_code = this.wireless_code;
const staticComp = this.components.StaticMapEntity; const staticComp = this.components.StaticMapEntity;
const buildingData = getBuildingDataFromCode(staticComp.code); const buildingData = getBuildingDataFromCode(staticComp.code);
@ -101,6 +105,7 @@ export class Entity extends BasicSerializableObject {
rotation: staticComp.rotation, rotation: staticComp.rotation,
rotationVariant: buildingData.rotationVariant, rotationVariant: buildingData.rotationVariant,
variant: buildingData.variant, variant: buildingData.variant,
wirelessCode: this.wireless_code,
}); });
for (const key in this.components) { for (const key in this.components) {

View File

@ -199,7 +199,7 @@ export class MetaBuilding {
* @param {number} param0.rotationVariant Rotation variant * @param {number} param0.rotationVariant Rotation variant
* @param {string} param0.variant * @param {string} param0.variant
*/ */
createEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) { createEntity({ root, origin, rotation, originalRotation, rotationVariant, variant, wirelessCode }) {
const entity = new Entity(root); const entity = new Entity(root);
entity.layer = this.getLayer(); entity.layer = this.getLayer();
entity.addComponent( entity.addComponent(
@ -213,6 +213,9 @@ export class MetaBuilding {
); );
this.setupEntityComponents(entity, root); this.setupEntityComponents(entity, root);
this.updateVariants(entity, rotationVariant, variant); this.updateVariants(entity, rotationVariant, variant);
if (wirelessCode) {
entity.wireless_code = wirelessCode;
}
return entity; return entity;
} }

View File

@ -17,6 +17,8 @@ import { Entity } from "../entity";
import { ShapeDefinition } from "../shape_definition"; import { ShapeDefinition } from "../shape_definition";
import { BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON } from "../items/boolean_item"; import { BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON } from "../items/boolean_item";
import { init } from "logrocket"; import { init } from "logrocket";
import { Signal } from "../../core/signal";
import { serializeError } from "../../core/logging";
export class WirelessDisplaySystem extends GameSystemWithFilter { export class WirelessDisplaySystem extends GameSystemWithFilter {
constructor(root) { constructor(root) {
@ -33,7 +35,10 @@ export class WirelessDisplaySystem extends GameSystemWithFilter {
} }
this.displaySprites[colorId] = Loader.getSprite("sprites/wires/display/" + colorId + ".png"); this.displaySprites[colorId] = Loader.getSprite("sprites/wires/display/" + colorId + ".png");
} }
this.wirelessMachineList = [];
this.wirelessMachineList = {};
this.displayNumber = 0;
} }
/** /**
@ -86,7 +91,7 @@ export class WirelessDisplaySystem extends GameSystemWithFilter {
entity.wireless_code = signalValueInput.getValue(); entity.wireless_code = signalValueInput.getValue();
} else if (signalValueInput.getValue() && entity.components.WiredPins){ } else if (signalValueInput.getValue() && entity.components.WiredPins){
entity.wireless_code = signalValueInput.getValue(); entity.wireless_code = signalValueInput.getValue();
this.wirelessMachineList.push(entity); this.wirelessMachineList[entity.wireless_code] = entity;
} }
}; };
@ -156,39 +161,41 @@ export class WirelessDisplaySystem extends GameSystemWithFilter {
for (let i = 0; i < contents.length; ++i) { for (let i = 0; i < contents.length; ++i) {
const entity_a = contents[i]; const entity_a = contents[i];
if (entity_a && !entity_a.components.WiredPins && entity_a.components.WirelessDisplay) { if (entity_a && !entity_a.components.WiredPins && entity_a.components.WirelessDisplay) {
for (let j = 0; j < this.wirelessMachineList.length; ++j) { const entity_b = this.wirelessMachineList[entity_a.wireless_code];
const entity_b = this.wirelessMachineList[j]; if (entity_b) {
if (entity_a.wireless_code == entity_b.wireless_code) { if (!this.allEntities.includes(entity_b)) {
const origin = entity_a.components.StaticMapEntity.origin; this.wirelessMachineList[entity_b] = undefined;
const pinsComp = entity_b.components.WiredPins; return;
const network = pinsComp.slots[0].linkedNetwork; }
const origin = entity_a.components.StaticMapEntity.origin;
if (!network || !network.hasValue()) { const pinsComp = entity_b.components.WiredPins;
continue; const network = pinsComp.slots[0].linkedNetwork;
}
if (!network) {
const value = this.getDisplayItem(network.currentValue); continue;
}
if (!value) {
continue; const value = this.getDisplayItem(network.currentValue);
}
if (!value) {
if (value.getItemType()) { continue;
if (value.getItemType() === "color") { }
this.displaySprites[/** @type {ColorItem} */ (value).color].drawCachedCentered(
parameters, if (value.getItemType()) {
(origin.x + 0.5) * globalConfig.tileSize, if (value.getItemType() === "color") {
(origin.y + 0.5) * globalConfig.tileSize, this.displaySprites[/** @type {ColorItem} */ (value).color].drawCachedCentered(
globalConfig.tileSize parameters,
); (origin.x + 0.5) * globalConfig.tileSize,
} else if (value.getItemType() === "shape") { (origin.y + 0.5) * globalConfig.tileSize,
value.drawItemCenteredClipped( globalConfig.tileSize
(origin.x + 0.5) * globalConfig.tileSize, );
(origin.y + 0.5) * globalConfig.tileSize, } else if (value.getItemType() === "shape") {
parameters, value.drawItemCenteredClipped(
30 (origin.x + 0.5) * globalConfig.tileSize,
); (origin.y + 0.5) * globalConfig.tileSize,
} parameters,
30
);
} }
} }
} }