Merge branch 'master' of https://github.com/Anuken/Mindustry into 7.0-features

 Conflicts:
	core/src/mindustry/type/Planet.java
This commit is contained in:
Anuken
2021-09-04 23:29:02 -04:00
4 changed files with 38 additions and 15 deletions

View File

@@ -7,4 +7,7 @@ import arc.math.geom.*;
public interface HexMesher{
float getHeight(Vec3 position);
Color getColor(Vec3 position);
default boolean skip(Vec3 position){
return false;
}
}

View File

@@ -48,6 +48,9 @@ public class MeshBuilder{
begin(grid.tiles.length * 12 * (3 + 3 + 1));
for(Ptile tile : grid.tiles){
if(mesher.skip(tile.v)){
continue;
}
Corner[] c = tile.corners;

View File

@@ -156,22 +156,11 @@ public class PlanetRenderer implements Disposable{
}
if(cam.frustum.containsSphere(planet.position, planet.clipRadius) && planet.parent != null && planet.hasAtmosphere && Core.settings.getBool("atmosphere")){
Gl.depthMask(false);
Blending.additive.apply();
Shaders.atmosphere.camera = cam;
Shaders.atmosphere.planet = planet;
Shaders.atmosphere.bind();
Shaders.atmosphere.apply();
atmosphere.render(Shaders.atmosphere, Gl.triangles);
Blending.normal.apply();
Gl.depthMask(true);
planet.drawAtmosphere(atmosphere, cam);
}
planet.drawClouds(cam.combined, planet.getTransform(mat));
for(Planet child : planet.children){
renderTransparent(child);
}

View File

@@ -3,6 +3,7 @@ package mindustry.type;
import arc.*;
import arc.func.*;
import arc.graphics.*;
import arc.graphics.g3d.*;
import arc.math.*;
import arc.math.geom.*;
import arc.struct.*;
@@ -21,6 +22,8 @@ public class Planet extends UnlockableContent{
private static final Vec3 intersectResult = new Vec3();
/** Mesh used for rendering. Created on load() - will be null on the server! */
public @Nullable GenericMesh mesh;
/** Mesh used for rendering planet clouds. Null if no clouds are present. */
public @Nullable GenericMesh cloudMesh;
/** Position in global coordinates. Will be 0,0,0 until the Universe updates it. */
public Vec3 position = new Vec3();
/** Grid used for the sectors on the planet. Null if this planet can't be landed on. */
@@ -86,7 +89,7 @@ public class Planet extends UnlockableContent{
/** Satellites orbiting this planet. */
public Seq<Satellite> satellites = new Seq<>();
/** Loads the mesh. Clientside only. Defaults to a boring sphere mesh. */
protected Prov<GenericMesh> meshLoader = () -> new ShaderSphereMesh(this, Shaders.unlit, 2);
protected Prov<GenericMesh> meshLoader = () -> new ShaderSphereMesh(this, Shaders.unlit, 2), cloudMeshLoader = () -> null;
public Planet(String name, Planet parent, float radius){
super(name);
@@ -235,6 +238,7 @@ public class Planet extends UnlockableContent{
super.load();
mesh = meshLoader.get();
cloudMesh = cloudMeshLoader.get();
}
@Override
@@ -300,4 +304,28 @@ public class Planet extends UnlockableContent{
public void draw(Mat3D projection, Mat3D transform){
mesh.render(projection, transform);
}
public void drawAtmosphere(Mesh atmosphere, Camera3D cam){
//atmosphere does not contribute to depth buffer
Gl.depthMask(false);
Blending.additive.apply();
Shaders.atmosphere.camera = cam;
Shaders.atmosphere.planet = this;
Shaders.atmosphere.bind();
Shaders.atmosphere.apply();
atmosphere.render(Shaders.atmosphere, Gl.triangles);
Blending.normal.apply();
Gl.depthMask(true);
}
public void drawClouds(Mat3D projection, Mat3D transform){
if(cloudMesh != null){
cloudMesh.render(projection, transform);
}
}
}