Fast sector save access, structural changes
This commit is contained in:
@@ -249,7 +249,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
public void playSector(Sector sector){
|
public void playSector(Sector sector){
|
||||||
ui.loadAnd(() -> {
|
ui.loadAnd(() -> {
|
||||||
ui.planet.hide();
|
ui.planet.hide();
|
||||||
SaveSlot slot = saves.getSectorSave(sector);
|
SaveSlot slot = sector.save;
|
||||||
//TODO remove for persistent sector slots
|
//TODO remove for persistent sector slots
|
||||||
slot = null;
|
slot = null;
|
||||||
if(slot != null){
|
if(slot != null){
|
||||||
|
|||||||
@@ -56,7 +56,14 @@ public class Saves{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lastSectorSave = saves.find(s -> s.isSector() && s.getName().equals(Core.settings.getString("last-sector-save", "<<none>>")));
|
lastSectorSave = saves.find(s -> s.isSector() && s.getName().equals(Core.settings.getString("last-sector-save", "<none>")));
|
||||||
|
|
||||||
|
//automatically assign sector save slots
|
||||||
|
for(SaveSlot slot : saves){
|
||||||
|
if(slot.getSector() != null){
|
||||||
|
slot.getSector().save = slot;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable SaveSlot getLastSector(){
|
public @Nullable SaveSlot getLastSector(){
|
||||||
@@ -115,21 +122,15 @@ public class Saves{
|
|||||||
return saveDirectory.child("sector-" + sector.planet.name + "-" + sector.id + "." + saveExtension);
|
return saveDirectory.child("sector-" + sector.planet.name + "-" + sector.id + "." + saveExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable SaveSlot getSectorSave(Sector sector){
|
|
||||||
Fi fi = getSectorFile(sector);
|
|
||||||
return saves.find(s -> s.isSector() && s.file.equals(fi));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveSector(Sector sector){
|
public void saveSector(Sector sector){
|
||||||
SaveSlot slot = getSectorSave(sector);
|
if(sector.save == null){
|
||||||
if(slot == null){
|
sector.save = new SaveSlot(getSectorFile(sector));
|
||||||
slot = new SaveSlot(getSectorFile(sector));
|
sector.save.setName(sector.save.file.nameWithoutExtension());
|
||||||
slot.setName(slot.file.nameWithoutExtension());
|
saves.add(sector.save);
|
||||||
saves.add(slot);
|
|
||||||
}
|
}
|
||||||
slot.save();
|
sector.save.save();
|
||||||
lastSectorSave = slot;
|
lastSectorSave = sector.save;
|
||||||
Core.settings.putSave("last-sector-save", slot.getName());
|
Core.settings.putSave("last-sector-save", sector.save.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public SaveSlot addSave(String name){
|
public SaveSlot addSave(String name){
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import arc.graphics.*;
|
|||||||
import arc.graphics.VertexAttributes.*;
|
import arc.graphics.VertexAttributes.*;
|
||||||
import arc.graphics.gl.*;
|
import arc.graphics.gl.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.math3d.*;
|
|
||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.graphics.PlanetGrid.*;
|
import mindustry.graphics.PlanetGrid.*;
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package mindustry.type;
|
|||||||
|
|
||||||
import arc.files.*;
|
import arc.files.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.math3d.*;
|
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package mindustry.type;
|
package mindustry.type;
|
||||||
|
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.math3d.*;
|
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
@@ -20,6 +19,9 @@ public class Sector{
|
|||||||
public final int id;
|
public final int id;
|
||||||
|
|
||||||
public final SectorData data;
|
public final SectorData data;
|
||||||
|
|
||||||
|
public @Nullable SaveSlot save;
|
||||||
|
|
||||||
//TODO implement a dynamic (?) launch period
|
//TODO implement a dynamic (?) launch period
|
||||||
public int launchPeriod = 10;
|
public int launchPeriod = 10;
|
||||||
|
|
||||||
@@ -36,10 +38,6 @@ public class Sector{
|
|||||||
return (int)(rect.radius * 3200);
|
return (int)(rect.radius * 3200);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable SaveSlot getSave(){
|
|
||||||
return Vars.headless ? null : Vars.control.saves.getSectorSave(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO implement
|
//TODO implement
|
||||||
public boolean isLaunchWave(int wave){
|
public boolean isLaunchWave(int wave){
|
||||||
return metCondition() && wave % launchPeriod == 0;
|
return metCondition() && wave % launchPeriod == 0;
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ import mindustry.ui.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class PlanetDialog extends FloatingDialog{
|
public class PlanetDialog extends FloatingDialog{
|
||||||
private static final Color outlineColor = Pal.accent.cpy().a(0.6f);
|
private static final Color outlineColor = Pal.accent.cpy().a(0.6f), shadowColor = new Color(0, 0, 0, 0.7f);
|
||||||
private static final float camLength = 4f, outlineRad = 1.15f;
|
private static final float camLength = 4f;
|
||||||
private static final boolean drawRect = false;
|
float outlineRad = 1.15f;
|
||||||
|
|
||||||
private final PlanetMesh[] outlines = new PlanetMesh[10];
|
private final PlanetMesh[] outlines = new PlanetMesh[10];
|
||||||
private final Camera3D cam = new Camera3D();
|
private final Camera3D cam = new Camera3D();
|
||||||
@@ -112,6 +112,9 @@ public class PlanetDialog extends FloatingDialog{
|
|||||||
Gl.clear(Gl.depthBufferBit);
|
Gl.clear(Gl.depthBufferBit);
|
||||||
Gl.enable(Gl.depthTest);
|
Gl.enable(Gl.depthTest);
|
||||||
|
|
||||||
|
Gl.enable(Gl.cullFace);
|
||||||
|
Gl.cullFace(Gl.back);
|
||||||
|
|
||||||
//lock to up vector so it doesn't get confusing
|
//lock to up vector so it doesn't get confusing
|
||||||
cam.up.set(Vec3.Y);
|
cam.up.set(Vec3.Y);
|
||||||
|
|
||||||
@@ -127,8 +130,14 @@ public class PlanetDialog extends FloatingDialog{
|
|||||||
planet.mesh.render(cam.combined());
|
planet.mesh.render(cam.combined());
|
||||||
outline.render(cam.combined());
|
outline.render(cam.combined());
|
||||||
|
|
||||||
|
for(Sector sec : planet.sectors){
|
||||||
|
if(sec.save == null){
|
||||||
|
draw(sec, shadowColor, -0.001f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(hovered != null){
|
if(hovered != null){
|
||||||
drawHover(hovered);
|
draw(hovered, outlineColor, 0.001f);
|
||||||
|
|
||||||
//if(Core.input.keyTap(KeyCode.SPACE)){
|
//if(Core.input.keyTap(KeyCode.SPACE)){
|
||||||
// control.playSector(hovered);
|
// control.playSector(hovered);
|
||||||
@@ -140,6 +149,8 @@ public class PlanetDialog extends FloatingDialog{
|
|||||||
drawSelection(selected);
|
drawSelection(selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
batch.flush(Gl.triangles);
|
||||||
|
|
||||||
Draw.batch(projector, () -> {
|
Draw.batch(projector, () -> {
|
||||||
if(hovered != null){
|
if(hovered != null){
|
||||||
setPlane(hovered);
|
setPlane(hovered);
|
||||||
@@ -169,7 +180,7 @@ public class PlanetDialog extends FloatingDialog{
|
|||||||
|
|
||||||
stable.add("[accent]" + selected.id).row();
|
stable.add("[accent]" + selected.id).row();
|
||||||
stable.addImage().color(Pal.accent).fillX().height(3f).pad(3f).row();
|
stable.addImage().color(Pal.accent).fillX().height(3f).pad(3f).row();
|
||||||
stable.add(selected.getSave() != null ? selected.getSave().getPlayTime() : "[lightgray]Unexplored").row();
|
stable.add(selected.save != null ? selected.save.getPlayTime() : "[lightgray]Unexplored").row();
|
||||||
|
|
||||||
stable.add("Resources:").row();
|
stable.add("Resources:").row();
|
||||||
stable.table(t -> {
|
stable.table(t -> {
|
||||||
@@ -202,29 +213,29 @@ public class PlanetDialog extends FloatingDialog{
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawHover(Sector sector){
|
private void draw(Sector sector, Color color, float offset){
|
||||||
for(Corner c : sector.tile.corners){
|
float rr = outlineRad + offset;
|
||||||
batch.color(outlineColor);
|
for(int i = 0; i < sector.tile.corners.length; i++){
|
||||||
batch.vertex(c.v);
|
Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length];
|
||||||
|
batch.tri(Tmp.v31.set(c.v).setLength(rr), Tmp.v32.set(next.v).setLength(rr), Tmp.v33.set(sector.tile.v).setLength(rr), color);
|
||||||
}
|
}
|
||||||
batch.flush(Gl.triangleFan);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawSelection(Sector sector){
|
private void drawSelection(Sector sector){
|
||||||
float length = 0.1f;
|
float length = 0.1f;
|
||||||
|
float arad = outlineRad + 0.0001f;
|
||||||
|
|
||||||
for(int i = 0; i < sector.tile.corners.length; i++){
|
for(int i = 0; i < sector.tile.corners.length; i++){
|
||||||
Corner next = sector.tile.corners[(i + 1) % sector.tile.corners.length];
|
Corner next = sector.tile.corners[(i + 1) % sector.tile.corners.length];
|
||||||
Corner curr = sector.tile.corners[i];
|
Corner curr = sector.tile.corners[i];
|
||||||
sector.tile.v.scl(outlineRad);
|
sector.tile.v.scl(arad);
|
||||||
Tmp.v31.set(curr.v).sub(sector.tile.v).setLength(length).add(sector.tile.v);
|
Tmp.v31.set(curr.v).sub(sector.tile.v).setLength(length).add(sector.tile.v);
|
||||||
Tmp.v32.set(next.v).sub(sector.tile.v).setLength(length).add(sector.tile.v);
|
Tmp.v32.set(next.v).sub(sector.tile.v).setLength(length).add(sector.tile.v);
|
||||||
sector.tile.v.scl(1f / outlineRad);
|
sector.tile.v.scl(1f / arad);
|
||||||
|
|
||||||
batch.tri(curr.v, next.v, Tmp.v31, Pal.accent);
|
batch.tri(curr.v, next.v, Tmp.v31, Pal.accent);
|
||||||
batch.tri(Tmp.v31, Tmp.v32, next.v, Pal.accent);
|
batch.tri(Tmp.v31, next.v, Tmp.v32, Pal.accent);
|
||||||
}
|
}
|
||||||
batch.flush(Gl.triangles);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlanetMesh outline(int size){
|
private PlanetMesh outline(int size){
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
org.gradle.daemon=true
|
org.gradle.daemon=true
|
||||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||||
archash=c6cf22b91f58e7f050574885e18d2b1d9640563f
|
archash=7dd0965f3ca6684d3bd78b821c5a69e8922fa71b
|
||||||
|
|||||||
Reference in New Issue
Block a user