WIP sector reorganization + loading system (broken, do not use!)
This commit is contained in:
@@ -31,8 +31,10 @@ import mindustry.graphics.*;
|
||||
import mindustry.graphics.g3d.PlanetGrid.*;
|
||||
import mindustry.graphics.g3d.*;
|
||||
import mindustry.input.*;
|
||||
import mindustry.io.*;
|
||||
import mindustry.maps.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.type.Planet.*;
|
||||
import mindustry.ui.*;
|
||||
import mindustry.world.blocks.storage.*;
|
||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||
@@ -71,6 +73,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
private Texture[] planetTextures;
|
||||
private Element mainView;
|
||||
private CampaignRulesDialog campaignRules = new CampaignRulesDialog();
|
||||
private SectorSelectDialog selectDialog = new SectorSelectDialog();
|
||||
|
||||
public PlanetDialog(){
|
||||
super("", Styles.fullDialog);
|
||||
@@ -532,7 +535,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
|
||||
@Override
|
||||
public void renderProjections(Planet planet){
|
||||
float iw = 48f/4f;
|
||||
float iw = 64f/4f;
|
||||
|
||||
for(Sector sec : planet.sectors){
|
||||
if(sec != hovered){
|
||||
@@ -540,10 +543,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
var icon =
|
||||
sec.isAttacked() ? Fonts.getLargeIcon("warning") :
|
||||
!sec.hasBase() && sec.preset != null && sec.preset.requireUnlock && sec.preset.unlocked() && preficon == null ?
|
||||
Fonts.getLargeIcon("terrain") :
|
||||
sec.preset != null ? sec.preset.uiIcon : Fonts.getLargeIcon("terrain") :
|
||||
sec.preset != null && sec.preset.requireUnlock && sec.preset.locked() && sec.preset.techNode != null && (sec.preset.techNode.parent == null || !sec.preset.techNode.parent.content.locked()) ? Fonts.getLargeIcon("lock") :
|
||||
preficon;
|
||||
var color = sec.preset != null && sec.preset.requireUnlock && !sec.hasBase() ? Team.derelict.color : Team.sharded.color;
|
||||
var color = sec.isAttacked() ? Team.sharded.color : Color.white;
|
||||
|
||||
if(icon != null){
|
||||
planets.drawPlane(sec, () -> {
|
||||
@@ -622,8 +625,24 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
public void touchDown(InputEvent event, float x, float y, int pointer, KeyCode button){
|
||||
super.touchDown(event, x, y, pointer, button);
|
||||
|
||||
if(debugSectorAttackEdit && button == KeyCode.mouseRight && hovered != null){
|
||||
hovered.generateEnemyBase = !hovered.generateEnemyBase;
|
||||
var hovered = PlanetDialog.this.hovered;
|
||||
|
||||
if(debugSectorAttackEdit && hovered != null){
|
||||
if(button == KeyCode.mouseRight){
|
||||
if(input.shift()){
|
||||
hovered.generateEnemyBase = !hovered.generateEnemyBase;
|
||||
}else{
|
||||
selectDialog.show(state.planet, result -> {
|
||||
for(var other : state.planet.sectors){
|
||||
if(other.preset == result){
|
||||
other.preset = null;
|
||||
}
|
||||
}
|
||||
hovered.preset = result;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -634,9 +653,26 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
if(scene.getDialog() == PlanetDialog.this && (scene.getHoverElement() == null || !scene.getHoverElement().isDescendantOf(e -> e instanceof ScrollPane))){
|
||||
scene.setScrollFocus(PlanetDialog.this);
|
||||
|
||||
if(debugSectorAttackEdit && input.ctrl() && input.keyTap(KeyCode.c)){
|
||||
Core.app.setClipboardText(state.planet.writeAttackSectorBits());
|
||||
Vars.ui.showInfoFade("@copied");
|
||||
if(debugSectorAttackEdit && input.ctrl() && input.keyTap(KeyCode.s)){
|
||||
try{
|
||||
PlanetData data = new PlanetData();
|
||||
IntSeq attack = new IntSeq();
|
||||
for(var sector : state.planet.sectors){
|
||||
if(sector.preset == null && sector.generateEnemyBase){
|
||||
attack.add(sector.id);
|
||||
}
|
||||
|
||||
if(sector.preset != null && sector.preset.requireUnlock){
|
||||
data.presets.put(sector.preset.name, sector.id);
|
||||
}
|
||||
}
|
||||
data.attackSectors = attack.toArray();
|
||||
files.local("planets/" + state.planet.name + ".json").writeString(JsonIO.write(data));
|
||||
|
||||
Vars.ui.showInfoFade("@editor.saved");
|
||||
}catch(Exception e){
|
||||
Log.err(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1123,7 +1159,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
stable.background(Styles.black6);
|
||||
|
||||
stable.table(title -> {
|
||||
title.add("[accent]" + sector.name()).padLeft(3);
|
||||
title.add("[accent]" + sector.name() + (debugSelect && (sector.info.name != null || sector.preset != null) ? " [lightgray](" + sector.id + ")" : "")).padLeft(3);
|
||||
if(sector.preset == null){
|
||||
title.add().growX();
|
||||
|
||||
|
||||
83
core/src/mindustry/ui/dialogs/SectorSelectDialog.java
Normal file
83
core/src/mindustry/ui/dialogs/SectorSelectDialog.java
Normal file
@@ -0,0 +1,83 @@
|
||||
package mindustry.ui.dialogs;
|
||||
|
||||
import arc.*;
|
||||
import arc.func.*;
|
||||
import arc.input.*;
|
||||
import arc.scene.style.*;
|
||||
import arc.scene.ui.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import mindustry.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.ui.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
//internal use only!
|
||||
public class SectorSelectDialog extends BaseDialog{
|
||||
Table sectors = new Table();
|
||||
Planet planet = Planets.serpulo;
|
||||
Cons<SectorPreset> cons = s -> {};
|
||||
TextField search;
|
||||
|
||||
public SectorSelectDialog(){
|
||||
super("@content.sector.name");
|
||||
|
||||
cont.top();
|
||||
cont.table(s -> {
|
||||
s.image(Icon.zoom);
|
||||
search = s.field("", ignored -> {
|
||||
rebuild();
|
||||
}).width(300f).get();
|
||||
search.keyDown(KeyCode.enter, () -> {
|
||||
String text = search.getText().toLowerCase(Locale.ROOT);
|
||||
var found = Vars.content.sectors().find(sec -> matches(sec, text));
|
||||
if(found != null){
|
||||
cons.get(found);
|
||||
hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
cont.row();
|
||||
|
||||
cont.pane(sectors).grow().top();
|
||||
sectors.top();
|
||||
|
||||
addCloseButton();
|
||||
|
||||
shown(() -> {
|
||||
search.clearText();
|
||||
search.requestKeyboard();
|
||||
Core.app.post(() -> search.requestKeyboard());
|
||||
rebuild();
|
||||
});
|
||||
}
|
||||
|
||||
public void show(Planet planet, Cons<SectorPreset> cons){
|
||||
this.planet = planet;
|
||||
this.cons = cons;
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
void rebuild(){
|
||||
sectors.clear();
|
||||
|
||||
String text = search.getText().toLowerCase(Locale.ROOT);
|
||||
|
||||
for(var sector : Vars.content.sectors()){
|
||||
if(matches(sector, text)){
|
||||
sectors.button(sector.localizedName, new TextureRegionDrawable(sector.uiIcon), Styles.grayt, 32f, () -> {
|
||||
cons.get(sector);
|
||||
hide();
|
||||
}).size(400f, 50f).margin(4f).pad(3f);
|
||||
sectors.row();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean matches(SectorPreset sector, String text){
|
||||
return sector.planet == planet && (text.isEmpty() || sector.name.toLowerCase(Locale.ROOT).contains(text) || sector.localizedName.toLowerCase(Locale.ROOT).contains(text));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user