Skip to content

Commit a39ce6a

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 398eadc + 11b59ab commit a39ce6a

File tree

2 files changed

+134
-6
lines changed

2 files changed

+134
-6
lines changed

src/exogenesis/content/ExoBlocks.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import exogenesis.type.bullet.*;
88
import exogenesis.type.bullet.vanilla.*;
99
import exogenesis.type.weather.LightningStorm;
10+
import exogenesis.world.blocks.unit.UnitCrafter;
1011
import exogenesis.world.power.LightningRod;
1112
import exogenesis.world.turrets.PowerShootTypeTurret;
1213
import exogenesis.world.turrets.SpeedupTurret;
@@ -4139,7 +4140,7 @@ Items.tungsten, new RailBulletType(){{
41394140
new UnitType[]{UnitTypes.avert, UnitTypes.obviate}
41404141
);
41414142
}};
4142-
trueMechAssembler = new UnitAssembler("true-mech-assembler"){{
4143+
trueMechAssembler = new UnitCrafter("true-mech-assembler"){{
41434144
requirements(Category.units, with(Items.thorium, 500, Items.oxide, 150, Items.carbide, 80, Items.silicon, 500));
41444145
regionSuffix = "-dark";
41454146
size = 5;
@@ -4153,7 +4154,7 @@ Items.tungsten, new RailBulletType(){{
41534154
consumePower(3f);
41544155
consumeLiquid(Liquids.cyanogen, 9f / 60f);
41554156
}};
4156-
supportAssembler = new UnitAssembler("support-assembler"){{
4157+
supportAssembler = new UnitCrafter("support-assembler"){{
41574158
requirements(Category.units, with(Items.carbide, 100, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 800, Items.thorium, 400));
41584159
regionSuffix = "-dark";
41594160
size = 5;
@@ -4166,7 +4167,7 @@ Items.tungsten, new RailBulletType(){{
41664167
consumePower(3f);
41674168
consumeLiquid(Liquids.cyanogen, 12f / 60f);
41684169
}};
4169-
hoverAssembler = new UnitAssembler("hover-assembler"){{
4170+
hoverAssembler = new UnitCrafter("hover-assembler"){{
41704171
requirements(Category.units, with(Items.carbide, 200, Items.thorium, 600, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 900));
41714172
regionSuffix = "-dark";
41724173
size = 5;
@@ -4180,7 +4181,7 @@ Items.tungsten, new RailBulletType(){{
41804181
consumePower(3.5f);
41814182
consumeLiquid(Liquids.cyanogen, 12f / 60f);
41824183
}};
4183-
airTitanAssembler = new UnitAssembler("air-titan-assembler"){{
4184+
airTitanAssembler = new UnitCrafter("air-titan-assembler"){{
41844185
requirements(Category.units, with(Items.thorium, 500, Items.oxide, 150, Items.carbide, 80, Items.silicon, 500));
41854186
regionSuffix = "-dark";
41864187
size = 6;
@@ -4194,7 +4195,7 @@ Items.tungsten, new RailBulletType(){{
41944195
consumePower(3f);
41954196
consumeLiquid(Liquids.cyanogen, 9f / 60f);
41964197
}};
4197-
groundTitanAssembler = new UnitAssembler("ground-titan-assembler"){{
4198+
groundTitanAssembler = new UnitCrafter("ground-titan-assembler"){{
41984199
requirements(Category.units, with(Items.carbide, 100, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 800, Items.thorium, 400));
41994200
regionSuffix = "-dark";
42004201
size = 6;
@@ -4209,7 +4210,7 @@ Items.tungsten, new RailBulletType(){{
42094210
consumePower(3f);
42104211
consumeLiquid(Liquids.cyanogen, 12f / 60f);
42114212
}};
4212-
leggedTitanAssembler = new UnitAssembler("legged-titan-assembler"){{
4213+
leggedTitanAssembler = new UnitCrafter("legged-titan-assembler"){{
42134214
requirements(Category.units, with(Items.carbide, 200, Items.thorium, 600, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 900));
42144215
regionSuffix = "-dark";
42154216
size = 6;
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package exogenesis.world.blocks.unit;
2+
3+
import arc.Core;
4+
import arc.graphics.Color;
5+
import arc.scene.ui.layout.Table;
6+
import arc.struct.Seq;
7+
import arc.util.Scaling;
8+
import arc.util.Strings;
9+
import mindustry.content.UnitTypes;
10+
import mindustry.gen.Icon;
11+
import mindustry.graphics.Pal;
12+
import mindustry.type.LiquidStack;
13+
import mindustry.type.UnitType;
14+
import mindustry.ui.Styles;
15+
import mindustry.world.blocks.ItemSelection;
16+
import mindustry.world.blocks.units.UnitAssembler;
17+
import mindustry.world.meta.Stat;
18+
import mindustry.world.meta.StatValues;
19+
20+
public class UnitCrafter extends UnitAssembler {
21+
public UnitCrafter(String name) {
22+
super(name);
23+
configurable = true;
24+
copyConfig = true;
25+
26+
config(Integer.class, (UnitCrafterBuild e, Integer value) -> e.currentTier = (value < 0 || value > plans.size - 1)? 0: value);
27+
config(UnitType.class, (UnitCrafterBuild e, UnitType value) -> {
28+
if(!configurable) return;
29+
for (int i = 0; i < plans.size; i++) {
30+
UnitType unit = plans.get(i).unit;
31+
if (value == unit){
32+
e.currentTier = i;
33+
return;
34+
}
35+
}
36+
e.currentTier = 0;
37+
});
38+
39+
configClear((UnitCrafterBuild e) -> e.currentTier = 0);
40+
}
41+
42+
@Override
43+
public void setStats() {
44+
super.setStats();
45+
stats.remove(Stat.output);
46+
47+
stats.add(Stat.output, table -> {
48+
table.row();
49+
for(var plan : plans){
50+
table.table(Styles.grayPanel, t -> {
51+
52+
if(plan.unit.isBanned()){
53+
t.image(Icon.cancel).color(Pal.remove).size(40).pad(10);
54+
return;
55+
}
56+
57+
if(plan.unit.unlockedNow()){
58+
t.image(plan.unit.uiIcon).scaling(Scaling.fit).size(40).pad(10f).left().with(i -> StatValues.withTooltip(i, plan.unit));
59+
t.table(info -> {
60+
info.defaults().left();
61+
info.add(plan.unit.localizedName);
62+
info.row();
63+
info.add(Strings.autoFixed(plan.time / 60f, 1) + " " + Core.bundle.get("unit.seconds")).color(Color.lightGray);
64+
}).left();
65+
66+
t.table(req -> {
67+
req.add().grow(); //it refuses to go to the right unless I do this. please help.
68+
69+
req.table(solid -> {
70+
int length = 0;
71+
if(plan.itemReq != null){
72+
for(int i = 0; i < plan.itemReq.length; i++){
73+
if(length % 6 == 0){
74+
solid.row();
75+
}
76+
solid.add(StatValues.stack(plan.itemReq[i])).pad(5);
77+
length++;
78+
}
79+
}
80+
81+
for(int i = 0; i < plan.requirements.size; i++){
82+
if(length % 6 == 0){
83+
solid.row();
84+
}
85+
solid.add(StatValues.stack(plan.requirements.get(i))).pad(5);
86+
length++;
87+
}
88+
}).right();
89+
90+
LiquidStack[] stacks = plan.liquidReq;
91+
if(stacks != null){
92+
for(int i = 0; i < plan.liquidReq.length; i++){
93+
req.row();
94+
95+
req.add().grow(); //another one.
96+
97+
req.add(StatValues.displayLiquid(stacks[i].liquid, stacks[i].amount * 60f, true)).right();
98+
}
99+
}
100+
}).grow().pad(10f);
101+
}else{
102+
t.image(Icon.lock).color(Pal.darkerGray).size(40).pad(10);
103+
}
104+
}).growX().pad(5);
105+
table.row();
106+
}
107+
});
108+
}
109+
110+
public class UnitCrafterBuild extends UnitAssemblerBuild {
111+
@Override
112+
public void checkTier() {}
113+
114+
@Override
115+
public void buildConfiguration(Table table) {
116+
Seq<UnitType> unitTypes = new Seq<>();
117+
plans.each(plan -> unitTypes.add(plan.unit));
118+
ItemSelection.buildTable(block, table, unitTypes, () -> plans.get(currentTier).unit, this::configure);
119+
}
120+
121+
@Override
122+
public UnitType config() {
123+
if (currentTier < 0 || currentTier >= plans.size - 1) return UnitTypes.alpha;
124+
return plans.get(currentTier).unit;
125+
}
126+
}
127+
}

0 commit comments

Comments
 (0)