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

Add swapper

This commit is contained in:
isaisstillalive 2020-06-22 12:58:57 +09:00
parent 969b7a74d4
commit 2ebcebb6cc
6 changed files with 40 additions and 2 deletions

View File

@ -11,7 +11,11 @@ import { T } from "../../translations";
import { formatItemsPerSecond } from "../../core/utils";
/** @enum {string} */
export const enumSplitterVariants = { compact: "compact", compactInverse: "compact-inverse" };
export const enumSplitterVariants = {
compact: "compact",
compactInverse: "compact-inverse",
swapper: "swapper",
};
export class MetaSplitterBuilding extends MetaBuilding {
constructor() {
@ -21,6 +25,7 @@ export class MetaSplitterBuilding extends MetaBuilding {
getDimensions(variant) {
switch (variant) {
case defaultBuildingVariant:
case enumSplitterVariants.swapper:
return new Vector(2, 1);
case enumSplitterVariants.compact:
case enumSplitterVariants.compactInverse:
@ -53,6 +58,7 @@ export class MetaSplitterBuilding extends MetaBuilding {
defaultBuildingVariant,
enumSplitterVariants.compact,
enumSplitterVariants.compactInverse,
enumSplitterVariants.swapper,
];
}
return super.getAvailableVariants(root);
@ -110,7 +116,15 @@ export class MetaSplitterBuilding extends MetaBuilding {
*/
updateVariants(entity, rotationVariant, variant) {
switch (variant) {
case defaultBuildingVariant: {
case defaultBuildingVariant:
case enumSplitterVariants.swapper: {
console.log(variant);
if (variant === enumSplitterVariants.swapper) {
entity.components.ItemProcessor.type = enumItemProcessorTypes.swapper;
} else {
entity.components.ItemProcessor.type = enumItemProcessorTypes.splitter;
}
entity.components.ItemAcceptor.setSlots([
{
pos: new Vector(0, 0),

View File

@ -7,6 +7,7 @@ import { gItemRegistry } from "../../core/global_registries";
/** @enum {string} */
export const enumItemProcessorTypes = {
splitter: "splitter",
swapper: "swapper",
cutter: "cutter",
cutterQuad: "cutterQuad",
rotater: "rotater",

View File

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

View File

@ -121,6 +121,20 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
break;
}
// SWAPPER
case enumItemProcessorTypes.swapper: {
trackProduction = false;
const availableSlots = entity.components.ItemEjector.slots.length;
for (let i = 0; i < items.length; ++i) {
outItems.push({
item: items[i].item,
requiredSlot: (items[i].sourceSlot + 1) % availableSlots,
});
}
break;
}
// CUTTER
case enumItemProcessorTypes.cutter: {
const inputItem = /** @type {ShapeItem} */ (items[0].item);

View File

@ -453,6 +453,10 @@ buildings:
name: Merger (compact)
description: Merges two conveyor belts into one.
swapper:
name: Swapper
description: Swaps two conveyor belts. <strong>If any output stalls, all outputs will stall!</strong>
cutter:
default:
name: &cutter Cutter

View File

@ -455,6 +455,10 @@ buildings:
name: 合流機 (コンパクト)
description: 2本のベルトの内容を1本のベルトに合流します。
swapper:
name: 入換機
description: 2本のベルトの内容を入れ換えます。<strong>もしひとつの出力が詰まった場合、すべての出力が停止することに注意してください!</strong>
cutter:
default:
name: &cutter 切断機