From 09186cb6478823e75f708133a5cd900c7290e377 Mon Sep 17 00:00:00 2001 From: mse <42069+mse@users.noreply.github.com> Date: Thu, 28 May 2020 21:28:35 -0400 Subject: [PATCH] smash dat bug owo --- src/js/game/buildings/sorter.js | 5 ++++- src/js/game/component_registry.js | 4 +++- src/js/game/components/sorter.js | 29 ++++++++++++++++++++++++++ src/js/game/entity_components.js | 4 ++++ src/js/game/systems/item_processor.js | 30 ++++++++++++++------------- 5 files changed, 56 insertions(+), 16 deletions(-) create mode 100644 src/js/game/components/sorter.js diff --git a/src/js/game/buildings/sorter.js b/src/js/game/buildings/sorter.js index ac6a591d..28a72cdf 100644 --- a/src/js/game/buildings/sorter.js +++ b/src/js/game/buildings/sorter.js @@ -3,6 +3,7 @@ import { enumDirection, Vector } from "../../core/vector"; import { ItemAcceptorComponent, enumItemAcceptorItemFilter } from "../components/item_acceptor"; import { ItemEjectorComponent } from "../components/item_ejector"; import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor"; +import { SorterComponent } from "../components/sorter"; import { Entity } from "../entity"; import { MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; @@ -51,7 +52,9 @@ export class MetaSorterBuilding extends MetaBuilding { processorType: enumItemProcessorTypes.sorter, }) ); - + entity.addComponent( + new SorterComponent({}) + ); entity.addComponent( new ItemEjectorComponent({ slots: [ diff --git a/src/js/game/component_registry.js b/src/js/game/component_registry.js index 76458d43..36c766f6 100644 --- a/src/js/game/component_registry.js +++ b/src/js/game/component_registry.js @@ -1,6 +1,7 @@ import { gComponentRegistry } from "../core/global_registries"; import { StaticMapEntityComponent } from "./components/static_map_entity"; import { BeltComponent } from "./components/belt"; +import { SorterComponent } from "./components/sorter"; import { ItemEjectorComponent } from "./components/item_ejector"; import { ItemAcceptorComponent } from "./components/item_acceptor"; import { MinerComponent } from "./components/miner"; @@ -14,6 +15,7 @@ import { StorageComponent } from "./components/storage"; export function initComponentRegistry() { gComponentRegistry.register(StaticMapEntityComponent); gComponentRegistry.register(BeltComponent); + gComponentRegistry.register(SorterComponent); gComponentRegistry.register(ItemEjectorComponent); gComponentRegistry.register(ItemAcceptorComponent); gComponentRegistry.register(MinerComponent); @@ -31,7 +33,7 @@ export function initComponentRegistry() { assert( // @ts-ignore require.context("./components", false, /.*\.js/i).keys().length === - gComponentRegistry.getNumEntries(), + gComponentRegistry.getNumEntries(), "Not all components are registered" ); diff --git a/src/js/game/components/sorter.js b/src/js/game/components/sorter.js new file mode 100644 index 00000000..f6749583 --- /dev/null +++ b/src/js/game/components/sorter.js @@ -0,0 +1,29 @@ +import { Component } from "../component"; +import { types } from "../../savegame/serialization"; +import { gItemRegistry } from "../../core/global_registries"; +import { BaseItem } from "../base_item"; +import { Vector, enumDirection } from "../../core/vector"; +import { Math_PI, Math_sin, Math_cos } from "../../core/builtins"; +import { globalConfig } from "../../core/config"; + +export class SorterComponent extends Component { + static getId() { + return "Sorter"; + } + + static getSchema() { + return { + filter: types.string, + isfil: types.bool, + }; + } + constructor({ + filter = "CuCuCuXu", + isfil = false, + }) { + super(); + + this.filter = filter; + this.isfil = isfil; + } +} diff --git a/src/js/game/entity_components.js b/src/js/game/entity_components.js index bcc6e9d0..fbe34829 100644 --- a/src/js/game/entity_components.js +++ b/src/js/game/entity_components.js @@ -1,6 +1,7 @@ /* typehints:start */ import { StaticMapEntityComponent } from "./components/static_map_entity"; import { BeltComponent } from "./components/belt"; +import { SorterComponent } from "./components/sorter"; import { ItemEjectorComponent } from "./components/item_ejector"; import { ItemAcceptorComponent } from "./components/item_acceptor"; import { MinerComponent } from "./components/miner"; @@ -29,6 +30,9 @@ export class EntityComponentStorage { /** @type {BeltComponent} */ this.Belt; + /** @type {SorterComponent} */ + this.Sorter; + /** @type {ItemEjectorComponent} */ this.ItemEjector; diff --git a/src/js/game/systems/item_processor.js b/src/js/game/systems/item_processor.js index e56efb96..183f8852 100644 --- a/src/js/game/systems/item_processor.js +++ b/src/js/game/systems/item_processor.js @@ -123,22 +123,24 @@ export class ItemProcessorSystem extends GameSystemWithFilter { trackProduction = false; const availableSlots = entity.components.ItemEjector.slots.length - 1; assert(inputItem instanceof ShapeItem, "Input for sorting is not a shape"); - console.log(inputItem.serialize); - if (inputItem.serialize() == "CuCuCuCu") { + if (inputItem.serialize() == entity.components.Sorter.filter && entity.components.Sorter.isfil) { let nextSlot = processorComp.nextOutputSlot++ % availableSlots; - for (let i = 0; i < items.length; ++i) { - outItems.push({ - item: items[i].item, - requiredSlot: 1, - }); - } + outItems.push({ + item: inputItem, + requiredSlot: 1, + }); + } else if (!entity.components.Sorter.isfil) { + entity.components.Sorter.isfil = true; + entity.components.Sorter.filter = inputItem.serialize(); + outItems.push({ + item: inputItem, + requiredSlot: 1, + }); } else { - for (let i = 0; i < items.length; ++i) { - outItems.push({ - item: items[i].item, - requiredSlot: 0, - }); - } + outItems.push({ + item: inputItem, + requiredSlot: 0, + }); } break; }