Better planet terrain

This commit is contained in:
Anuken
2020-02-14 14:12:22 -05:00
parent abaa462645
commit 7f56cdc1e9
2 changed files with 29 additions and 20 deletions

View File

@@ -252,6 +252,8 @@ public class Control implements ApplicationListener, Loadable{
ui.loadAnd(() -> { ui.loadAnd(() -> {
ui.planet.hide(); ui.planet.hide();
SaveSlot slot = saves.getSectorSave(sector); SaveSlot slot = saves.getSectorSave(sector);
//TODO remove for persistent sector slots
slot = null;
if(slot != null){ if(slot != null){
try{ try{
net.reset(); net.reset();
@@ -272,7 +274,8 @@ public class Control implements ApplicationListener, Loadable{
state.rules.sector = sector; state.rules.sector = sector;
logic.play(); logic.play();
control.saves.saveSector(sector); control.saves.saveSector(sector);
Events.fire(Trigger.newGame); //TODO uncomment for efffect
//Events.fire(Trigger.newGame);
} }
}); });
} }

View File

@@ -3,35 +3,42 @@ package mindustry.maps.planet;
import arc.graphics.*; import arc.graphics.*;
import arc.math.*; import arc.math.*;
import arc.math.geom.*; import arc.math.geom.*;
import arc.struct.*;
import arc.util.*; import arc.util.*;
import arc.util.noise.*; import arc.util.noise.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.world.*; import mindustry.world.*;
public class TestPlanetGenerator implements PlanetGenerator{ public class TestPlanetGenerator implements PlanetGenerator{
Pixmap pix;
Simplex noise = new Simplex(); Simplex noise = new Simplex();
int waterLevel = 5;
float water;
float scl = 5f; float scl = 5f;
Array<Block> blocks = Array.with(Blocks.sporeMoss, Blocks.moss, Blocks.ice, Blocks.snow, Blocks.sand, Blocks.darksand, Blocks.darksandWater, Blocks.darksandTaintedWater, Blocks.iceSnow);
public TestPlanetGenerator(){ //TODO generate array from planet image later
//TODO remove planet pixmap Block[][] arr = {
try{ {Blocks.water, Blocks.darksandWater, Blocks.darksand, Blocks.darksand, Blocks.darksand, Blocks.darksand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.darksandTaintedWater, Blocks.snow, Blocks.ice},
pix = new Pixmap("planets/colors.png"); {Blocks.water, Blocks.darksandWater, Blocks.darksand, Blocks.darksand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.darksandTaintedWater, Blocks.snow, Blocks.snow, Blocks.ice},
water = waterLevel / (float)(pix.getHeight()); {Blocks.water, Blocks.darksandWater, Blocks.darksand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.darksandTaintedWater, Blocks.snow, Blocks.ice, Blocks.ice},
}catch(Throwable ignored){ {Blocks.water, Blocks.sandWater, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.iceSnow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice},
//ignored during headless loading for now {Blocks.deepwater, Blocks.water, Blocks.sandWater, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.moss, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.ice},
} {Blocks.deepwater, Blocks.water, Blocks.sandWater, Blocks.sand, Blocks.sand, Blocks.sand, Blocks.moss, Blocks.iceSnow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.snow, Blocks.ice},
{Blocks.deepwater, Blocks.sandWater, Blocks.sand, Blocks.sand, Blocks.moss, Blocks.moss, Blocks.moss, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.snow, Blocks.ice},
{Blocks.taintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.darksand, Blocks.darksandTaintedWater, Blocks.moss, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.snow, Blocks.ice, Blocks.ice},
{Blocks.darksandWater, Blocks.darksand, Blocks.darksand, Blocks.darksand, Blocks.moss, Blocks.sporeMoss, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice},
{Blocks.darksandWater, Blocks.darksand, Blocks.darksand, Blocks.sporeMoss, Blocks.ice, Blocks.ice, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice},
{Blocks.taintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.sporeMoss, Blocks.sporeMoss, Blocks.ice, Blocks.ice, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice},
{Blocks.darksandTaintedWater, Blocks.darksandTaintedWater, Blocks.darksand, Blocks.sporeMoss, Blocks.moss, Blocks.sporeMoss, Blocks.iceSnow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice},
{Blocks.darksandWater, Blocks.darksand, Blocks.darksand, Blocks.ice, Blocks.iceSnow, Blocks.iceSnow, Blocks.snow, Blocks.snow, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice, Blocks.ice}
};
float water = 2f / arr[0].length;
float rawHeight(Vec3 position){
position = Tmp.v33.set(position).scl(scl);
return Mathf.pow((float)noise.octaveNoise3D(7, 0.48f, 1f/3f, position.x, position.y, position.z), 2.3f);
} }
@Override @Override
public float getHeight(Vec3 position){ public float getHeight(Vec3 position){
position = Tmp.v33.set(position).scl(scl); float height = rawHeight(position);
float height = Mathf.pow((float)noise.octaveNoise3D(7, 0.48f, 1f/3f, position.x, position.y, position.z), 2.4f);
if(height <= water){ if(height <= water){
return water; return water;
} }
@@ -49,7 +56,7 @@ public class TestPlanetGenerator implements PlanetGenerator{
} }
Block getBlock(Vec3 position){ Block getBlock(Vec3 position){
float height = getHeight(position); float height = rawHeight(position);
position = Tmp.v33.set(position).scl(scl); position = Tmp.v33.set(position).scl(scl);
float rad = scl; float rad = scl;
float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad)); float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad));
@@ -58,8 +65,7 @@ public class TestPlanetGenerator implements PlanetGenerator{
height *= 1.2f; height *= 1.2f;
height = Mathf.clamp(height); height = Mathf.clamp(height);
Color color = Tmp.c1.set(pix.getPixel((int)(temp * (pix.getWidth()-1)), (int)((1f-height) * (pix.getHeight()-1))));
return blocks.min(c -> color.diff(c.color)); return arr[Mathf.clamp((int)(temp * arr.length), 0, arr.length - 1)][Mathf.clamp((int)(height * arr[0].length), 0, arr[0].length - 1)];
} }
} }