Skip to content

Commit 17163c2

Browse files
committed
Merge branch 'MEEPofFaith-power-gen-stats'
2 parents dc8babf + 3ec6a74 commit 17163c2

13 files changed

+112
-37
lines changed

core/assets/bundles/bundle.properties

+1
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,7 @@ stat.buildspeedmultiplier = Build Speed Multiplier
10471047
stat.reactive = Reacts
10481048
stat.immunities = Immunities
10491049
stat.healing = Healing
1050+
stat.efficiency = [stat]{0}% Efficiency
10501051

10511052
ability.forcefield = Force Field
10521053
ability.forcefield.description = Projects a force shield that absorbs bullets

core/src/mindustry/ui/dialogs/ContentInfoDialog.java

-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ public void show(UnlockableContent content){
8383
value.display(inset);
8484
inset.add().size(10f);
8585
}
86-
8786
}).fillX().padLeft(10);
8887
table.row();
8988
}

core/src/mindustry/world/blocks/power/ConsumeGenerator.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public void init(){
6464

6565
@Override
6666
public void setStats(){
67+
stats.timePeriod = itemDuration;
6768
super.setStats();
6869

6970
if(hasItems){
@@ -80,12 +81,14 @@ public class ConsumeGeneratorBuild extends GeneratorBuild{
8081

8182
@Override
8283
public void updateEfficiencyMultiplier(){
84+
efficiencyMultiplier = 1f;
8385
if(filterItem != null){
8486
float m = filterItem.efficiencyMultiplier(this);
85-
if(m > 0) efficiencyMultiplier = m;
86-
}else if(filterLiquid != null){
87+
if(m > 0) efficiencyMultiplier *= m;
88+
}
89+
if(filterLiquid != null){
8790
float m = filterLiquid.efficiencyMultiplier(this);
88-
if(m > 0) efficiencyMultiplier = m;
91+
if(m > 0) efficiencyMultiplier *= m;
8992
}
9093
}
9194

Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package mindustry.world.consumers;
22

3-
import mindustry.gen.*;
3+
import mindustry.type.*;
44

55
/** For mods. I don't use this (yet). */
6-
public class ConsumeItemCharged extends ConsumeItemFilter{
6+
public class ConsumeItemCharged extends ConsumeItemEfficiency{
77
public float minCharge;
88

99
public ConsumeItemCharged(float minCharge){
@@ -16,8 +16,7 @@ public ConsumeItemCharged(){
1616
}
1717

1818
@Override
19-
public float efficiencyMultiplier(Building build){
20-
var item = getConsumed(build);
21-
return item == null ? 0f : item.charge;
19+
public float itemEfficiencyMultiplier(Item item){
20+
return item.charge;
2221
}
2322
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package mindustry.world.consumers;
2+
3+
import arc.func.*;
4+
import mindustry.type.*;
5+
import mindustry.world.meta.*;
6+
7+
public class ConsumeItemEfficiency extends ConsumeItemFilter{
8+
9+
public ConsumeItemEfficiency(Boolf<Item> item){
10+
super(item);
11+
}
12+
13+
public ConsumeItemEfficiency(){
14+
}
15+
16+
@Override
17+
public void display(Stats stats){
18+
stats.add(booster ? Stat.booster : Stat.input, StatValues.itemEffMultiplier(this::itemEfficiencyMultiplier, stats.timePeriod, filter));
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package mindustry.world.consumers;
22

3-
import mindustry.gen.*;
3+
import mindustry.type.*;
44

5-
public class ConsumeItemExplosive extends ConsumeItemFilter{
5+
public class ConsumeItemExplosive extends ConsumeItemEfficiency{
66
public float minExplosiveness;
77

88
public ConsumeItemExplosive(float minCharge){
@@ -15,8 +15,7 @@ public ConsumeItemExplosive(){
1515
}
1616

1717
@Override
18-
public float efficiencyMultiplier(Building build){
19-
var item = getConsumed(build);
20-
return item == null ? 0f : item.explosiveness;
18+
public float itemEfficiencyMultiplier(Item item){
19+
return item.explosiveness;
2120
}
2221
}

core/src/mindustry/world/consumers/ConsumeItemFilter.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ public float efficiency(Building build){
6666

6767
@Override
6868
public void display(Stats stats){
69-
stats.add(booster ? Stat.booster : Stat.input, stats.timePeriod < 0 ? StatValues.items(filter) : StatValues.items(stats.timePeriod, filter));
69+
stats.add(booster ? Stat.booster : Stat.input, StatValues.items(stats.timePeriod, filter));
70+
}
71+
72+
@Override
73+
public float efficiencyMultiplier(Building build){
74+
var item = getConsumed(build);
75+
return item == null ? 0f : itemEfficiencyMultiplier(item);
76+
}
77+
78+
public float itemEfficiencyMultiplier(Item item){
79+
return 1f;
7080
}
7181
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package mindustry.world.consumers;
22

3-
import mindustry.gen.*;
3+
import mindustry.type.*;
44

5-
public class ConsumeItemFlammable extends ConsumeItemFilter{
5+
public class ConsumeItemFlammable extends ConsumeItemEfficiency{
66
public float minFlammability;
77

88
public ConsumeItemFlammable(float minFlammability){
@@ -15,8 +15,7 @@ public ConsumeItemFlammable(){
1515
}
1616

1717
@Override
18-
public float efficiencyMultiplier(Building build){
19-
var item = getConsumed(build);
20-
return item == null ? 0f : item.flammability;
18+
public float itemEfficiencyMultiplier(Item item){
19+
return item.flammability;
2120
}
2221
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package mindustry.world.consumers;
22

3-
import mindustry.gen.*;
3+
import mindustry.type.*;
44

5-
public class ConsumeItemRadioactive extends ConsumeItemFilter{
5+
public class ConsumeItemRadioactive extends ConsumeItemEfficiency{
66
public float minRadioactivity;
77

88
public ConsumeItemRadioactive(float minRadioactivity){
@@ -15,8 +15,7 @@ public ConsumeItemRadioactive(){
1515
}
1616

1717
@Override
18-
public float efficiencyMultiplier(Building build){
19-
var item = getConsumed(build);
20-
return item == null ? 0f : item.radioactivity;
18+
public float itemEfficiencyMultiplier(Item item){
19+
return item.radioactivity;
2120
}
2221
}

core/src/mindustry/world/consumers/ConsumeLiquidFilter.java

+10
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ public float efficiency(Building build){
5454
return liq != null ? Math.min(build.liquids.get(liq) / (amount * ed * multiplier.get(build)), 1f) : 0f;
5555
}
5656

57+
@Override
58+
public float efficiencyMultiplier(Building build){
59+
var liq = getConsumed(build);
60+
return liq == null ? 0 : liquidEfficiencyMultiplier(liq);
61+
}
62+
5763
public @Nullable Liquid getConsumed(Building build){
5864
if(filter.get(build.liquids.current()) && build.liquids.currentAmount() > 0){
5965
return build.liquids.current();
@@ -79,4 +85,8 @@ public void display(Stats stats){
7985
public boolean consumes(Liquid liquid){
8086
return filter.get(liquid);
8187
}
88+
89+
public float liquidEfficiencyMultiplier(Liquid liquid){
90+
return 1f;
91+
}
8292
}

core/src/mindustry/world/consumers/ConsumeLiquidFlammable.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package mindustry.world.consumers;
22

3-
import mindustry.gen.*;
3+
import mindustry.type.*;
4+
import mindustry.world.meta.*;
45

56
public class ConsumeLiquidFlammable extends ConsumeLiquidFilter{
67
public float minFlammability;
@@ -20,8 +21,12 @@ public ConsumeLiquidFlammable(){
2021
}
2122

2223
@Override
23-
public float efficiencyMultiplier(Building build){
24-
var liq = getConsumed(build);
25-
return liq == null ? 0f : liq.flammability;
24+
public void display(Stats stats){
25+
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquidEffMultiplier(l -> l.flammability, amount * 60f, filter));
26+
}
27+
28+
@Override
29+
public float liquidEfficiencyMultiplier(Liquid liquid){
30+
return liquid.flammability;
2631
}
2732
}

core/src/mindustry/world/consumers/ConsumeLiquidsDynamic.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package mindustry.world.consumers;
22

3-
import arc.func.Func;
4-
import arc.scene.ui.layout.Table;
5-
import mindustry.Vars;
6-
import mindustry.gen.Building;
7-
import mindustry.type.LiquidStack;
8-
import mindustry.ui.ReqImage;
9-
import mindustry.world.Block;
3+
import arc.func.*;
4+
import arc.scene.ui.layout.*;
5+
import mindustry.*;
6+
import mindustry.gen.*;
7+
import mindustry.type.*;
8+
import mindustry.ui.*;
9+
import mindustry.world.*;
1010

1111
public class ConsumeLiquidsDynamic extends Consume{
1212
public final Func<Building, LiquidStack[]> liquids;

core/src/mindustry/world/meta/StatValues.java

+32-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public static StatValue percentModifier(float value){
112112
}
113113

114114
public static StatValue liquid(Liquid liquid, float amount, boolean perSecond){
115-
return table -> table.add(displayLiquid(liquid, amount, perSecond));
115+
return table -> table.add(displayLiquid(liquid, amount, perSecond)).left();
116116
}
117117

118118
public static StatValue liquids(Boolf<Liquid> filter, float amount, boolean perSecond){
@@ -459,6 +459,37 @@ public static StatValue boosters(float reload, float maxUsed, float multiplier,
459459
};
460460
}
461461

462+
public static StatValue itemEffMultiplier(Floatf<Item> efficiency, float timePeriod, Boolf<Item> filter){
463+
return table -> {
464+
table.getCells().peek().growX(); //Expand the spacer on the row above to push everything to the left
465+
table.row();
466+
table.table(c -> {
467+
for(Item item : content.items().select(i -> filter.get(i) && i.unlockedNow() && !i.isHidden())){
468+
c.table(Styles.grayPanel, b -> {
469+
b.image(item.uiIcon).size(40).pad(10f).left().scaling(Scaling.fit);
470+
b.add(item.localizedName + (timePeriod > 0 ? "\n[lightgray]" + Strings.autoFixed(1f / (timePeriod / 60f), 2) + StatUnit.perSecond.localized() : "")).left().grow();
471+
b.add(Core.bundle.format("stat.efficiency", fixValue(efficiency.get(item) * 100f))).right().pad(10f).padRight(15f);
472+
}).growX().pad(5).row();
473+
}
474+
}).growX().colspan(table.getColumns()).row();
475+
};
476+
}
477+
478+
public static StatValue liquidEffMultiplier(Floatf<Liquid> efficiency, float amount, Boolf<Liquid> filter){
479+
return table -> {
480+
table.getCells().peek().growX(); //Expand the spacer on the row above to push everything to the left
481+
table.row();
482+
table.table(c -> {
483+
for(Liquid liquid : content.liquids().select(l -> filter.get(l) && l.unlockedNow() && !l.isHidden())){
484+
c.table(Styles.grayPanel, b -> {
485+
b.add(displayLiquid(liquid, amount, true)).pad(10f).left().grow();
486+
b.add(Core.bundle.format("stat.efficiency", fixValue(efficiency.get(liquid) * 100f))).right().pad(10f).padRight(15f);
487+
}).growX().pad(5).row();
488+
}
489+
}).growX().colspan(table.getColumns()).row();
490+
};
491+
}
492+
462493
public static StatValue speedBoosters(String unit, float amount, float speed, boolean strength, Boolf<Liquid> filter){
463494
return table -> {
464495
table.row();

0 commit comments

Comments
 (0)