add universe draw events

This commit is contained in:
DeltaNedas 2020-10-17 15:34:00 +01:00
parent 962d0729d6
commit 35a86a1aac
2 changed files with 22 additions and 14 deletions

View File

@ -35,7 +35,10 @@ public class EventType{
preDraw, preDraw,
postDraw, postDraw,
uiDrawBegin, uiDrawBegin,
uiDrawEnd uiDrawEnd,
//before/after bloom used, skybox or planets drawn - use Vars.renderer.planets
universeDrawBegin,
universeDrawEnd
} }
public static class WinEvent{} public static class WinEvent{}

View File

@ -10,6 +10,7 @@ import arc.math.geom.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.game.EventType.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.graphics.g3d.PlanetGrid.*;
import mindustry.type.*; import mindustry.type.*;
@ -38,19 +39,19 @@ public class PlanetRenderer implements Disposable{
public float zoom = 1f; public float zoom = 1f;
private final Mesh[] outlines = new Mesh[10]; private final Mesh[] outlines = new Mesh[10];
private final PlaneBatch3D projector = new PlaneBatch3D(); public final PlaneBatch3D projector = new PlaneBatch3D();
private final Mat3D mat = new Mat3D(); public final Mat3D mat = new Mat3D();
private final FrameBuffer buffer = new FrameBuffer(2, 2, true); public final FrameBuffer buffer = new FrameBuffer(2, 2, true);
private PlanetInterfaceRenderer irenderer; public PlanetInterfaceRenderer irenderer;
private final Bloom bloom = new Bloom(Core.graphics.getWidth()/4, Core.graphics.getHeight()/4, true, false){{ public final Bloom bloom = new Bloom(Core.graphics.getWidth()/4, Core.graphics.getHeight()/4, true, false){{
setThreshold(0.8f); setThreshold(0.8f);
blurPasses = 6; blurPasses = 6;
}}; }};
private final Mesh atmosphere = MeshBuilder.buildHex(Color.white, 2, false, 1.5f); public final Mesh atmosphere = MeshBuilder.buildHex(Color.white, 2, false, 1.5f);
//seed: 8kmfuix03fw //seed: 8kmfuix03fw
private final CubemapMesh skybox = new CubemapMesh(new Cubemap("cubemaps/stars/")); public final CubemapMesh skybox = new CubemapMesh(new Cubemap("cubemaps/stars/"));
public PlanetRenderer(){ public PlanetRenderer(){
camPos.set(0, 0f, camLength); camPos.set(0, 0f, camLength);
@ -82,6 +83,8 @@ public class PlanetRenderer implements Disposable{
projector.proj(cam.combined); projector.proj(cam.combined);
batch.proj(cam.combined); batch.proj(cam.combined);
Events.fire(Trigger.universeDrawBegin);
beginBloom(); beginBloom();
skybox.render(cam.combined); skybox.render(cam.combined);
@ -90,6 +93,8 @@ public class PlanetRenderer implements Disposable{
endBloom(); endBloom();
Events.fire(Trigger.universeDrawEnd);
Gl.enable(Gl.blend); Gl.enable(Gl.blend);
irenderer.renderProjections(); irenderer.renderProjections();
@ -100,16 +105,16 @@ public class PlanetRenderer implements Disposable{
cam.update(); cam.update();
} }
private void beginBloom(){ public void beginBloom(){
bloom.resize(Core.graphics.getWidth() / 4, Core.graphics.getHeight() / 4); bloom.resize(Core.graphics.getWidth() / 4, Core.graphics.getHeight() / 4);
bloom.capture(); bloom.capture();
} }
private void endBloom(){ public void endBloom(){
bloom.render(); bloom.render();
} }
private void renderPlanet(Planet planet){ public void renderPlanet(Planet planet){
//render planet at offsetted position in the world //render planet at offsetted position in the world
planet.mesh.render(cam.combined, planet.getTransform(mat)); planet.mesh.render(cam.combined, planet.getTransform(mat));
@ -137,7 +142,7 @@ public class PlanetRenderer implements Disposable{
} }
} }
private void renderOrbit(Planet planet){ public void renderOrbit(Planet planet){
if(planet.parent == null) return; if(planet.parent == null) return;
Vec3 center = planet.parent.position; Vec3 center = planet.parent.position;
@ -147,7 +152,7 @@ public class PlanetRenderer implements Disposable{
batch.flush(Gl.lineLoop); batch.flush(Gl.lineLoop);
} }
private void renderSectors(Planet planet){ public void renderSectors(Planet planet){
//apply transformed position //apply transformed position
batch.proj().mul(planet.getTransform(mat)); batch.proj().mul(planet.getTransform(mat));
@ -268,7 +273,7 @@ public class PlanetRenderer implements Disposable{
} }
} }
private Mesh outline(int size){ public Mesh outline(int size){
if(outlines[size] == null){ if(outlines[size] == null){
outlines[size] = MeshBuilder.buildHex(new HexMesher(){ outlines[size] = MeshBuilder.buildHex(new HexMesher(){
@Override @Override