From c17be987d29e4cf4b6e5b085c338f9171ca91423 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 14 Feb 2022 00:40:12 -0500 Subject: [PATCH] WIP constructor filter --- core/src/mindustry/content/Blocks.java | 5 +++-- core/src/mindustry/world/blocks/payloads/Constructor.java | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index b442f01ed8..9a10295f7e 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3650,7 +3650,7 @@ public class Blocks{ deconstructSpeed = 1f; }}; - //TODO consider usefulness and applicability to serpulo + //TODO consider usefulness and applicability to serpulo... or anything really deconstructor = new PayloadDeconstructor("deconstructor"){{ requirements(Category.units, with(Items.beryllium, 250, Items.oxide, 100, Items.silicon, 250, Items.carbide, 250)); itemCapacity = 250; @@ -3659,13 +3659,14 @@ public class Blocks{ deconstructSpeed = 2f; }}; - //TODO move completely to erekir tech tree? constructor = new Constructor("constructor"){{ requirements(Category.units, with(Items.silicon, 100, Items.beryllium, 150, Items.tungsten, 80)); hasPower = true; buildSpeed = 0.3f; consumes.power(2f); size = 3; + //TODO expand this list + filter = Seq.with(Blocks.tungstenWallLarge, Blocks.berylliumWallLarge, Blocks.cliffCrusher, Blocks.plasmaBore, Blocks.reinforcedLiquidTank, Blocks.duct); }}; //yes this block is pretty much useless diff --git a/core/src/mindustry/world/blocks/payloads/Constructor.java b/core/src/mindustry/world/blocks/payloads/Constructor.java index 1479cc090e..42538609fd 100644 --- a/core/src/mindustry/world/blocks/payloads/Constructor.java +++ b/core/src/mindustry/world/blocks/payloads/Constructor.java @@ -3,6 +3,7 @@ package mindustry.world.blocks.payloads; import arc.graphics.*; import arc.graphics.g2d.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import arc.util.io.*; import mindustry.*; @@ -15,6 +16,8 @@ import static mindustry.Vars.*; /** Configurable BlockProducer variant. */ public class Constructor extends BlockProducer{ + /** Empty seq for no filter. */ + public Seq filter = new Seq<>(); public float buildSpeed = 0.4f; public int minBlockSize = 1, maxBlockSize = 2; @@ -43,7 +46,7 @@ public class Constructor extends BlockProducer{ } public boolean canProduce(Block b){ - return b.isVisible() && b.size >= minBlockSize && b.size <= maxBlockSize && !(b instanceof CoreBlock) && !state.rules.bannedBlocks.contains(b) && b.environmentBuildable(); + return b.isVisible() && b.size >= minBlockSize && b.size <= maxBlockSize && !(b instanceof CoreBlock) && !state.rules.bannedBlocks.contains(b) && b.environmentBuildable() && (filter.isEmpty() || filter.contains(b)); } public class ConstructorBuild extends BlockProducerBuild{ @@ -56,7 +59,7 @@ public class Constructor extends BlockProducer{ @Override public void buildConfiguration(Table table){ - ItemSelection.buildTable(Constructor.this, table, content.blocks().select(Constructor.this::canProduce), () -> recipe, this::configure); + ItemSelection.buildTable(Constructor.this, table, filter.isEmpty() ? content.blocks().select(Constructor.this::canProduce) : filter, () -> recipe, this::configure); } @Override