X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Firtimaled%2Fbbor%2Fclient%2FClientRenderer.java;h=6672c6955d15f1e29752441734df31c53e49bdd4;hb=5fb79bdb4a572647b00d0a0fc10215642d6b417d;hp=01786659762c53f051040fbe5a461f20d4187fb2;hpb=69a69a23f39e193b110b3392fa25d4a79dcd6572;p=BoundingBoxOutlineReloaded.git diff --git a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java index 0178665..6672c69 100644 --- a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java +++ b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java @@ -1,12 +1,14 @@ package com.irtimaled.bbor.client; +import com.irtimaled.bbor.client.config.ConfigManager; import com.irtimaled.bbor.client.interop.ClientInterop; -import com.irtimaled.bbor.client.providers.IBoundingBoxProvider; +import com.irtimaled.bbor.client.models.*; +import com.irtimaled.bbor.client.providers.*; import com.irtimaled.bbor.client.renderers.*; -import com.irtimaled.bbor.common.BoundingBoxCache; import com.irtimaled.bbor.common.MathHelper; -import com.irtimaled.bbor.common.models.*; -import com.irtimaled.bbor.config.ConfigManager; +import com.irtimaled.bbor.common.models.AbstractBoundingBox; +import com.irtimaled.bbor.common.models.BoundingBoxCuboid; +import com.irtimaled.bbor.common.models.BoundingBoxVillage; import org.lwjgl.opengl.GL11; import java.util.HashMap; @@ -19,7 +21,7 @@ public class ClientRenderer { private static final Map, AbstractRenderer> boundingBoxRendererMap = new HashMap<>(); private static boolean active; - private Set providers = new HashSet<>(); + private static final Set providers = new HashSet<>(); public static boolean getActive() { return active; @@ -29,48 +31,57 @@ public class ClientRenderer { active = !active; if (!active) return; - PlayerCoords.setActiveY(); + Player.setActiveY(); } static void deactivate() { active = false; } - private final GetCache getCache; - - ClientRenderer(GetCache getCache) { - this.getCache = getCache; + static { registerRenderer(BoundingBoxVillage.class, new VillageRenderer()); registerRenderer(BoundingBoxSlimeChunk.class, new SlimeChunkRenderer()); registerRenderer(BoundingBoxWorldSpawn.class, new WorldSpawnRenderer()); registerRenderer(BoundingBoxCuboid.class, new CuboidRenderer()); registerRenderer(BoundingBoxMobSpawner.class, new MobSpawnerRenderer()); + registerRenderer(BoundingBoxSpawningSphere.class, new SpawningSphereRenderer()); + registerRenderer(BoundingBoxBeacon.class, new BeaconRenderer()); + registerRenderer(BoundingBoxBiomeBorder.class, new BiomeBorderRenderer()); + registerRenderer(BoundingBoxConduit.class, new ConduitRenderer()); + + registerProvider(new SlimeChunkProvider()); + registerProvider(new WorldSpawnProvider()); + registerProvider(new SpawningSphereProvider()); + registerProvider(new BeaconProvider()); + registerProvider(new CustomBoxProvider()); + registerProvider(new CustomBeaconProvider()); + registerProvider(new BiomeBorderProvider()); + registerProvider(new MobSpawnerProvider()); + registerProvider(new ConduitProvider()); } - public ClientRenderer registerProvider(IBoundingBoxProvider provider) { - this.providers.add(provider); - return this; + public static void registerProvider(IBoundingBoxProvider provider) { + providers.add(provider); } - public ClientRenderer registerRenderer(Class type, AbstractRenderer renderer) { + public static void registerRenderer(Class type, AbstractRenderer renderer) { boundingBoxRendererMap.put(type, renderer); - return this; } - private boolean isWithinRenderDistance(AbstractBoundingBox boundingBox) { + private static boolean isWithinRenderDistance(AbstractBoundingBox boundingBox) { int renderDistanceBlocks = ClientInterop.getRenderDistanceChunks() * CHUNK_SIZE; - int minX = MathHelper.floor(PlayerCoords.getX() - renderDistanceBlocks); - int maxX = MathHelper.floor(PlayerCoords.getX() + renderDistanceBlocks); - int minZ = MathHelper.floor(PlayerCoords.getZ() - renderDistanceBlocks); - int maxZ = MathHelper.floor(PlayerCoords.getZ() + renderDistanceBlocks); + int minX = MathHelper.floor(Player.getX() - renderDistanceBlocks); + int maxX = MathHelper.floor(Player.getX() + renderDistanceBlocks); + int minZ = MathHelper.floor(Player.getZ() - renderDistanceBlocks); + int maxZ = MathHelper.floor(Player.getZ() + renderDistanceBlocks); return boundingBox.intersectsBounds(minX, minZ, maxX, maxZ); } - public void render(int dimensionId) { - if(!active) return; + public static void render(int dimensionId) { + if (!active) return; - Map> boundingBoxes = getBoundingBoxes(dimensionId); + Set boundingBoxes = getBoundingBoxes(dimensionId); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glLineWidth(2.0f); @@ -81,21 +92,10 @@ public class ClientRenderer { GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); } - Boolean outerBoxesOnly = ConfigManager.outerBoxesOnly.get(); - for (Map.Entry> entry : boundingBoxes.entrySet()) { - AbstractBoundingBox key = entry.getKey(); - if (!key.shouldRender()) continue; - + for (AbstractBoundingBox key : boundingBoxes) { AbstractRenderer renderer = boundingBoxRendererMap.get(key.getClass()); if (renderer == null) continue; - if (!outerBoxesOnly) { - Set children = entry.getValue(); - if (children != null && children.size() > 0) { - children.forEach(renderer::render); - continue; - } - } renderer.render(key); } @@ -104,20 +104,14 @@ public class ClientRenderer { GL11.glEnable(GL11.GL_TEXTURE_2D); } - private Map> getBoundingBoxes(int dimensionId) { - Map> boundingBoxes = new HashMap<>(); - for(IBoundingBoxProvider provider: providers) { - for (AbstractBoundingBox boundingBox : provider.get(dimensionId)) { - boundingBoxes.put(boundingBox, null); - } - } - - BoundingBoxCache cache = getCache.apply(dimensionId); - if (cache != null) { - for (Map.Entry> entry : cache.getBoundingBoxes().entrySet()) { - AbstractBoundingBox key = entry.getKey(); - if (key.shouldRender() && isWithinRenderDistance(key)) { - boundingBoxes.put(key, entry.getValue()); + private static Set getBoundingBoxes(int dimensionId) { + Set boundingBoxes = new HashSet<>(); + for (IBoundingBoxProvider provider : providers) { + if (provider.canProvide(dimensionId)) { + for (AbstractBoundingBox boundingBox : provider.get(dimensionId)) { + if (isWithinRenderDistance(boundingBox)) { + boundingBoxes.add(boundingBox); + } } } }