From 37b85057c3827250625bc103a47e73dab6deb1f3 Mon Sep 17 00:00:00 2001 From: mcrcortex <{ID}+{username}@users.noreply.github.com> Date: Sat, 13 Jul 2024 13:19:47 +1000 Subject: [PATCH] Restructure B --- .../core/AbstractRenderWorldInteractor.java | 17 +++++ .../core/DefaultRenderWorldInteractor.java | 66 +++++++++++++++++++ .../me/cortex/voxy/client/core/VoxelCore.java | 32 ++------- 3 files changed, 90 insertions(+), 25 deletions(-) create mode 100644 src/main/java/me/cortex/voxy/client/core/AbstractRenderWorldInteractor.java create mode 100644 src/main/java/me/cortex/voxy/client/core/DefaultRenderWorldInteractor.java diff --git a/src/main/java/me/cortex/voxy/client/core/AbstractRenderWorldInteractor.java b/src/main/java/me/cortex/voxy/client/core/AbstractRenderWorldInteractor.java new file mode 100644 index 00000000..21d2af57 --- /dev/null +++ b/src/main/java/me/cortex/voxy/client/core/AbstractRenderWorldInteractor.java @@ -0,0 +1,17 @@ +package me.cortex.voxy.client.core; + +import me.cortex.voxy.client.core.rendering.building.BuiltSection; +import me.cortex.voxy.client.core.rendering.building.RenderGenerationService; +import me.cortex.voxy.common.world.WorldSection; + +public interface AbstractRenderWorldInteractor { + void processBuildResult(BuiltSection section); + + void sectionUpdated(WorldSection worldSection); + + void setRenderGen(RenderGenerationService renderService); + + void initPosition(int x, int z); + + void setCenter(int x, int y, int z); +} diff --git a/src/main/java/me/cortex/voxy/client/core/DefaultRenderWorldInteractor.java b/src/main/java/me/cortex/voxy/client/core/DefaultRenderWorldInteractor.java new file mode 100644 index 00000000..6901f809 --- /dev/null +++ b/src/main/java/me/cortex/voxy/client/core/DefaultRenderWorldInteractor.java @@ -0,0 +1,66 @@ +package me.cortex.voxy.client.core; + +import me.cortex.voxy.client.config.VoxyConfig; +import me.cortex.voxy.client.core.rendering.AbstractFarWorldRenderer; +import me.cortex.voxy.client.core.rendering.IRenderInterface; +import me.cortex.voxy.client.core.rendering.RenderTracker; +import me.cortex.voxy.client.core.rendering.building.BuiltSection; +import me.cortex.voxy.client.core.rendering.building.RenderGenerationService; +import me.cortex.voxy.client.saver.ContextSelectionSystem; +import me.cortex.voxy.common.world.WorldEngine; +import me.cortex.voxy.common.world.WorldSection; +import net.minecraft.client.MinecraftClient; + +public class DefaultRenderWorldInteractor implements AbstractRenderWorldInteractor { + private final DistanceTracker distanceTracker; + private final RenderTracker renderTracker; + + + public DefaultRenderWorldInteractor(ContextSelectionSystem.WorldConfig cfg, WorldEngine world, IRenderInterface renderer) { + this.renderTracker = new RenderTracker(world, (AbstractFarWorldRenderer) renderer); + + //To get to chunk scale multiply the scale by 2, the scale is after how many chunks does the lods halve + int q = VoxyConfig.CONFIG.qualityScale; + int minY = MinecraftClient.getInstance().world.getBottomSectionCoord()/2; + int maxY = MinecraftClient.getInstance().world.getTopSectionCoord()/2; + + if (cfg.minYOverride != Integer.MAX_VALUE) { + minY = cfg.minYOverride; + } + + if (cfg.maxYOverride != Integer.MIN_VALUE) { + maxY = cfg.maxYOverride; + } + + this.distanceTracker = new DistanceTracker(this.renderTracker, new int[]{q,q,q,q}, + (VoxyConfig.CONFIG.renderDistance<0?VoxyConfig.CONFIG.renderDistance:((VoxyConfig.CONFIG.renderDistance+1)/2)), + minY, maxY); + + System.out.println("Distance tracker initialized"); + } + + @Override + public void processBuildResult(BuiltSection section) { + this.renderTracker.processBuildResult(section); + } + + @Override + public void sectionUpdated(WorldSection worldSection) { + this.renderTracker.sectionUpdated(worldSection); + } + + @Override + public void setRenderGen(RenderGenerationService renderService) { + this.renderTracker.setRenderGen(renderService); + } + + @Override + public void initPosition(int x, int z) { + this.distanceTracker.init(x,z); + } + + @Override + public void setCenter(int x, int y, int z) { + this.distanceTracker.setCenter(x,y,z); + } +} diff --git a/src/main/java/me/cortex/voxy/client/core/VoxelCore.java b/src/main/java/me/cortex/voxy/client/core/VoxelCore.java index 28d4827e..99398f08 100644 --- a/src/main/java/me/cortex/voxy/client/core/VoxelCore.java +++ b/src/main/java/me/cortex/voxy/client/core/VoxelCore.java @@ -48,9 +48,7 @@ public class VoxelCore { private final WorldEngine world; private final RenderGenerationService renderGen; private final ModelManager modelManager; - - private final DistanceTracker distanceTracker; - private final RenderTracker renderTracker; + private final AbstractRenderWorldInteractor interactor; private final IRenderInterface renderer; private final ViewportSelector viewportSelector; @@ -71,30 +69,14 @@ public class VoxelCore { this.renderer = this.createRenderBackend(); this.viewportSelector = new ViewportSelector<>(this.renderer::createViewport); System.out.println("Renderer initialized"); + this.interactor = new DefaultRenderWorldInteractor(cfg, this.world, this.renderer); - this.renderTracker = new RenderTracker(this.world, (AbstractFarWorldRenderer) this.renderer); - this.renderGen = new RenderGenerationService(this.world, this.modelManager, VoxyConfig.CONFIG.renderThreads, this.renderTracker::processBuildResult, this.renderer.generateMeshlets()); - this.world.setDirtyCallback(this.renderTracker::sectionUpdated); - this.renderTracker.setRenderGen(this.renderGen); + this.renderGen = new RenderGenerationService(this.world, this.modelManager, VoxyConfig.CONFIG.renderThreads, this.interactor::processBuildResult, this.renderer.generateMeshlets()); + this.world.setDirtyCallback(this.interactor::sectionUpdated); + this.interactor.setRenderGen(this.renderGen); System.out.println("Render tracker and generator initialized"); - //To get to chunk scale multiply the scale by 2, the scale is after how many chunks does the lods halve - int q = VoxyConfig.CONFIG.qualityScale; - int minY = MinecraftClient.getInstance().world.getBottomSectionCoord()/2; - int maxY = MinecraftClient.getInstance().world.getTopSectionCoord()/2; - if (cfg.minYOverride != Integer.MAX_VALUE) { - minY = cfg.minYOverride; - } - - if (cfg.maxYOverride != Integer.MIN_VALUE) { - maxY = cfg.maxYOverride; - } - - this.distanceTracker = new DistanceTracker(this.renderTracker, new int[]{q,q,q,q}, - (VoxyConfig.CONFIG.renderDistance<0?VoxyConfig.CONFIG.renderDistance:((VoxyConfig.CONFIG.renderDistance+1)/2)), - minY, maxY); - System.out.println("Distance tracker initialized"); this.postProcessing = new PostProcessing(); @@ -142,11 +124,11 @@ public class VoxelCore { boolean firstTime = true; public void renderSetup(Frustum frustum, Camera camera) { if (this.firstTime) { - this.distanceTracker.init(camera.getBlockPos().getX(), camera.getBlockPos().getZ()); + this.interactor.initPosition(camera.getBlockPos().getX(), camera.getBlockPos().getZ()); this.firstTime = false; //this.renderTracker.addLvl0(0,6,0); } - this.distanceTracker.setCenter(camera.getBlockPos().getX(), camera.getBlockPos().getY(), camera.getBlockPos().getZ()); + this.interactor.setCenter(camera.getBlockPos().getX(), camera.getBlockPos().getY(), camera.getBlockPos().getZ()); this.renderer.setupRender(frustum, camera); }