diff --git a/src/main/java/com/flowpowered/api/component/entity/PlayerControlledMovementComponent.java b/src/main/java/com/flowpowered/api/component/entity/PlayerControlledMovementComponent.java index d5084c7..d0a5cbb 100644 --- a/src/main/java/com/flowpowered/api/component/entity/PlayerControlledMovementComponent.java +++ b/src/main/java/com/flowpowered/api/component/entity/PlayerControlledMovementComponent.java @@ -36,7 +36,7 @@ import com.flowpowered.math.vector.Vector3f; public class PlayerControlledMovementComponent extends EntityComponent { - private static final float SPEED = 20f; + private static final float SPEED = 10f; private Player controller; diff --git a/src/main/java/com/flowpowered/api/generator/FlatWorldGenerator.java b/src/main/java/com/flowpowered/api/generator/FlatWorldGenerator.java index b38c0f7..e49d910 100644 --- a/src/main/java/com/flowpowered/api/generator/FlatWorldGenerator.java +++ b/src/main/java/com/flowpowered/api/generator/FlatWorldGenerator.java @@ -51,7 +51,7 @@ public void generate(CuboidBlockMaterialBuffer blockData, World world) { } final int bottom = Math.max(-32, minBlockY); final int top = Math.min(-1, maxBlockY); - blockData.setHorizontalLayer(bottom, top - bottom + 1, material); + blockData.setHorizontalLayer(bottom, top - bottom, material); } @Override diff --git a/src/main/java/com/flowpowered/engine/geo/region/FlowRegion.java b/src/main/java/com/flowpowered/engine/geo/region/FlowRegion.java index e52427a..a778922 100644 --- a/src/main/java/com/flowpowered/engine/geo/region/FlowRegion.java +++ b/src/main/java/com/flowpowered/engine/geo/region/FlowRegion.java @@ -175,12 +175,6 @@ public void run() { return null; } - private static volatile int genCount = 0; - - public static int getGenCount() { - return genCount; - } - // If loadopt.isWait(), this method is run synchronously and so is any further generation // If !loadopt.isWait(), this method is run by a runnable, because the loading is taxing; any further generation is also run in its own Runnable private FlowChunk loadOrGenChunkImmediately(int worldX, int worldY, int worldZ, final LoadOption loadopt) { @@ -193,7 +187,6 @@ private FlowChunk loadOrGenChunkImmediately(int worldX, int worldY, int worldZ, return newChunk; } - genCount++; generator.generateChunk(worldX, worldY, worldZ, loadopt.isWait()); if (!loadopt.isWait()) { return null; diff --git a/src/main/java/com/flowpowered/engine/geo/region/RegionGenerator.java b/src/main/java/com/flowpowered/engine/geo/region/RegionGenerator.java index eed3ba9..f9e7de6 100644 --- a/src/main/java/com/flowpowered/engine/geo/region/RegionGenerator.java +++ b/src/main/java/com/flowpowered/engine/geo/region/RegionGenerator.java @@ -176,6 +176,7 @@ private void generateChunk0(final int chunkXWorld, final int chunkYWorld, final throw new IllegalStateException("Unable to set generate state for column " + sectionX + ", " + sectionY +", " + sectionZ + " in region " + region.getBase().toBlockString() + " to copying, state is " + generated.get() + " wait is " + wait); } region.setGeneratedChunks(chunks); + genCount.incrementAndGet(); // We need to set the generated state before we unlock the readLock so waiting generators get the state immediately if (!generated.compareAndSet(GenerateState.COPYING, GenerateState.COPIED)) { @@ -185,7 +186,13 @@ private void generateChunk0(final int chunkXWorld, final int chunkYWorld, final sectionLock.unlock(); } } - + + private static AtomicInteger genCount = new AtomicInteger(); + + public static int getGenCount() { + return genCount.get(); + } + private static void initExecutorService(Logger logger) { if (pool.get() == null) { pool.compareAndSet(null, LoggingThreadPoolExecutor.newFixedThreadExecutorWithMarkedName(Runtime.getRuntime().availableProcessors() * 2 + 1, "RegionGenerator - async pool", logger)); diff --git a/src/main/java/com/flowpowered/engine/render/FlowRenderer.java b/src/main/java/com/flowpowered/engine/render/FlowRenderer.java index e21523a..72b8a5e 100644 --- a/src/main/java/com/flowpowered/engine/render/FlowRenderer.java +++ b/src/main/java/com/flowpowered/engine/render/FlowRenderer.java @@ -39,7 +39,7 @@ import com.flowpowered.api.render.Renderer; import com.flowpowered.commons.TPSMonitor; -import com.flowpowered.engine.geo.region.FlowRegion; +import com.flowpowered.engine.geo.region.RegionGenerator; import com.flowpowered.engine.scheduler.FlowScheduler; import com.flowpowered.engine.scheduler.render.RenderThread; import com.flowpowered.math.vector.Vector2i; @@ -332,7 +332,7 @@ private void updateHUD() { Camera camera = renderModelsNode.getAttribute("camera"); positionModel.setString("Position: " + camera.getPosition().toInt().toString() + " Rotation: " + camera.getRotation().toString()); - genCountModel.setString("GenCount: " + FlowRegion.getGenCount()); + genCountModel.setString("GenCount: " + RegionGenerator.getGenCount()); } /** @@ -450,10 +450,10 @@ public void saveScreenshot(File outputDir) { @Override public Vector2i getResolution() { return windowSize; -} + } @Override public float getAspectRatio() { return (float) windowSize.getY() / windowSize.getX(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/flowpowered/engine/render/model/ChunkModel.java b/src/main/java/com/flowpowered/engine/render/model/ChunkModel.java index 198dc53..a1f8efb 100644 --- a/src/main/java/com/flowpowered/engine/render/model/ChunkModel.java +++ b/src/main/java/com/flowpowered/engine/render/model/ChunkModel.java @@ -81,13 +81,13 @@ public synchronized void render() { previous = null; } } - if (!renderer.isChunkVisible(getPosition())) { - return; - } // If we have a vertex array, we can render if (complete) { // Only render if the model has a vertex array and we're visible if (getVertexArray() != null) { + if (!renderer.isChunkVisible(getPosition())) { + return; + } super.render(); } } else if (previous != null) { diff --git a/src/main/java/com/flowpowered/engine/scheduler/render/RenderThread.java b/src/main/java/com/flowpowered/engine/scheduler/render/RenderThread.java index b8da272..1721579 100644 --- a/src/main/java/com/flowpowered/engine/scheduler/render/RenderThread.java +++ b/src/main/java/com/flowpowered/engine/scheduler/render/RenderThread.java @@ -38,8 +38,6 @@ import com.flowpowered.api.geo.reference.WorldReference; import com.flowpowered.api.geo.snapshot.ChunkSnapshot; import com.flowpowered.api.input.KeyboardEvent; -import com.flowpowered.api.material.block.BlockFace; -import com.flowpowered.api.material.block.BlockFaces; import com.flowpowered.commons.ViewFrustum; import com.flowpowered.commons.ticking.TickingElement; import com.flowpowered.engine.FlowClient; @@ -179,14 +177,15 @@ private void updateChunkModels() { addChunkModel(snapshot); chunkLastUpdateNumbers.put(position, snapshot.getUpdateNumber()); + // TODO: add this back in to make ChunkModels in render as efficient as possible // Remesh surrounding chunks - for (BlockFace f : BlockFaces.NESWBT) { - Vector3i localPosition = position.add(f.getOffset()); - ChunkSnapshot old = oldChunks.get(localPosition); - if (old != null) { - chunkLastUpdateNumbers.put(localPosition, 0); - } - } + //for (BlockFace f : BlockFaces.NESWBT) { + // Vector3i localPosition = position.add(f.getOffset()); + // ChunkSnapshot old = oldChunks.get(localPosition); + // if (old != null) { + // chunkLastUpdateNumbers.put(localPosition, 0); + // } + //} } for (ChunkSnapshot chunk : oldChunks.values()) {