1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2026-02-18 22:09:20 +00:00

Add Serializer/Deserializer

This commit is contained in:
isaisstillalive 2020-06-29 09:23:55 +09:00
parent b0cc9539d7
commit f88b3f668f
6 changed files with 113 additions and 1 deletions

View File

@ -11,7 +11,12 @@ import { T } from "../../translations";
import { formatItemsPerSecond } from "../../core/utils"; import { formatItemsPerSecond } from "../../core/utils";
/** @enum {string} */ /** @enum {string} */
export const enumSplitterVariants = { compact: "compact", compactInverse: "compact-inverse" }; export const enumSplitterVariants = {
compact: "compact",
compactInverse: "compact-inverse",
serializer: "serializer",
deserializer: "deserializer",
};
export class MetaSplitterBuilding extends MetaBuilding { export class MetaSplitterBuilding extends MetaBuilding {
constructor() { constructor() {
@ -21,6 +26,8 @@ export class MetaSplitterBuilding extends MetaBuilding {
getDimensions(variant) { getDimensions(variant) {
switch (variant) { switch (variant) {
case defaultBuildingVariant: case defaultBuildingVariant:
case enumSplitterVariants.serializer:
case enumSplitterVariants.deserializer:
return new Vector(2, 1); return new Vector(2, 1);
case enumSplitterVariants.compact: case enumSplitterVariants.compact:
case enumSplitterVariants.compactInverse: case enumSplitterVariants.compactInverse:
@ -53,6 +60,8 @@ export class MetaSplitterBuilding extends MetaBuilding {
defaultBuildingVariant, defaultBuildingVariant,
enumSplitterVariants.compact, enumSplitterVariants.compact,
enumSplitterVariants.compactInverse, enumSplitterVariants.compactInverse,
enumSplitterVariants.serializer,
enumSplitterVariants.deserializer,
]; ];
} }
return super.getAvailableVariants(root); return super.getAvailableVariants(root);
@ -132,6 +141,9 @@ export class MetaSplitterBuilding extends MetaBuilding {
{ pos: new Vector(1, 0), direction: enumDirection.top }, { pos: new Vector(1, 0), direction: enumDirection.top },
]; ];
entity.components.ItemProcessor.inputsPerCharge = 1;
entity.components.ItemProcessor.type = enumItemProcessorTypes.splitter;
break; break;
} }
case enumSplitterVariants.compact: case enumSplitterVariants.compact:
@ -159,6 +171,57 @@ export class MetaSplitterBuilding extends MetaBuilding {
{ pos: new Vector(0, 0), direction: enumDirection.top }, { pos: new Vector(0, 0), direction: enumDirection.top },
]; ];
entity.components.ItemProcessor.inputsPerCharge = 1;
entity.components.ItemProcessor.type = enumItemProcessorTypes.splitter;
break;
}
case enumSplitterVariants.serializer: {
entity.components.ItemAcceptor.setSlots([
{
pos: new Vector(0, 0),
directions: [enumDirection.bottom],
},
{
pos: new Vector(1, 0),
directions: [enumDirection.bottom],
},
]);
entity.components.ItemEjector.setSlots([
{ pos: new Vector(0, 0), direction: enumDirection.top },
]);
entity.components.ItemAcceptor.beltUnderlays = [
{ pos: new Vector(0, 0), direction: enumDirection.top },
];
entity.components.ItemProcessor.inputsPerCharge = 2;
entity.components.ItemProcessor.type = enumItemProcessorTypes.serializer;
break;
}
case enumSplitterVariants.deserializer: {
entity.components.ItemAcceptor.setSlots([
{
pos: new Vector(0, 0),
directions: [enumDirection.bottom],
},
]);
entity.components.ItemEjector.setSlots([
{ pos: new Vector(0, 0), direction: enumDirection.top },
{ pos: new Vector(1, 0), direction: enumDirection.top },
]);
entity.components.ItemAcceptor.beltUnderlays = [
{ pos: new Vector(0, 0), direction: enumDirection.top },
{ pos: new Vector(1, 0), direction: enumDirection.top },
];
entity.components.ItemProcessor.inputsPerCharge = 1;
entity.components.ItemProcessor.type = enumItemProcessorTypes.deserializer;
break; break;
} }
default: default:

View File

@ -6,6 +6,8 @@ import { Component } from "../component";
/** @enum {string} */ /** @enum {string} */
export const enumItemProcessorTypes = { export const enumItemProcessorTypes = {
splitter: "splitter", splitter: "splitter",
serializer: "serializer",
deserializer: "deserializer",
cutter: "cutter", cutter: "cutter",
cutterQuad: "cutterQuad", cutterQuad: "cutterQuad",
rotater: "rotater", rotater: "rotater",

View File

@ -403,6 +403,8 @@ export class HubGoals extends BasicSerializableObject {
case enumItemProcessorTypes.hub: case enumItemProcessorTypes.hub:
return 1e30; return 1e30;
case enumItemProcessorTypes.splitter: case enumItemProcessorTypes.splitter:
case enumItemProcessorTypes.serializer:
case enumItemProcessorTypes.deserializer:
return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt * 2; return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt * 2;
case enumItemProcessorTypes.mixer: case enumItemProcessorTypes.mixer:

View File

@ -120,6 +120,35 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
break; break;
} }
// SERIALIZER
case enumItemProcessorTypes.serializer: {
trackProduction = false;
const availableSlots = entity.components.ItemAcceptor.slots.length;
for (let i = 0; i < availableSlots; ++i) {
console.log(i);
console.log(itemsBySlot[i]);
outItems.push(itemsBySlot[i]);
}
break;
}
// DESERIALIZER
case enumItemProcessorTypes.deserializer: {
trackProduction = false;
const availableSlots = entity.components.ItemEjector.slots.length;
let nextSlot = processorComp.nextOutputSlot++ % availableSlots;
for (let i = 0; i < items.length; ++i) {
outItems.push({
item: items[i].item,
requiredSlot: (nextSlot + i) % availableSlots,
});
}
break;
}
// CUTTER // CUTTER
case enumItemProcessorTypes.cutter: { case enumItemProcessorTypes.cutter: {
const inputItem = /** @type {ShapeItem} */ (items[0].item); const inputItem = /** @type {ShapeItem} */ (items[0].item);

View File

@ -472,6 +472,14 @@ buildings:
name: Merger (compact) name: Merger (compact)
description: Merges two conveyor belts into one. description: Merges two conveyor belts into one.
serializer:
name: Serializer
description: Serializes two conveyor belts into one.
deserializer:
name: Deserializer
description: Deserializes one conveyor belts into two.
cutter: cutter:
default: default:
name: &cutter Cutter name: &cutter Cutter

View File

@ -468,6 +468,14 @@ buildings:
name: 合流機 (コンパクト) name: 合流機 (コンパクト)
description: 2本のベルトの内容を1本のベルトに合流します。 description: 2本のベルトの内容を1本のベルトに合流します。
serializer:
name: 整列合流機
description: 2本のベルトの内容を順番に1本のベルトに合流します。
deserializer:
name: 整列分配機
description: 1本のベルトの内容を順番に2本のベルトに分配します。
cutter: cutter:
default: default:
name: &cutter 切断機 name: &cutter 切断機