From 47695f1f8c93f391e9fb98340ce247d4b2286c9d Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 18 Jan 2020 13:24:14 -0500 Subject: [PATCH] Added accurate planet generation --- core/assets/planets/colors.png | Bin 0 -> 10737 bytes core/src/mindustry/ClientLauncher.java | 5 +-- core/src/mindustry/graphics/PlanetMesh.java | 31 +++++---------- .../maps/planet/PlanetGenerator.java | 37 ++++++++++++++++++ core/src/mindustry/type/Planet.java | 16 ++++---- .../mindustry/ui/dialogs/DeployDialog.java | 6 +-- 6 files changed, 59 insertions(+), 36 deletions(-) create mode 100644 core/assets/planets/colors.png create mode 100644 core/src/mindustry/maps/planet/PlanetGenerator.java diff --git a/core/assets/planets/colors.png b/core/assets/planets/colors.png new file mode 100644 index 0000000000000000000000000000000000000000..5efd5d38e06573a086fe551d14de54e984881fdf GIT binary patch literal 10737 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 { - content.init(); - content.load(); - }); + assets.loadRun("contentinit", ContentLoader.class, () -> content.init(), () -> content.load()); } @Override diff --git a/core/src/mindustry/graphics/PlanetMesh.java b/core/src/mindustry/graphics/PlanetMesh.java index fc2436c5a1..cd851149a1 100644 --- a/core/src/mindustry/graphics/PlanetMesh.java +++ b/core/src/mindustry/graphics/PlanetMesh.java @@ -3,12 +3,11 @@ package mindustry.graphics; import arc.graphics.*; import arc.graphics.VertexAttributes.*; import arc.graphics.gl.*; -import arc.math.*; import arc.math.geom.*; import arc.util.ArcAnnotate.*; import arc.util.*; -import arc.util.noise.*; import mindustry.graphics.PlanetGrid.*; +import mindustry.maps.planet.*; public class PlanetMesh{ private float[] floats = new float[3 + 3 + 1]; @@ -16,19 +15,12 @@ public class PlanetMesh{ private Mesh mesh; private PlanetGrid grid; - private float color; - private boolean lines; - private float radius; + private boolean lines = false; + private float radius = 1f, intensity = 0.2f; - private Simplex sim = new Simplex(); - private RidgedPerlin rid = new RidgedPerlin(2, 2); - private Color[] colors = {Color.royal, Color.royal, Color.royal, Color.tan, Color.valueOf("3f9a50"), Color.valueOf("3f9a50"), Color.gray, Color.white, Color.white}; - private Vec3 normal = new Vec3(); + private PlanetGenerator gen = new PlanetGenerator(); - public PlanetMesh(int divisions, float radius, boolean lines, Color color){ - this.radius = radius; - this.lines = lines; - this.color = color.toFloatBits(); + public PlanetMesh(int divisions){ this.grid = PlanetGrid.newGrid(divisions); int vertices = grid.tiles.length * 12 * (3 + 3 + 1); @@ -77,7 +69,7 @@ public class PlanetMesh{ } for(Corner corner : c){ - corner.v.setLength(radius + elevation(corner.bv)); + corner.v.setLength(radius + elevation(corner.bv)*intensity); } for(Corner corner : c){ @@ -115,20 +107,15 @@ public class PlanetMesh{ } private Vec3 normal(Vec3 v1, Vec3 v2, Vec3 v3){ - return normal.set(v2).sub(v1).crs(v3.x - v1.x, v3.y - v1.y, v3.z - v1.z).nor(); + return Tmp.v32.set(v2).sub(v1).crs(v3.x - v1.x, v3.y - v1.y, v3.z - v1.z).nor(); } private float elevation(Vec3 v){ - if(lines) return 0; - - Color c = color(v); - if(c == Color.royal) return 0.19f; - return ((float)sim.octaveNoise3D(8, 0.7, 1 / 2.0, v.x, v.y, v.z)) / 3f + (rid.getValue(v.x, v.y, v.z, 1f) + 1f) / 12f; + return gen.getHeight(v); } private Color color(Vec3 v){ - float f = ((float)sim.octaveNoise3D(6, 0.6, 1 / 2.0, v.x, v.y, v.z)) * 0.5f + 0.5f * ((rid.getValue(v.x, v.y, v.z, 1f) + 1f) / 2f); - return colors[Mathf.clamp((int)(f * colors.length), 0, colors.length - 1)]; + return gen.getColor(v, elevation(v)); } private void verts(Vec3 a, Vec3 b, Vec3 c, Vec3 normal, Color color){ diff --git a/core/src/mindustry/maps/planet/PlanetGenerator.java b/core/src/mindustry/maps/planet/PlanetGenerator.java new file mode 100644 index 0000000000..e1f97f9df3 --- /dev/null +++ b/core/src/mindustry/maps/planet/PlanetGenerator.java @@ -0,0 +1,37 @@ +package mindustry.maps.planet; + +import arc.graphics.*; +import arc.math.*; +import arc.math.geom.*; +import arc.util.*; +import arc.util.noise.*; + +public class PlanetGenerator{ + Pixmap pix = new Pixmap("planets/colors.png"); + Simplex noise = new Simplex(); + int waterLevel = 5; + float water = waterLevel / (float)(pix.getHeight()); + float scl = 5f; + + public float getHeight(Vec3 position){ + position = Tmp.v33.set(position).scl(scl); + + float height = Mathf.pow((float)noise.octaveNoise3D(7, 0.48f, 1f/3f, position.x, position.y, position.z), 2.4f); + if(height <= water){ + return water; + } + return height; + } + + public Color getColor(Vec3 position, float height){ + position = Tmp.v33.set(position).scl(scl); + float rad = scl; + float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad)); + float tnoise = (float)noise.octaveNoise3D(7, 0.48f, 1f/3f, position.x, position.y + 999f, position.z); + temp = Mathf.lerp(temp, tnoise, 0.5f); + height *= 1.2f; + height = Mathf.clamp(height); + + return Tmp.c1.set(pix.getPixel((int)(temp * (pix.getWidth()-1)), (int)((1f-height) * (pix.getHeight()-1)))); + } +} diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index eddcef84bb..a8cc63d491 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -2,23 +2,25 @@ package mindustry.type; import arc.scene.ui.layout.*; import arc.util.ArcAnnotate.*; +import arc.util.*; import mindustry.ctype.*; import mindustry.graphics.*; public class Planet extends UnlockableContent{ - /** Mesh used for rendering. */ - public @NonNull PlanetMesh mesh; + /** Mesh used for rendering. Created on load(). */ + public PlanetMesh mesh; /** Grid used for the sectors on the planet. */ public @NonNull PlanetGrid grid; - public Planet(String name, PlanetMesh mesh){ + public Planet(String name){ super(name); - this.mesh = mesh; } - //mods - Planet(String name){ - super(name); + @Override + public void load(){ + Time.mark(); + mesh = new PlanetMesh(6); + Log.info("Time to generate planet mesh: {0}", Time.elapsed()); } /** Planets cannot be viewed in the database dialog. */ diff --git a/core/src/mindustry/ui/dialogs/DeployDialog.java b/core/src/mindustry/ui/dialogs/DeployDialog.java index 812043d4d1..e2917b9798 100644 --- a/core/src/mindustry/ui/dialogs/DeployDialog.java +++ b/core/src/mindustry/ui/dialogs/DeployDialog.java @@ -123,7 +123,7 @@ public class DeployDialog extends FloatingDialog{ setFilter(TextureFilter.Linear); }}){{ float[] time = {0}; - setColor(Color.fromGray(0.3f)); + setColor(Color.gray(0.3f)); setScale(1.5f); update(() -> { setOrigin(Align.center); @@ -141,7 +141,7 @@ public class DeployDialog extends FloatingDialog{ Stack sub = new Stack(); if(slot.getZone() != null){ - sub.add(new Table(f -> f.margin(4f).add(new Image()).color(Color.fromGray(0.1f)).grow())); + sub.add(new Table(f -> f.margin(4f).add(new Image()).color(Color.gray(0.1f)).grow())); sub.add(new Table(f -> f.margin(4f).add(new Image(slot.getZone().preview).setScaling(Scaling.fit)).update(img -> { TextureRegionDrawable draw = (TextureRegionDrawable)img.getDrawable(); @@ -255,7 +255,7 @@ public class DeployDialog extends FloatingDialog{ } stack.setSize(Tmp.v1.x, Tmp.v1.y); - stack.add(new Table(t -> t.margin(4f).add(new Image(node.zone.preview).setScaling(Scaling.stretch)).color(node.zone.unlocked() ? Color.darkGray : Color.fromGray(0.2f)).grow())); + stack.add(new Table(t -> t.margin(4f).add(new Image(node.zone.preview).setScaling(Scaling.stretch)).color(node.zone.unlocked() ? Color.darkGray : Color.gray(0.2f)).grow())); stack.update(() -> stack.setPosition(node.x + panX + width / 2f, node.y + panY + height / 2f, Align.center)); Button button = new Button(Styles.squaret);