Custom launch items

This commit is contained in:
Anuken
2020-06-28 13:33:53 -04:00
parent 6386cae19a
commit b3f29f100d
12 changed files with 85 additions and 36 deletions

View File

@@ -2,7 +2,6 @@ package mindustry.ui.dialogs;
import arc.*;
import arc.graphics.g2d.*;
import arc.math.*;
import arc.scene.style.*;
import arc.scene.ui.*;
import arc.scene.ui.layout.*;

View File

@@ -1,8 +1,10 @@
package mindustry.ui.dialogs;
import arc.*;
import arc.func.*;
import arc.scene.ui.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import mindustry.game.*;
import mindustry.gen.*;
import mindustry.type.*;
@@ -14,7 +16,14 @@ import static mindustry.Vars.*;
/** Dialog for selecting loadout at sector launch. */
public class LaunchLoadoutDialog extends BaseDialog{
LoadoutDialog loadout = new LoadoutDialog();
//total as a map
ObjectIntMap<Item> totalMap = new ObjectIntMap<>();
//total required items
Seq<ItemStack> total = new Seq<>();
//currently selected schematic
Schematic selected;
//validity of loadout items
boolean valid;
public LaunchLoadoutDialog(){
@@ -24,8 +33,51 @@ public class LaunchLoadoutDialog extends BaseDialog{
public void show(CoreBlock core, Building build, Runnable confirm){
cont.clear();
buttons.clear();
totalMap.clear();
Seq<ItemStack> stacks = universe.getLaunchResources();
addCloseButton();
//updates sum requirements
Runnable update = () -> {
totalMap.clear();
total.clear();
selected.requirements().each(i -> totalMap.increment(i.item, i.amount));
universe.getLaunchResources().each(i -> totalMap.increment(i.item, i.amount));
for(Item item : content.items()){
if(totalMap.containsKey(item)) total.add(new ItemStack(item, totalMap.get(item)));
}
valid = build.items.has(total);
};
Cons<Table> rebuild = table -> {
table.clearChildren();
int i = 0;
for(ItemStack s : total){
table.image(s.item.icon(Cicon.small)).left();
table.add((build.items.has(s.item, s.amount)) ? "[lightgray]" + s.amount + "" :
"[scarlet]" + (Math.min(build.items.get(s.item), s.amount) + "[lightgray]/" + s.amount)).padLeft(2).left().padRight(4);
if(++i % 4 == 0){
table.row();
}
}
};
Table items = new Table();
Runnable rebuildItems = () -> rebuild.get(items);
buttons.button("$resources", Icon.terrain, () -> {
loadout.show(core.itemCapacity, stacks, stacks::clear, () -> {}, () -> {
universe.updateLaunchResources(stacks);
update.run();
rebuildItems.run();
});
});
buttons.button("$launch.text", Icon.ok, () -> {
universe.updateLoadout(core, selected);
confirm.run();
@@ -36,24 +88,6 @@ public class LaunchLoadoutDialog extends BaseDialog{
ButtonGroup<Button> group = new ButtonGroup<>();
selected = universe.getLoadout(core);
Table items = new Table();
Runnable rebuildItems = () -> {
items.clearChildren();
int i = 0;
for(ItemStack s : selected.requirements()){
items.image(s.item.icon(Cicon.small)).left();
items.add((state.rules.infiniteResources || build.items.has(s.item, s.amount)) ? "[lightgray]" + s.amount + "" :
((build.items.has(s.item, s.amount) ? "[lightgray]" : "[scarlet]") + Math.min(build.items.get(s.item), s.amount) + "[lightgray]/" + s.amount))
.padLeft(2).left().padRight(4);
if(++i % 4 == 0){
items.row();
}
}
};
cont.pane(t -> {
int i = 0;
@@ -61,8 +95,8 @@ public class LaunchLoadoutDialog extends BaseDialog{
t.button(b -> b.add(new SchematicImage(s)), Styles.togglet, () -> {
selected = s;
update.run();
rebuildItems.run();
valid = build.items.has(selected.requirements());
}).group(group).pad(4).disabled(!build.items.has(s.requirements())).checked(s == selected).size(200f);
if(++i % cols == 0){
@@ -72,14 +106,11 @@ public class LaunchLoadoutDialog extends BaseDialog{
}).growX().get().setScrollingDisabled(true, false);
cont.row();
cont.add(items);
update.run();
rebuildItems.run();
//TODO configure items to launch with
show();
}
}

View File

@@ -18,7 +18,6 @@ import mindustry.game.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.graphics.g3d.*;
import mindustry.graphics.g3d.PlanetRenderer.*;
import mindustry.type.*;
import mindustry.type.Sector.*;
import mindustry.ui.*;