diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 3f28157541..43ae441a01 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -996,7 +996,8 @@ stat.buildspeedmultiplier = Build Speed Multiplier stat.reactive = Reacts stat.immunities = Immunities stat.healing = Healing -stat.efficiency = [accent]{0}% Efficiency +stat.efficiency = [stat]{0}% Efficiency +stat.explosive = [negstat]Explosive ability.forcefield = Force Field ability.repairfield = Repair Field diff --git a/core/src/mindustry/world/blocks/power/ConsumeGenerator.java b/core/src/mindustry/world/blocks/power/ConsumeGenerator.java index 1347a2141e..5b52cc3d16 100644 --- a/core/src/mindustry/world/blocks/power/ConsumeGenerator.java +++ b/core/src/mindustry/world/blocks/power/ConsumeGenerator.java @@ -73,6 +73,14 @@ public class ConsumeGenerator extends PowerGenerator{ if(outputLiquid != null){ stats.add(Stat.output, StatValues.liquid(outputLiquid.liquid, outputLiquid.amount * 60f, true)); } + + if(filterItem != null){ + ConsumeItemExplode explode = findConsumer(c -> c instanceof ConsumeItemExplode); + if(explode != null){ + stats.remove(Stat.input); + stats.add(Stat.input, StatValues.itemEffMultiplier(i -> filterItem.itemEfficiencyMultiplier(i), filterItem.filter, explode.filter)); + } + } } public class ConsumeGeneratorBuild extends GeneratorBuild{ diff --git a/core/src/mindustry/world/consumers/ConsumeItemCharged.java b/core/src/mindustry/world/consumers/ConsumeItemCharged.java index f466ec4b28..3139143024 100644 --- a/core/src/mindustry/world/consumers/ConsumeItemCharged.java +++ b/core/src/mindustry/world/consumers/ConsumeItemCharged.java @@ -1,6 +1,7 @@ package mindustry.world.consumers; import mindustry.gen.*; +import mindustry.type.*; import mindustry.world.meta.*; /** For mods. I don't use this (yet). */ @@ -16,14 +17,13 @@ public class ConsumeItemCharged extends ConsumeItemFilter{ this(0.2f); } - @Override - public float efficiencyMultiplier(Building build){ - var item = getConsumed(build); - return item == null ? 0f : item.charge; - } - @Override public void display(Stats stats){ stats.add(booster ? Stat.booster : Stat.input, StatValues.itemEffMultiplier(i -> i.charge, filter)); } + + @Override + public float itemEfficiencyMultiplier(Item item){ + return item.charge; + } } diff --git a/core/src/mindustry/world/consumers/ConsumeItemExplosive.java b/core/src/mindustry/world/consumers/ConsumeItemExplosive.java index 776008542c..e0801c1c7a 100644 --- a/core/src/mindustry/world/consumers/ConsumeItemExplosive.java +++ b/core/src/mindustry/world/consumers/ConsumeItemExplosive.java @@ -1,6 +1,7 @@ package mindustry.world.consumers; import mindustry.gen.*; +import mindustry.type.*; import mindustry.world.meta.*; public class ConsumeItemExplosive extends ConsumeItemFilter{ @@ -15,14 +16,13 @@ public class ConsumeItemExplosive extends ConsumeItemFilter{ this(0.2f); } - @Override - public float efficiencyMultiplier(Building build){ - var item = getConsumed(build); - return item == null ? 0f : item.explosiveness; - } - @Override public void display(Stats stats){ stats.add(booster ? Stat.booster : Stat.input, StatValues.itemEffMultiplier(i -> i.explosiveness, filter)); } + + @Override + public float itemEfficiencyMultiplier(Item item){ + return item.explosiveness; + } } diff --git a/core/src/mindustry/world/consumers/ConsumeItemFilter.java b/core/src/mindustry/world/consumers/ConsumeItemFilter.java index 8993bd59e1..422a23752d 100644 --- a/core/src/mindustry/world/consumers/ConsumeItemFilter.java +++ b/core/src/mindustry/world/consumers/ConsumeItemFilter.java @@ -68,4 +68,14 @@ public class ConsumeItemFilter extends Consume{ public void display(Stats stats){ stats.add(booster ? Stat.booster : Stat.input, stats.timePeriod < 0 ? StatValues.items(filter) : StatValues.items(stats.timePeriod, filter)); } + + @Override + public float efficiencyMultiplier(Building build){ + var item = getConsumed(build); + return item == null ? 0f : itemEfficiencyMultiplier(item); + } + + public float itemEfficiencyMultiplier(Item item){ + return 1f; + } } diff --git a/core/src/mindustry/world/consumers/ConsumeItemFlammable.java b/core/src/mindustry/world/consumers/ConsumeItemFlammable.java index 1515cf010a..d9d113f809 100644 --- a/core/src/mindustry/world/consumers/ConsumeItemFlammable.java +++ b/core/src/mindustry/world/consumers/ConsumeItemFlammable.java @@ -1,6 +1,7 @@ package mindustry.world.consumers; import mindustry.gen.*; +import mindustry.type.*; import mindustry.world.meta.*; public class ConsumeItemFlammable extends ConsumeItemFilter{ @@ -15,14 +16,13 @@ public class ConsumeItemFlammable extends ConsumeItemFilter{ this(0.2f); } - @Override - public float efficiencyMultiplier(Building build){ - var item = getConsumed(build); - return item == null ? 0f : item.flammability; - } - @Override public void display(Stats stats){ stats.add(booster ? Stat.booster : Stat.input, StatValues.itemEffMultiplier(i -> i.flammability, filter)); } + + @Override + public float itemEfficiencyMultiplier(Item item){ + return item.flammability; + } } diff --git a/core/src/mindustry/world/consumers/ConsumeItemRadioactive.java b/core/src/mindustry/world/consumers/ConsumeItemRadioactive.java index 03583d747a..8d96bfbc83 100644 --- a/core/src/mindustry/world/consumers/ConsumeItemRadioactive.java +++ b/core/src/mindustry/world/consumers/ConsumeItemRadioactive.java @@ -1,6 +1,7 @@ package mindustry.world.consumers; import mindustry.gen.*; +import mindustry.type.*; import mindustry.world.meta.*; public class ConsumeItemRadioactive extends ConsumeItemFilter{ @@ -15,14 +16,13 @@ public class ConsumeItemRadioactive extends ConsumeItemFilter{ this(0.2f); } - @Override - public float efficiencyMultiplier(Building build){ - var item = getConsumed(build); - return item == null ? 0f : item.radioactivity; - } - @Override public void display(Stats stats){ stats.add(booster ? Stat.booster : Stat.input, StatValues.itemEffMultiplier(i -> i.radioactivity, filter)); } + + @Override + public float itemEfficiencyMultiplier(Item item){ + return item.radioactivity; + } } diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index 045ecac88e..68b1873570 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -292,7 +292,7 @@ public class StatValues{ }; } - public static StatValue itemEffMultiplier(Floatf efficiency, Boolf filter){ + public static StatValue itemEffMultiplier(Floatf efficiency, Boolf filter, Boolf explosive){ return table -> { table.row(); table.table(c -> { @@ -300,7 +300,14 @@ public class StatValues{ c.table(Styles.grayPanel, b -> { b.image(item.uiIcon).size(40).pad(10f).left().scaling(Scaling.fit); b.add(item.localizedName).left().grow(); - b.add(Core.bundle.format("stat.efficiency", fixValue(efficiency.get(item) * 100f))).right().pad(10f).padRight(15f); + b.table(e -> { + e.add(Core.bundle.format("stat.efficiency", fixValue(efficiency.get(item) * 100f))).right().labelAlign(Align.right); + if(explosive.get(item)){ + e.row(); + e.add(Core.bundle.get("stat.explosive")).right().labelAlign(Align.right); + } + }).right().pad(10f).padRight(15f); + }).growX().pad(5).row(); } }).growX().colspan(table.getColumns()); @@ -308,6 +315,10 @@ public class StatValues{ }; } + public static StatValue itemEffMultiplier(Floatf efficiency, Boolf filter){ + return itemEffMultiplier(efficiency, filter, i -> false); + } + public static StatValue liquidEffMultiplier(Floatf efficiency, Boolf filter){ return table -> { table.row();