Cleanup, bugfixes

This commit is contained in:
Anuken
2019-10-05 15:51:29 -04:00
parent e5c7d5dd2f
commit 4b99f7c819
17 changed files with 356 additions and 242 deletions

View File

@@ -1,6 +1,7 @@
package io.anuke.mindustry.ui.dialogs;
import io.anuke.arc.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.function.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.scene.style.*;
@@ -34,9 +35,14 @@ public class CustomRulesDialog extends FloatingDialog{
banDialog.shown(this::rebuildBanned);
banDialog.buttons.addImageTextButton("$addall", Icon.arrow16Small, () -> {
rules.bannedBlocks.addAll(content.blocks());
rules.bannedBlocks.addAll(content.blocks().select(Block::isBuildable));
rebuildBanned();
}).size(210f, 64f);
}).size(180, 64f);
banDialog.buttons.addImageTextButton("$clear", Icon.trash16Small, () -> {
rules.bannedBlocks.clear();
rebuildBanned();
}).size(180, 64f);
setFillParent(true);
shown(this::setup);
@@ -44,40 +50,58 @@ public class CustomRulesDialog extends FloatingDialog{
}
private void rebuildBanned(){
float previousScroll = banDialog.getChildren().isEmpty() ? 0f : ((ScrollPane)banDialog.getChildren().first()).getScrollY();
float previousScroll = banDialog.cont.getChildren().isEmpty() ? 0f : ((ScrollPane)banDialog.cont.getChildren().first()).getScrollY();
banDialog.cont.clear();
banDialog.cont.pane(t -> {
t.margin(10f);
for(Block block : rules.bannedBlocks){
t.table(Styles.flatOver, b -> {
b.left().margin(4f);
b.addImage(block.icon(Cicon.medium));
b.add(block.localizedName).padLeft(3).growX().left().wrap();
b.addImageButton(Icon.cancelSmall, () -> {
if(rules.bannedBlocks.isEmpty()){
t.add("$empty");
}
Array<Block> array = Array.with(rules.bannedBlocks);
array.sort();
int cols = mobile && Core.graphics.isPortrait() ? 1 : mobile ? 2 : 3;
int i = 0;
for(Block block : array){
t.table(Tex.underline, b -> {
b.left().margin(4f);
b.addImage(block.icon(Cicon.medium)).size(Cicon.medium.size).padRight(3);
b.add(block.localizedName).color(Color.lightGray).padLeft(3).growX().left().wrap();
b.addImageButton(Icon.cancelSmall, Styles.clearPartiali, () -> {
rules.bannedBlocks.remove(block);
rebuildBanned();
}).size(70f).pad(-4f).padLeft(0f);
}).size(300f, 70f);
t.row();
}).size(300f, 70f).padRight(5);
if(++i % cols == 0){
t.row();
}
}
}).get().setScrollYForce(previousScroll);
banDialog.cont.row();
banDialog.cont.addImageTextButton("$add", Icon.addSmall, () -> {
FloatingDialog dialog = new FloatingDialog("$add");
content.blocks().each(b -> !rules.bannedBlocks.contains(b), b -> {
int cols = mobile && Core.graphics.isPortrait() ? 4 : 8;
int i = 0;
dialog.cont.addImageButton(new TextureRegionDrawable(b.icon(Cicon.medium)), Styles.cleari, () -> {
rules.bannedBlocks.add(b);
rebuildBanned();
dialog.hide();
}).size(80f);
dialog.cont.pane(t -> {
t.left().margin(14f);
int[] i = {0};
content.blocks().each(b -> !rules.bannedBlocks.contains(b) && b.isBuildable(), b -> {
int cols = mobile && Core.graphics.isPortrait() ? 4 : 12;
t.addImageButton(new TextureRegionDrawable(b.icon(Cicon.medium)), Styles.cleari, () -> {
rules.bannedBlocks.add(b);
rebuildBanned();
dialog.hide();
}).size(60f).get().resizeImage(Cicon.medium.size);
if(++i % cols == 0){
dialog.cont.row();
}
if(++i[0] % cols == 0){
t.row();
}
});
});
dialog.addCloseButton();
dialog.show();
}).size(300f, 64f);

View File

@@ -21,9 +21,7 @@ import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.io.SaveIO.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.type.Zone.*;
import io.anuke.mindustry.ui.*;
import io.anuke.mindustry.ui.Styles;
import io.anuke.mindustry.ui.TreeLayout.*;
import static io.anuke.mindustry.Vars.*;
@@ -156,7 +154,7 @@ public class DeployDialog extends FloatingDialog{
node.allChildren.clear();
node.allChildren.addAll(node.children);
for(ZoneNode other : new ObjectSetIterator<>(nodes)){
if(Structs.contains(other.zone.zoneRequirements, req -> req.zone == node.zone)){
if(other.zone.requirements.contains(req -> req.zone() == node.zone)){
node.allChildren.add(other);
}
}
@@ -164,12 +162,7 @@ public class DeployDialog extends FloatingDialog{
}
boolean hidden(Zone zone){
for(ZoneRequirement other : zone.zoneRequirements){
if(!data.isUnlocked(other.zone)){
return true;
}
}
return false;
return zone.requirements.contains(o -> o.zone() != null && o.zone().locked());
}
void buildButton(Zone zone, Button button){
@@ -258,7 +251,7 @@ public class DeployDialog extends FloatingDialog{
//this.height /= 2f;
nodes.add(this);
arr.selectFrom(content.zones(), other -> other.zoneRequirements.length > 0 && other.zoneRequirements[0].zone == zone);
arr.selectFrom(content.zones(), other -> other.requirements.size > 0 && other.requirements.first().zone() == zone);
children = new ZoneNode[arr.size];
for(int i = 0; i < children.length; i++){

View File

@@ -1,15 +1,15 @@
package io.anuke.mindustry.ui.dialogs;
import io.anuke.arc.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.scene.ui.*;
import io.anuke.arc.scene.ui.layout.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.game.Objectives.*;
import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.type.Zone.*;
import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.*;
@@ -38,8 +38,7 @@ public class ZoneInfoDialog extends FloatingDialog{
if(!zone.unlocked()) return;
ItemStack[] stacks = zone.getLaunchCost();
for(ItemStack stack : stacks){
for(ItemStack stack : zone.getLaunchCost()){
if(stack.amount == 0) continue;
if(i++ % 2 == 0){
@@ -62,31 +61,32 @@ public class ZoneInfoDialog extends FloatingDialog{
cont.table(req -> {
req.defaults().left();
if(zone.zoneRequirements.length > 0){
Array<Objective> zones = zone.requirements.select(o -> !(o instanceof Unlock));
if(!zones.isEmpty()){
req.table(r -> {
r.add("$complete").colspan(2).left();
r.row();
for(ZoneRequirement zreq : zone.zoneRequirements){
for(Objective o : zones){
r.addImage(Icon.terrain).padRight(4);
r.add(!zreq.zone.getRules().attackMode ?
Core.bundle.format("zone.requirement.wave", zreq.wave, zreq.zone.localizedName()) :
Core.bundle.format("zone.requirement", zreq.zone.localizedName)).color(Color.lightGray);
r.addImage(zreq.isComplete() ? Icon.checkSmall : Icon.cancelSmall, zreq.isComplete() ? Color.lightGray : Color.scarlet).padLeft(3);
r.add(o.display()).color(Color.lightGray);
r.addImage(o.complete() ? Icon.checkSmall : Icon.cancelSmall, o.complete() ? Color.lightGray : Color.scarlet).padLeft(3);
r.row();
}
});
}
req.row();
Array<Unlock> blocks = zone.requirements.select(o -> o instanceof Unlock).as(Unlock.class);
if(zone.blockRequirements.length > 0){
if(!blocks.isEmpty()){
req.table(r -> {
r.add("$research.list").colspan(2).left();
r.row();
for(Block block : zone.blockRequirements){
r.addImage(block.icon(Cicon.small)).size(8 * 3).padRight(5);
r.add(block.localizedName).color(Color.lightGray).left();
r.addImage(data.isUnlocked(block) ? Icon.checkSmall : Icon.cancelSmall, data.isUnlocked(block) ? Color.lightGray : Color.scarlet).padLeft(3);
for(Unlock blocko : blocks){
r.addImage(blocko.content.icon(Cicon.small)).size(8 * 3).padRight(5);
r.add(blocko.content.localizedName).color(Color.lightGray).left();
r.addImage(blocko.content.unlocked() ? Icon.checkSmall : Icon.cancelSmall, blocko.content.unlocked() ? Color.lightGray : Color.scarlet).padLeft(3);
r.row();
}
@@ -108,7 +108,7 @@ public class ZoneInfoDialog extends FloatingDialog{
t.left();
t.add("$zone.resources").padRight(6);
if(zone.resources.length > 0){
if(zone.resources.size > 0){
t.table(r -> {
t.left();
int i = 0;
@@ -137,7 +137,7 @@ public class ZoneInfoDialog extends FloatingDialog{
cont.row();
cont.addButton(zone.canConfigure() ? "$configure" : Core.bundle.format("configure.locked", zone.configureWave),
cont.addButton(zone.canConfigure() ? "$configure" : Core.bundle.format("configure.locked", zone.configureObjective.display()),
() -> loadout.show(zone.loadout.core().itemCapacity, zone.getStartingItems(), zone::resetStartingItems, zone::updateLaunchCost, rebuildItems)
).fillX().pad(3).disabled(b -> !zone.canConfigure());
}

View File

@@ -153,8 +153,7 @@ public class PlacementFragment extends Fragment{
button.setChecked(control.input.block == block);
if(state.rules.bannedBlocks.contains(block)){
button.getStyle().imageUp = Icon.cancelSmall;
button.forEach(elem -> elem.setColor(Color.gray));
button.forEach(elem -> elem.setColor(Color.darkGray));
}
});
@@ -231,6 +230,15 @@ public class PlacementFragment extends Fragment{
}
}).growX().left().margin(3);
if(state.rules.bannedBlocks.contains(lastDisplay)){
topTable.row();
topTable.table(b -> {
b.addImage(Icon.cancelSmall).padRight(2).color(Color.scarlet);
b.add("$banned");
b.left();
}).padTop(2).left();
}
}else if(tileDisplayBlock() != null){ //show selected tile
lastDisplay = tileDisplayBlock();
topTable.table(t -> {
@@ -309,7 +317,7 @@ public class PlacementFragment extends Fragment{
returnArray.sort((b1, b2) -> {
int locked = -Boolean.compare(unlocked(b1), unlocked(b2));
if(locked != 0) return locked;
return -Boolean.compare(state.rules.bannedBlocks.contains(b1), state.rules.bannedBlocks.contains(b2));
return Boolean.compare(state.rules.bannedBlocks.contains(b1), state.rules.bannedBlocks.contains(b2));
});
return returnArray;
}