Merge remote-tracking branch 'origin/master'

This commit is contained in:
Anuken
2019-07-13 14:04:06 -04:00
6 changed files with 84 additions and 23 deletions

View File

@@ -4,9 +4,13 @@ import io.anuke.arc.function.*;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.Strings;
import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.content.Items;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.game.Rules;
import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.ItemType;
import static io.anuke.mindustry.Vars.tilesize;
@@ -14,10 +18,12 @@ public class CustomRulesDialog extends FloatingDialog{
private Table main;
private Rules rules;
private Supplier<Rules> resetter;
private LoadoutDialog loadoutDialog;
public CustomRulesDialog(){
super("$mode.custom");
loadoutDialog = new LoadoutDialog();
setFillParent(true);
shown(this::setup);
addCloseButton();
@@ -58,6 +64,19 @@ public class CustomRulesDialog extends FloatingDialog{
number("$rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources);
number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier);
main.addButton("$configure",
() -> loadoutDialog.show(
Blocks.coreShard.itemCapacity,
() -> rules.loadout,
() -> {
rules.loadout.clear();
rules.loadout.add(new ItemStack(Items.copper, 200));
},
() -> {}, () -> {},
item -> item.type == ItemType.material
)).left().width(300f);
main.row();
title("$rules.title.player");
number("$rules.playerdamagemultiplier", f -> rules.playerDamageMultiplier = f, () -> rules.playerDamageMultiplier);
number("$rules.playerhealthmultiplier", f -> rules.playerHealthMultiplier = f, () -> rules.playerHealthMultiplier);

View File

@@ -1,16 +1,22 @@
package io.anuke.mindustry.ui.dialogs;
import io.anuke.arc.collection.Array;
import io.anuke.arc.function.Predicate;
import io.anuke.arc.function.Supplier;
import io.anuke.arc.scene.ui.TextButton;
import io.anuke.mindustry.type.*;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Vars.data;
public class ZoneLoadoutDialog extends FloatingDialog{
private Zone zone;
public class LoadoutDialog extends FloatingDialog{
private Runnable hider;
private Supplier<Array<ItemStack>> supplier;
private Runnable resetter;
private Runnable updater;
private Predicate<Item> filter;
private int capacity;
public ZoneLoadoutDialog(){
public LoadoutDialog(){
super("$configure");
setFillParent(false);
addCloseButton();
@@ -22,15 +28,19 @@ public class ZoneLoadoutDialog extends FloatingDialog{
});
buttons.row();
buttons.addButton("$settings.reset", () -> {
zone.resetStartingItems();
zone.updateLaunchCost();
resetter.run();
updater.run();
setup();
}).size(210f, 64f);
}
public void show(Zone zone, Runnable hider){
public void show(int capacity, Supplier<Array<ItemStack>> supplier, Runnable reseter, Runnable updater, Runnable hider, Predicate<Item> filter){
this.resetter = reseter;
this.supplier = supplier;
this.updater = updater;
this.capacity = capacity;
this.hider = hider;
this.zone = zone;
this.filter = filter;
show();
}
@@ -39,20 +49,20 @@ public class ZoneLoadoutDialog extends FloatingDialog{
float bsize = 40f;
int step = 50;
for(ItemStack stack : zone.getStartingItems()){
for(ItemStack stack : supplier.get()){
cont.addButton("x", "clear-partial", () -> {
zone.getStartingItems().remove(stack);
zone.updateLaunchCost();
supplier.get().remove(stack);
updater.run();
setup();
}).size(bsize);
cont.addButton("-", "clear-partial", () -> {
stack.amount = Math.max(stack.amount - step, 0);
zone.updateLaunchCost();
updater.run();
}).size(bsize);
cont.addButton("+", "clear-partial", () -> {
stack.amount = Math.min(stack.amount + step, zone.loadout.core().itemCapacity);
zone.updateLaunchCost();
stack.amount = Math.min(stack.amount + step, capacity);
updater.run();
}).size(bsize);
cont.addImage(stack.item.icon(Item.Icon.medium)).size(8 * 3).padRight(4);
@@ -64,10 +74,10 @@ public class ZoneLoadoutDialog extends FloatingDialog{
cont.addButton("$add", () -> {
FloatingDialog dialog = new FloatingDialog("");
dialog.setFillParent(false);
for(Item item : content.items().select(item -> data.getItem(item) > 0 && item.type == ItemType.material && zone.getStartingItems().find(stack -> stack.item == item) == null)){
for(Item item : content.items().select(item -> filter.test(item) && item.type == ItemType.material && supplier.get().find(stack -> stack.item == item) == null)){
TextButton button = dialog.cont.addButton("", "clear", () -> {
zone.getStartingItems().add(new ItemStack(item, 0));
zone.updateLaunchCost();
supplier.get().add(new ItemStack(item, 0));
updater.run();
setup();
dialog.hide();
}).size(300f, 36f).get();
@@ -78,7 +88,7 @@ public class ZoneLoadoutDialog extends FloatingDialog{
dialog.cont.row();
}
dialog.show();
}).colspan(4).size(100f, bsize).left().disabled(b -> !content.items().contains(item -> data.getItem(item) > 0 && item.type == ItemType.material && !zone.getStartingItems().contains(stack -> stack.item == item)));
}).colspan(4).size(100f, bsize).left().disabled(b -> !content.items().contains(item -> filter.test(item) && !supplier.get().contains(stack -> stack.item == item)));
pack();
}
}

View File

@@ -13,7 +13,7 @@ import io.anuke.mindustry.world.Block.Icon;
import static io.anuke.mindustry.Vars.*;
public class ZoneInfoDialog extends FloatingDialog{
private ZoneLoadoutDialog loadout = new ZoneLoadoutDialog();
private LoadoutDialog loadout = new LoadoutDialog();
public ZoneInfoDialog(){
super("");
@@ -101,7 +101,16 @@ public class ZoneInfoDialog extends FloatingDialog{
cont.row();
cont.addImage("whiteui").color(Pal.accent).height(3).pad(6).growX();
cont.row();
cont.addButton(zone.canConfigure() ? "$configure" : Core.bundle.format("configure.locked", zone.configureWave), () -> loadout.show(zone, rebuildItems)).fillX().pad(3).disabled(b -> !zone.canConfigure());
cont.addButton(zone.canConfigure() ? "$configure" : Core.bundle.format("configure.locked", zone.configureWave),
() -> loadout.show(
zone.loadout.core().itemCapacity,
() -> zone.getStartingItems(),
() -> zone.resetStartingItems(),
() -> zone.updateLaunchCost(),
rebuildItems,
item -> data.getItem(item) > 0 && item.type == ItemType.material
)
).fillX().pad(3).disabled(b -> !zone.canConfigure());
cont.row();
cont.table(res -> {
res.add("$zone.resources").padRight(6);