From 9feedabf07d99173968524ab8d5f81270b73c987 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 5 Sep 2021 01:18:50 -0400 Subject: [PATCH] Serpulo clouds, now with 2 layers --- core/src/mindustry/content/Planets.java | 5 +++- .../mindustry/graphics/g3d/HexSkyMesh.java | 26 ++++++++++++++++--- gradle.properties | 2 +- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index 10ffa8585e..dbcd7b59f1 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -83,7 +83,10 @@ public class Planets implements ContentList{ serpulo = new Planet("serpulo", sun, 1, 3){{ generator = new SerpuloPlanetGenerator(); meshLoader = () -> new HexMesh(this, 6); - cloudMeshLoader = () -> new HexSkyMesh(this, 0.17f, 5, Color.white.cpy().lerp(Pal.spore, 0.7f).a(0.7f), 2, 0.5f, 1.1f, 0.45f); + cloudMeshLoader = () -> new MultiMesh( + new HexSkyMesh(this, 0, 0.6f, 0.01f + 0.18f, 5, Color.white.cpy().lerp(Pal.spore, 0.75f).a(0.7f), 2, 0.5f, 1.1f, 0.42f), + new HexSkyMesh(this, 10, 0.25f, 0.01f + 0.16f, 5, new Color().set(Pal.spore).mul(0.9f).a(0.7f), 2, 0.5f, 1f, 0.37f) + ); atmosphereColor = Color.valueOf("3c1b8f"); atmosphereRadIn = 0.02f; atmosphereRadOut = 0.3f; diff --git a/core/src/mindustry/graphics/g3d/HexSkyMesh.java b/core/src/mindustry/graphics/g3d/HexSkyMesh.java index b03e312dc7..0dcc155f2f 100644 --- a/core/src/mindustry/graphics/g3d/HexSkyMesh.java +++ b/core/src/mindustry/graphics/g3d/HexSkyMesh.java @@ -2,14 +2,18 @@ package mindustry.graphics.g3d; import arc.graphics.*; import arc.math.geom.*; +import arc.util.*; import arc.util.noise.*; import mindustry.*; import mindustry.graphics.*; import mindustry.type.*; public class HexSkyMesh extends PlanetMesh{ + static Mat3D mat = new Mat3D(); - public HexSkyMesh(Planet planet, float radius, int divisions, Color color, int octaves, float persistence, float scl, float thresh){ + public float speed = 0f; + + public HexSkyMesh(Planet planet, int seed, float speed, float radius, int divisions, Color color, int octaves, float persistence, float scl, float thresh){ super(planet, MeshBuilder.buildHex(new HexMesher(){ @Override public float getHeight(Vec3 position){ @@ -23,17 +27,33 @@ public class HexSkyMesh extends PlanetMesh{ @Override public boolean skip(Vec3 position){ - return Simplex.noise3d(planet.id, octaves, persistence, scl, position.x, position.y * 3f, position.z) >= thresh; + return Simplex.noise3d(planet.id + seed, octaves, persistence, scl, position.x, position.y * 3f, position.z) >= thresh; } }, divisions, false, planet.radius, radius), Shaders.clouds); + + this.speed = speed; } public HexSkyMesh(){ } + public float relRot(){ + return Time.globalTime * speed / 34f; + } + + @Override + public void render(Mat3D projection, Mat3D transform){ + preRender(); + shader.bind(); + shader.setUniformMatrix4("u_proj", projection.val); + shader.setUniformMatrix4("u_trans", mat.setToTranslation(planet.position).rotate(Vec3.Y, planet.getRotation() + relRot()).val); + shader.apply(); + mesh.render(shader, Gl.triangles); + } + @Override public void preRender(){ - Shaders.clouds.lightDir.set(planet.solarSystem.position).sub(planet.position).rotate(Vec3.Y, planet.getRotation()).nor(); + Shaders.clouds.lightDir.set(planet.solarSystem.position).sub(planet.position).rotate(Vec3.Y, planet.getRotation() + relRot()).nor(); Shaders.clouds.ambientColor.set(planet.solarSystem.lightColor); Shaders.clouds.alpha = 1f - Vars.ui.planet.planets.orbitAlpha; } diff --git a/gradle.properties b/gradle.properties index b38510c7c9..69f3ea487c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=98c420de77661889ab0330a956d50721f27f33d9 +archash=