From 13745bfd99b36ad20f9f2fc616979365f2633996 Mon Sep 17 00:00:00 2001 From: nullevoy <89076920+stacktrace-error@users.noreply.github.com> Date: Fri, 4 Aug 2023 16:35:13 +0200 Subject: [PATCH] ConsumeLiquidsDynamic (#8892) * ConsumeLiquidsDynamic * imports didn't optimize * wording * nevermind, no idea --- core/src/mindustry/mod/ClassMap.java | 1 + .../consumers/ConsumeLiquidsDynamic.java | 69 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 core/src/mindustry/world/consumers/ConsumeLiquidsDynamic.java diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index 35fd6b50c1..5ddec905f5 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -441,6 +441,7 @@ public class ClassMap{ classes.put("ConsumeLiquidFilter", mindustry.world.consumers.ConsumeLiquidFilter.class); classes.put("ConsumeLiquidFlammable", mindustry.world.consumers.ConsumeLiquidFlammable.class); classes.put("ConsumeLiquids", mindustry.world.consumers.ConsumeLiquids.class); + classes.put("ConsumeLiquidsDynamic", mindustry.world.consumers.ConsumeLiquidsDynamic.class); classes.put("ConsumePayloadDynamic", mindustry.world.consumers.ConsumePayloadDynamic.class); classes.put("ConsumePayloadFilter", mindustry.world.consumers.ConsumePayloadFilter.class); classes.put("ConsumePayloads", mindustry.world.consumers.ConsumePayloads.class); diff --git a/core/src/mindustry/world/consumers/ConsumeLiquidsDynamic.java b/core/src/mindustry/world/consumers/ConsumeLiquidsDynamic.java new file mode 100644 index 0000000000..9079658629 --- /dev/null +++ b/core/src/mindustry/world/consumers/ConsumeLiquidsDynamic.java @@ -0,0 +1,69 @@ +package mindustry.world.consumers; + +import arc.func.Func; +import arc.scene.ui.layout.Table; +import mindustry.Vars; +import mindustry.gen.Building; +import mindustry.type.LiquidStack; +import mindustry.ui.ReqImage; +import mindustry.world.Block; + +public class ConsumeLiquidsDynamic extends Consume{ + public final Func liquids; + + @SuppressWarnings("unchecked") + public ConsumeLiquidsDynamic(Func liquids){ + this.liquids = (Func)liquids; + } + + @Override + public void apply(Block block){ + block.hasLiquids = true; + } + + @Override + public void build(Building build, Table table){ + LiquidStack[][] current = {liquids.get(build)}; + + table.table(cont -> { + table.update(() -> { + if(current[0] != liquids.get(build)){ + rebuild(build, cont); + current[0] = liquids.get(build); + } + }); + + rebuild(build, cont); + }); + } + + private void rebuild(Building build, Table table){ + table.clear(); + int i = 0; + + for(LiquidStack stack : liquids.get(build)){ + table.add(new ReqImage(stack.liquid.uiIcon, + () -> build.liquids != null && build.liquids.get(stack.liquid) > 0)).size(Vars.iconMed).padRight(8); + if(++i % 4 == 0) table.row(); + } + } + + @Override + public void update(Building build){ + float mult = multiplier.get(build); + for(LiquidStack stack : liquids.get(build)){ + build.liquids.remove(stack.liquid, stack.amount * build.edelta() * mult); + } + } + + @Override + public float efficiency(Building build){ + float ed = build.edelta(); + if(ed <= 0.00000001f) return 0f; + float min = 1f; + for(LiquidStack stack : liquids.get(build)){ + min = Math.min(build.liquids.get(stack.liquid) / (stack.amount * ed * multiplier.get(build)), min); + } + return min; + } +}