diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 5142ca4124..5ef4bad8f3 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -249,7 +249,7 @@ public class Control implements ApplicationListener, Loadable{ public void playSector(Sector sector){ ui.loadAnd(() -> { ui.planet.hide(); - SaveSlot slot = saves.getSectorSave(sector); + SaveSlot slot = sector.save; //TODO remove for persistent sector slots slot = null; if(slot != null){ diff --git a/core/src/mindustry/game/Saves.java b/core/src/mindustry/game/Saves.java index 9cdaf8a61b..7234acfe08 100644 --- a/core/src/mindustry/game/Saves.java +++ b/core/src/mindustry/game/Saves.java @@ -56,7 +56,14 @@ public class Saves{ } } - lastSectorSave = saves.find(s -> s.isSector() && s.getName().equals(Core.settings.getString("last-sector-save", "<>"))); + lastSectorSave = saves.find(s -> s.isSector() && s.getName().equals(Core.settings.getString("last-sector-save", ""))); + + //automatically assign sector save slots + for(SaveSlot slot : saves){ + if(slot.getSector() != null){ + slot.getSector().save = slot; + } + } } public @Nullable SaveSlot getLastSector(){ @@ -115,21 +122,15 @@ public class Saves{ 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){ - SaveSlot slot = getSectorSave(sector); - if(slot == null){ - slot = new SaveSlot(getSectorFile(sector)); - slot.setName(slot.file.nameWithoutExtension()); - saves.add(slot); + if(sector.save == null){ + sector.save = new SaveSlot(getSectorFile(sector)); + sector.save.setName(sector.save.file.nameWithoutExtension()); + saves.add(sector.save); } - slot.save(); - lastSectorSave = slot; - Core.settings.putSave("last-sector-save", slot.getName()); + sector.save.save(); + lastSectorSave = sector.save; + Core.settings.putSave("last-sector-save", sector.save.getName()); } public SaveSlot addSave(String name){ diff --git a/core/src/mindustry/graphics/PlanetMesh.java b/core/src/mindustry/graphics/PlanetMesh.java index 43bbd4b577..1f1c883536 100644 --- a/core/src/mindustry/graphics/PlanetMesh.java +++ b/core/src/mindustry/graphics/PlanetMesh.java @@ -4,7 +4,6 @@ import arc.graphics.*; import arc.graphics.VertexAttributes.*; import arc.graphics.gl.*; import arc.math.geom.*; -import arc.math3d.*; import arc.util.ArcAnnotate.*; import arc.util.*; import mindustry.graphics.PlanetGrid.*; diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 8616d8e0fa..04062478a8 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -2,7 +2,6 @@ package mindustry.type; import arc.files.*; import arc.math.geom.*; -import arc.math3d.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.ArcAnnotate.*; diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index a7e78a45c0..33625dd614 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -1,7 +1,6 @@ package mindustry.type; import arc.math.geom.*; -import arc.math3d.*; import arc.util.*; import arc.util.ArcAnnotate.*; import arc.util.io.*; @@ -20,6 +19,9 @@ public class Sector{ public final int id; public final SectorData data; + + public @Nullable SaveSlot save; + //TODO implement a dynamic (?) launch period public int launchPeriod = 10; @@ -36,10 +38,6 @@ public class Sector{ return (int)(rect.radius * 3200); } - public @Nullable SaveSlot getSave(){ - return Vars.headless ? null : Vars.control.saves.getSectorSave(this); - } - //TODO implement public boolean isLaunchWave(int wave){ return metCondition() && wave % launchPeriod == 0; diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 4162ddf7ef..b4a201e9d8 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -22,9 +22,9 @@ import mindustry.ui.*; import static mindustry.Vars.*; public class PlanetDialog extends FloatingDialog{ - private static final Color outlineColor = Pal.accent.cpy().a(0.6f); - private static final float camLength = 4f, outlineRad = 1.15f; - private static final boolean drawRect = false; + 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; + float outlineRad = 1.15f; private final PlanetMesh[] outlines = new PlanetMesh[10]; private final Camera3D cam = new Camera3D(); @@ -112,6 +112,9 @@ public class PlanetDialog extends FloatingDialog{ Gl.clear(Gl.depthBufferBit); Gl.enable(Gl.depthTest); + Gl.enable(Gl.cullFace); + Gl.cullFace(Gl.back); + //lock to up vector so it doesn't get confusing cam.up.set(Vec3.Y); @@ -127,8 +130,14 @@ public class PlanetDialog extends FloatingDialog{ planet.mesh.render(cam.combined()); outline.render(cam.combined()); + for(Sector sec : planet.sectors){ + if(sec.save == null){ + draw(sec, shadowColor, -0.001f); + } + } + if(hovered != null){ - drawHover(hovered); + draw(hovered, outlineColor, 0.001f); //if(Core.input.keyTap(KeyCode.SPACE)){ // control.playSector(hovered); @@ -140,6 +149,8 @@ public class PlanetDialog extends FloatingDialog{ drawSelection(selected); } + batch.flush(Gl.triangles); + Draw.batch(projector, () -> { if(hovered != null){ setPlane(hovered); @@ -169,7 +180,7 @@ public class PlanetDialog extends FloatingDialog{ stable.add("[accent]" + selected.id).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.table(t -> { @@ -202,29 +213,29 @@ public class PlanetDialog extends FloatingDialog{ ); } - private void drawHover(Sector sector){ - for(Corner c : sector.tile.corners){ - batch.color(outlineColor); - batch.vertex(c.v); + private void draw(Sector sector, Color color, float offset){ + float rr = outlineRad + offset; + for(int i = 0; i < sector.tile.corners.length; i++){ + 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){ float length = 0.1f; + float arad = outlineRad + 0.0001f; for(int i = 0; i < sector.tile.corners.length; i++){ Corner next = sector.tile.corners[(i + 1) % sector.tile.corners.length]; 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.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(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){ diff --git a/gradle.properties b/gradle.properties index c14da3278b..4a26a2fcbf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=c6cf22b91f58e7f050574885e18d2b1d9640563f +archash=7dd0965f3ca6684d3bd78b821c5a69e8922fa71b