From e4c6822ccafe757620b039fab706ad79d7255cad Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 11 Aug 2022 08:43:58 -0400 Subject: [PATCH] JSON payload stack support --- core/src/mindustry/mod/ContentParser.java | 9 +++++++++ core/src/mindustry/ui/dialogs/ResearchDialog.java | 3 +-- .../blocks/defense/turrets/PayloadAmmoTurret.java | 14 ++++++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 448510ace2..7b287e56dc 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -360,6 +360,15 @@ public class ContentParser{ return (T)fromJson(ItemStack.class, "{item: " + split[0] + ", amount: " + split[1] + "}"); } + //try to parse "payloaditem/amount" syntax + if(type == PayloadStack.class && jsonData.isString() && jsonData.asString().contains("/")){ + String[] split = jsonData.asString().split("/"); + int number = Strings.parseInt(split[1], 1); + UnlockableContent cont = content.unit(split[0]) == null ? content.block(split[0]) : content.unit(split[0]); + + return (T)new PayloadStack(cont == null ? Blocks.router : cont, number); + } + //try to parse "liquid/amount" syntax if(jsonData.isString() && jsonData.asString().contains("/")){ String[] split = jsonData.asString().split("/"); diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index 7ff80a8ed2..698789b849 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -679,8 +679,7 @@ public class ResearchDialog extends BaseDialog{ disabledFontColor = Color.gray; up = buttonOver; over = buttonDown; - }}, () -> spend(node)) - .disabled(i -> !canSpend(node)).growX().height(44f).colspan(3); + }}, () -> spend(node)).disabled(i -> !canSpend(node)).growX().height(44f).colspan(3); } }); diff --git a/core/src/mindustry/world/blocks/defense/turrets/PayloadAmmoTurret.java b/core/src/mindustry/world/blocks/defense/turrets/PayloadAmmoTurret.java index b1b84668df..2da5ae500e 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/PayloadAmmoTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/PayloadAmmoTurret.java @@ -10,7 +10,6 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; import mindustry.ui.*; -import mindustry.world.*; import mindustry.world.blocks.payloads.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; @@ -60,12 +59,19 @@ public class PayloadAmmoTurret extends Turret{ @Override public void build(Building build, Table table){ MultiReqImage image = new MultiReqImage(); - content.blocks().each(i -> filter.get(i) && i.unlockedNow(), content -> image.add(new ReqImage(new Image(content.uiIcon), - () -> build instanceof PayloadTurretBuild it && !it.payloads.isEmpty() && it.currentBlock() == content))); + + for(var block : content.blocks()) displayContent(build, image, block); + for(var unit : content.units()) displayContent(build, image, unit); table.add(image).size(8 * 4); } + void displayContent(Building build, MultiReqImage image, UnlockableContent content){ + if(filter.get(content) && content.unlockedNow()){ + image.add(new ReqImage(new Image(content.uiIcon), () -> build instanceof PayloadTurretBuild it && !it.payloads.isEmpty() && it.currentAmmo() == content)); + } + } + @Override public float efficiency(Building build){ //valid when there's any ammo in the turret @@ -86,7 +92,7 @@ public class PayloadAmmoTurret extends Turret{ public class PayloadTurretBuild extends TurretBuild{ public PayloadSeq payloads = new PayloadSeq(); - public UnlockableContent currentBlock(){ + public UnlockableContent currentAmmo(){ for(var content : ammoKeys){ if(payloads.contains(content)){ return content;