From 2d322e83bcfe53cfdfa078c2608893461b65a6b1 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Fri, 27 Nov 2020 23:54:41 +0300 Subject: [PATCH] I've had it with LowOverheadCaches Benchmarking showed that using LOC gave a whopping 5% speed advantage at the cost of terrible readability. In the worst case. Decided that having clear, laconic and Java-style code is worth the drop in performance. --- .../client/graphics/model/Faces.java | 94 ++++++++----------- .../client/graphics/model/Shapes.java | 21 ++--- .../client/graphics/world/Camera.java | 10 +- .../client/graphics/world/Selection.java | 8 +- .../progressia/client/world/ChunkRender.java | 13 +-- .../world/cro/ChunkRenderOptimizerCube.java | 13 +-- .../client/world/entity/NPedModel.java | 13 +-- .../client/world/tile/TileRenderGrass.java | 23 ++--- .../client/world/tile/TileRenderSimple.java | 23 ++--- .../progressia/common/util/Matrices.java | 3 +- .../progressia/common/util/Vectors.java | 3 +- .../progressia/common/world/ChunkData.java | 5 +- .../progressia/common/world/Coordinates.java | 6 ++ .../progressia/common/world/WorldData.java | 23 +---- .../common/world/entity/EntityData.java | 6 +- .../progressia/server/world/ChunkLogic.java | 23 ++--- .../server/world/MutableBlockTickContext.java | 8 +- .../server/world/TickAndUpdateUtil.java | 47 ++-------- .../progressia/server/world/WorldLogic.java | 28 +----- .../server/world/tasks/AddOrRemoveTile.java | 10 +- .../world/tasks/BlockTriggeredUpdate.java | 6 +- .../server/world/tasks/SetBlock.java | 10 +- .../world/tasks/TileTriggeredUpdate.java | 6 +- .../server/world/tile/EdgeTileLogic.java | 11 +-- .../server/world/tile/TileTickContext.java | 53 ++++------- .../test/CollisionModelRenderer.java | 5 +- .../windcorp/progressia/test/TestContent.java | 11 +-- .../progressia/test/TestPlayerControls.java | 13 +-- .../progressia/test/TestTileLogicGrass.java | 18 +--- 29 files changed, 151 insertions(+), 362 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Faces.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Faces.java index 8b098b1..a1d64dd 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Faces.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Faces.java @@ -23,7 +23,6 @@ import glm.vec._2.Vec2; import glm.vec._3.Vec3; import ru.windcorp.progressia.client.graphics.model.ShapeRenderProgram.VertexBuilder; import ru.windcorp.progressia.client.graphics.texture.Texture; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.block.BlockFace; public class Faces { @@ -41,47 +40,37 @@ public class Faces { ) { VertexBuilder builder = program.getVertexBuilder(); - Vec3 pos = Vectors.grab3(); - Vec2 texCoords = Vectors.grab2(); + builder.addVertex( + origin, + colorMultiplier, + new Vec2(0, 0) + ).addVertex( + origin.add_(height), + colorMultiplier, + new Vec2(0, 1) + ).addVertex( + origin.add_(width), + colorMultiplier, + new Vec2(1, 0) + ).addVertex( + origin.add_(width).add(height), + colorMultiplier, + new Vec2(1, 1) + ); - try { + ShortBuffer buffer = flip ? ShortBuffer.wrap(new short[] { + 0, 1, 3, + 0, 3, 2 + }) : ShortBuffer.wrap(new short[] { + 3, 1, 0, + 2, 3, 0 + }); - builder.addVertex( - origin, - colorMultiplier, - texCoords.set(0, 0) - ).addVertex( - pos.set(origin).add(height), - colorMultiplier, - texCoords.set(0, 1) - ).addVertex( - pos.set(origin).add(width), - colorMultiplier, - texCoords.set(1, 0) - ).addVertex( - pos.add(height), - colorMultiplier, - texCoords.set(1, 1) - ); - - ShortBuffer buffer = flip ? ShortBuffer.wrap(new short[] { - 0, 1, 3, - 0, 3, 2 - }) : ShortBuffer.wrap(new short[] { - 3, 1, 0, - 2, 3, 0 - }); - - return new Face( - texture, - builder.assemble(), - buffer - ); - - } finally { - Vectors.release(pos); - Vectors.release(texCoords); - } + return new Face( + texture, + builder.assemble(), + buffer + ); } public static Face createBlockFace( @@ -94,22 +83,15 @@ public class Faces { ) { BlockFaceVectors vectors = BlockFaceVectors.get(inner); - Vec3 origin = - Vectors.grab3().set(blockCenter).add(vectors.getOrigin(face)); - try { - - Vec3 width = vectors.getWidth(face); - Vec3 height = vectors.getHeight(face); - - return createRectangle( - program, texture, colorMultiplier, - origin, width, height, - inner - ); - - } finally { - Vectors.release(origin); - } + Vec3 origin = blockCenter.add_(vectors.getOrigin(face)); + Vec3 width = vectors.getWidth(face); + Vec3 height = vectors.getHeight(face); + + return createRectangle( + program, texture, colorMultiplier, + origin, width, height, + inner + ); } } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java index 224ff11..83c7f2e 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java @@ -22,7 +22,6 @@ import java.util.Map; import glm.vec._3.Vec3; import ru.windcorp.progressia.client.graphics.backend.Usage; import ru.windcorp.progressia.client.graphics.texture.Texture; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.block.BlockFace; public class Shapes { @@ -48,14 +47,11 @@ public class Shapes { boolean flip ) { - Vec3 faceOrigin = Vectors.grab3(); - Vec3 faceWidth = Vectors.grab3(); - Face top = Faces.createRectangle( program, topTexture, colorMultiplier, - faceOrigin.set(origin).add(height).add(width), - faceWidth.set(width).negate(), + origin.add_(height).add(width), + width.negate_(), depth, flip ); @@ -72,7 +68,7 @@ public class Shapes { Face north = Faces.createRectangle( program, northTexture, colorMultiplier, - faceOrigin.set(origin).add(depth), + origin.add_(depth), width, height, flip @@ -81,8 +77,8 @@ public class Shapes { Face south = Faces.createRectangle( program, southTexture, colorMultiplier, - faceOrigin.set(origin).add(width), - faceWidth.set(width).negate(), + origin.add_(width), + width.negate_(), height, flip ); @@ -99,8 +95,8 @@ public class Shapes { Face west = Faces.createRectangle( program, westTexture, colorMultiplier, - faceOrigin.set(origin).add(width).add(depth), - faceWidth.set(depth).negate(), + origin.add_(width).add(depth), + depth.negate_(), height, flip ); @@ -111,9 +107,6 @@ public class Shapes { top, bottom, north, south, east, west ); - Vectors.release(faceOrigin); - Vectors.release(faceWidth); - return result; } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/Camera.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/Camera.java index 56748f9..df01b75 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/Camera.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/Camera.java @@ -28,7 +28,6 @@ import glm.mat._4.Mat4; import glm.vec._3.Vec3; import ru.windcorp.progressia.client.graphics.backend.GraphicsInterface; import ru.windcorp.progressia.client.graphics.world.Camera.Anchor.Mode; -import ru.windcorp.progressia.common.util.Vectors; public class Camera { @@ -133,14 +132,12 @@ public class Camera { Mat4 matrix = helper.pushViewTransform(); - Vec3 offset = Vectors.grab3(); + Vec3 offset = new Vec3(); mode.getCameraOffset(offset); offset.negate(); matrix.translate(offset); - Vectors.release(offset); - mode.applyCameraRotation(matrix); } @@ -168,15 +165,12 @@ public class Camera { } private void applyPosition(WorldRenderHelper helper) { - Vec3 v = Vectors.grab3(); - + Vec3 v = new Vec3(); anchor.getCameraPosition(v); this.lastAnchorPosition.set(v); v.negate(); helper.pushViewTransform().translate(v); - - Vectors.release(v); } private void cacheCameraTransform(WorldRenderHelper helper) { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/Selection.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/Selection.java index 3627e3c..70951ee 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/Selection.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/Selection.java @@ -4,7 +4,6 @@ import glm.vec._2.Vec2; import glm.vec._3.Vec3; import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.client.world.WorldRender; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.BlockRay; import ru.windcorp.progressia.common.world.block.BlockFace; import ru.windcorp.progressia.common.world.entity.EntityData; @@ -21,8 +20,8 @@ public class Selection { private BlockRay ray = new BlockRay(); public void update(WorldRender world, EntityData player) { - Vec3 direction = Vectors.grab3(); - Vec3 start = Vectors.grab3(); + Vec3 direction = new Vec3(); + Vec3 start = new Vec3(); player.getLookingAtVector(direction); world.getEntityRenderable(player).getViewPoint(start); @@ -44,9 +43,6 @@ public class Selection { } ray.end(); - - Vectors.release(direction); - Vectors.release(start); } public Vec3i getBlock() { diff --git a/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java b/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java index 3bead82..dee73cb 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java +++ b/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java @@ -38,7 +38,6 @@ import ru.windcorp.progressia.client.world.cro.ChunkRenderOptimizerSupplier; import ru.windcorp.progressia.client.world.cro.ChunkRenderOptimizers; import ru.windcorp.progressia.client.world.tile.TileRender; import ru.windcorp.progressia.client.world.tile.TileRenderRegistry; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.ChunkData; import ru.windcorp.progressia.common.world.block.BlockFace; import ru.windcorp.progressia.common.world.tile.TileData; @@ -216,16 +215,13 @@ public class ChunkRender { ) { // TODO implement - Vec3 pos = Vectors.grab3().set(cursor.x, cursor.y, cursor.z); + Vec3 pos = new Vec3(cursor.x, cursor.y, cursor.z); optimizers.forEach(cro -> cro.processTile(tile, cursor, face)); - if (!tile.needsOwnRenderable()) { - Vectors.release(pos); - return; - } + if (!tile.needsOwnRenderable()) return; - Vec3 offset = Vectors.grab3().set( + Vec3 offset = new Vec3( face.getVector().x, face.getVector().y, face.getVector().z ); @@ -235,9 +231,6 @@ public class ChunkRender { tile.createRenderable(face), new Mat4().identity().translate(pos) ); - - Vectors.release(pos); - Vectors.release(offset); } } diff --git a/src/main/java/ru/windcorp/progressia/client/world/cro/ChunkRenderOptimizerCube.java b/src/main/java/ru/windcorp/progressia/client/world/cro/ChunkRenderOptimizerCube.java index ab457c9..89ca03f 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/cro/ChunkRenderOptimizerCube.java +++ b/src/main/java/ru/windcorp/progressia/client/world/cro/ChunkRenderOptimizerCube.java @@ -36,7 +36,6 @@ import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram; import ru.windcorp.progressia.client.world.ChunkRender; import ru.windcorp.progressia.client.world.block.BlockRender; import ru.windcorp.progressia.client.world.tile.TileRender; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.block.BlockFace; public class ChunkRenderOptimizerCube extends ChunkRenderOptimizer { @@ -173,16 +172,11 @@ public class ChunkRenderOptimizerCube extends ChunkRenderOptimizer { Vec3i cursor, Consumer output ) { - Vec3 faceOrigin = Vectors.grab3(); - Vec3 offset = Vectors.grab3(); - for (BlockFace face : BlockFace.getFaces()) { if (!shouldRenderOuterFace(cursor, face)) continue; - faceOrigin.set(cursor.x, cursor.y, cursor.z); - offset - .set(face.getVector().x, face.getVector().y, face.getVector().z) - .mul(1f / 128); + Vec3 faceOrigin = new Vec3(cursor.x, cursor.y, cursor.z); + Vec3 offset = new Vec3(face.getVector().x, face.getVector().y, face.getVector().z).mul(1f / 128); FaceInfo info = getFace(cursor, face); @@ -215,9 +209,6 @@ public class ChunkRenderOptimizerCube extends ChunkRenderOptimizer { faceOrigin.add(offset); } } - - Vectors.release(offset); - Vectors.release(faceOrigin); } private void addFace( diff --git a/src/main/java/ru/windcorp/progressia/client/world/entity/NPedModel.java b/src/main/java/ru/windcorp/progressia/client/world/entity/NPedModel.java index 441ff6e..43d9433 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/entity/NPedModel.java +++ b/src/main/java/ru/windcorp/progressia/client/world/entity/NPedModel.java @@ -14,8 +14,6 @@ import ru.windcorp.progressia.client.graphics.backend.GraphicsInterface; import ru.windcorp.progressia.client.graphics.model.Renderable; import ru.windcorp.progressia.client.graphics.model.ShapeRenderHelper; import ru.windcorp.progressia.common.Units; -import ru.windcorp.progressia.common.util.Matrices; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.entity.EntityData; public abstract class NPedModel extends EntityRenderable { @@ -162,8 +160,7 @@ public abstract class NPedModel extends EntityRenderable { } private void accountForVelocity() { - Vec3 horizontal = Vectors.grab3(); - horizontal.set(getData().getVelocity()); + Vec3 horizontal = new Vec3(getData().getVelocity()); horizontal.z = 0; velocity = horizontal.length(); @@ -176,7 +173,6 @@ public abstract class NPedModel extends EntityRenderable { bodyYaw += velocityParameter * normalizeAngle( (float) (atan2(horizontal.y, horizontal.x) - bodyYaw) ) * min(1, GraphicsInterface.getFrameLength() * 10); - Vectors.release(horizontal); } private void evaluateVelocityCoeff() { @@ -189,8 +185,8 @@ public abstract class NPedModel extends EntityRenderable { @Override public void getViewPoint(Vec3 output) { - Mat4 m = Matrices.grab4(); - Vec4 v = Vectors.grab4(); + Mat4 m = new Mat4(); + Vec4 v = new Vec4(); m.identity() .scale(scale) @@ -203,9 +199,6 @@ public abstract class NPedModel extends EntityRenderable { m.mul(v); output.set(v.x, v.y, v.z); - - Vectors.release(v); - Matrices.release(m); } public Body getBody() { diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderGrass.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderGrass.java index 2e932e1..cc59b74 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderGrass.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderGrass.java @@ -9,7 +9,6 @@ import ru.windcorp.progressia.client.graphics.model.Renderable; import ru.windcorp.progressia.client.graphics.texture.Texture; import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram; import ru.windcorp.progressia.client.world.cro.ChunkRenderOptimizerCube.OpaqueTile; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.block.BlockFace; public class TileRenderGrass extends TileRender implements OpaqueTile { @@ -40,21 +39,13 @@ public class TileRenderGrass extends TileRender implements OpaqueTile { public Renderable createRenderable(BlockFace face) { ShapeRenderProgram program = WorldRenderProgram.getDefault(); - Vec3 color = Vectors.grab3().set(1, 1, 1); - Vec3 center = Vectors.grab3().set(0, 0, 0); - - try { - return new Shape( - Usage.STATIC, WorldRenderProgram.getDefault(), - Faces.createBlockFace( - program, getTexture(face), color, - center, face, false - ) - ); - } finally { - Vectors.release(color); - Vectors.release(center); - } + return new Shape( + Usage.STATIC, WorldRenderProgram.getDefault(), + Faces.createBlockFace( + program, getTexture(face), new Vec3(1, 1, 1), + new Vec3(0, 0, 0), face, false + ) + ); } @Override diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderSimple.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderSimple.java index 0e4f3b6..88e3f52 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderSimple.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderSimple.java @@ -9,7 +9,6 @@ import ru.windcorp.progressia.client.graphics.model.Renderable; import ru.windcorp.progressia.client.graphics.texture.Texture; import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram; import ru.windcorp.progressia.client.world.cro.ChunkRenderOptimizerCube.OpaqueTile; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.block.BlockFace; public class TileRenderSimple extends TileRender implements OpaqueTile { @@ -35,21 +34,13 @@ public class TileRenderSimple extends TileRender implements OpaqueTile { public Renderable createRenderable(BlockFace face) { ShapeRenderProgram program = WorldRenderProgram.getDefault(); - Vec3 color = Vectors.grab3().set(1, 1, 1); - Vec3 center = Vectors.grab3().set(0, 0, 0); - - try { - return new Shape( - Usage.STATIC, WorldRenderProgram.getDefault(), - Faces.createBlockFace( - program, getTexture(face), color, - center, face, false - ) - ); - } finally { - Vectors.release(color); - Vectors.release(center); - } + return new Shape( + Usage.STATIC, WorldRenderProgram.getDefault(), + Faces.createBlockFace( + program, getTexture(face), new Vec3(1, 1, 1), + new Vec3(0, 0, 0), face, false + ) + ); } @Override diff --git a/src/main/java/ru/windcorp/progressia/common/util/Matrices.java b/src/main/java/ru/windcorp/progressia/common/util/Matrices.java index bc60c22..9161f99 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/Matrices.java +++ b/src/main/java/ru/windcorp/progressia/common/util/Matrices.java @@ -5,8 +5,7 @@ import glm.mat._4.Mat4; import glm.mat._4.d.Mat4d; /** - * A set of caches for GLM matrix objects. Use this instead of allocating new - * matrices when the objects are effectively local. + * A set of caches for GLM matrix objects. *

* All {@code grab}bed objects must be {@code release}d as soon as possible. * Ideally, user code should be: diff --git a/src/main/java/ru/windcorp/progressia/common/util/Vectors.java b/src/main/java/ru/windcorp/progressia/common/util/Vectors.java index 7cc3623..355827e 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/Vectors.java +++ b/src/main/java/ru/windcorp/progressia/common/util/Vectors.java @@ -8,8 +8,7 @@ import glm.vec._4.Vec4; import glm.vec._4.i.Vec4i; /** - * A set of caches for GLM vector objects. Use this instead of allocating new - * vectors when the objects are effectively local. + * A set of caches for GLM vector objects. *

* All {@code grab}bed objects must be {@code release}d as soon as possible. * Ideally, user code should be: diff --git a/src/main/java/ru/windcorp/progressia/common/world/ChunkData.java b/src/main/java/ru/windcorp/progressia/common/world/ChunkData.java index 4a9d5d5..2625d6b 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/ChunkData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/ChunkData.java @@ -34,7 +34,6 @@ import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.client.world.tile.TileLocation; import ru.windcorp.progressia.common.util.SizeLimitedList; import ru.windcorp.progressia.common.util.VectorUtil; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.block.BlockData; import ru.windcorp.progressia.common.world.block.BlockDataRegistry; import ru.windcorp.progressia.common.world.block.BlockFace; @@ -219,9 +218,7 @@ public class ChunkData { List secondaryList = Lists.reverse(primaryList); - - Vec3i cursor = Vectors.grab3i() - .set(blockInChunk.x, blockInChunk.y, blockInChunk.z); + Vec3i cursor = new Vec3i(blockInChunk.x, blockInChunk.y, blockInChunk.z); face = face.getPrimaryAndMoveCursor(cursor); setTiles(cursor, face, primaryList); diff --git a/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java b/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java index bfc7773..7bd06ce 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java +++ b/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java @@ -60,6 +60,8 @@ public class Coordinates { Vec3i blockInWorld, Vec3i output ) { + if (output == null) output = new Vec3i(); + output.x = convertInWorldToChunk(blockInWorld.x); output.y = convertInWorldToChunk(blockInWorld.y); output.z = convertInWorldToChunk(blockInWorld.z); @@ -94,6 +96,8 @@ public class Coordinates { Vec3i blockInWorld, Vec3i output ) { + if (output == null) output = new Vec3i(); + output.x = convertInWorldToInChunk(blockInWorld.x); output.y = convertInWorldToInChunk(blockInWorld.y); output.z = convertInWorldToInChunk(blockInWorld.z); @@ -130,6 +134,8 @@ public class Coordinates { Vec3i chunk, Vec3i blockInChunk, Vec3i output ) { + if (output == null) output = new Vec3i(); + output.x = getInWorld(chunk.x, blockInChunk.x); output.y = getInWorld(chunk.y, blockInChunk.y); output.z = getInWorld(chunk.z, blockInChunk.z); diff --git a/src/main/java/ru/windcorp/progressia/common/world/WorldData.java b/src/main/java/ru/windcorp/progressia/common/world/WorldData.java index 29e82ce..30aac1f 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/WorldData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/WorldData.java @@ -27,7 +27,6 @@ import gnu.trove.map.TLongObjectMap; import gnu.trove.map.hash.TLongObjectHashMap; import ru.windcorp.progressia.common.collision.CollisionModel; import ru.windcorp.progressia.common.util.CoordinatePacker; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.block.BlockData; import ru.windcorp.progressia.common.world.entity.EntityData; @@ -102,22 +101,14 @@ public class WorldData { } public ChunkData getChunkByBlock(Vec3i blockInWorld) { - Vec3i chunkPos = Vectors.grab3i(); - Coordinates.convertInWorldToChunk(blockInWorld, chunkPos); - ChunkData result = getChunk(chunkPos); - Vectors.release(chunkPos); - return result; + return getChunk(Coordinates.convertInWorldToChunk(blockInWorld, null)); } public BlockData getBlock(Vec3i blockInWorld) { ChunkData chunk = getChunkByBlock(blockInWorld); if (chunk == null) return null; - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk); - BlockData result = chunk.getBlock(blockInChunk); - - return result; + return chunk.getBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null)); } public void setBlock(Vec3i blockInWorld, BlockData block, boolean notify) { @@ -129,9 +120,7 @@ public class WorldData { + "do not belong to a loaded chunk" ); - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk); - chunk.setBlock(blockInChunk, block, notify); + chunk.setBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null), block, notify); } public Collection getChunks() { @@ -158,11 +147,7 @@ public class WorldData { ChunkData chunk = getChunkByBlock(blockInWorld); if (chunk == null) return null; - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk); - BlockData block = chunk.getBlock(blockInChunk); - Vectors.release(blockInChunk); - + BlockData block = chunk.getBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null)); if (block == null) return null; return block.getCollisionModel(); } diff --git a/src/main/java/ru/windcorp/progressia/common/world/entity/EntityData.java b/src/main/java/ru/windcorp/progressia/common/world/entity/EntityData.java index b8fa18f..b1dfc42 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/entity/EntityData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/entity/EntityData.java @@ -5,7 +5,6 @@ import glm.vec._3.Vec3; import ru.windcorp.progressia.common.collision.Collideable; import ru.windcorp.progressia.common.collision.CollisionModel; import ru.windcorp.progressia.common.state.StatefulObject; -import ru.windcorp.progressia.common.util.Vectors; public class EntityData extends StatefulObject implements Collideable { @@ -29,10 +28,7 @@ public class EntityData extends StatefulObject implements Collideable { } public void setPosition(Vec3 position) { - Vec3 displacement = Vectors.grab3(); - displacement.set(position).sub(getPosition()); - move(displacement); - Vectors.release(displacement); + move(position.sub_(getPosition())); } public void move(Vec3 displacement) { diff --git a/src/main/java/ru/windcorp/progressia/server/world/ChunkLogic.java b/src/main/java/ru/windcorp/progressia/server/world/ChunkLogic.java index f2001ae..33a7d85 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ChunkLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ChunkLogic.java @@ -12,7 +12,6 @@ import com.google.common.collect.Lists; import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.client.world.tile.TileLocation; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.ChunkData; import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.block.BlockFace; @@ -53,12 +52,10 @@ public class ChunkLogic { BlockLogic block = getBlock(blockInChunk); if (block instanceof TickableBlock) { - Vec3i blockInWorld = Vectors.grab3i(); - Coordinates.getInWorld(getData().getPosition(), blockInChunk, blockInWorld); - - blockTickContext.init(getWorld().getServer(), blockInWorld); - - Vectors.release(blockInWorld); + blockTickContext.init( + getWorld().getServer(), + Coordinates.getInWorld(getData().getPosition(), blockInChunk, null) + ); if (((TickableBlock) block).doesTickRegularly(blockTickContext)) { tickingBlocks.add(new Vec3i(blockInChunk)); @@ -70,12 +67,12 @@ public class ChunkLogic { TileLogic tile = TileLogicRegistry.getInstance().get(tileData.getId()); if (tile instanceof TickableTile) { - Vec3i blockInWorld = Vectors.grab3i(); - Coordinates.getInWorld(getData().getPosition(), loc.pos, blockInWorld); - - tileTickContext.init(getWorld().getServer(), blockInWorld, loc.face, loc.layer); - - Vectors.release(blockInWorld); + tileTickContext.init( + getWorld().getServer(), + Coordinates.getInWorld(getData().getPosition(), loc.pos, null), + loc.face, + loc.layer + ); if (((TickableTile) tile).doesTickRegularly(tileTickContext)) { tickingTiles.add(new TileLocation(loc)); diff --git a/src/main/java/ru/windcorp/progressia/server/world/MutableBlockTickContext.java b/src/main/java/ru/windcorp/progressia/server/world/MutableBlockTickContext.java index b1618d9..5a9de50 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/MutableBlockTickContext.java +++ b/src/main/java/ru/windcorp/progressia/server/world/MutableBlockTickContext.java @@ -1,8 +1,6 @@ package ru.windcorp.progressia.server.world; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.Vectors; -import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.server.Server; import ru.windcorp.progressia.server.world.block.BlockTickContext; @@ -20,11 +18,7 @@ implements BlockTickContext { public void setCoordsInWorld(Vec3i blockInWorld) { getBlockInWorld().set(blockInWorld.x, blockInWorld.y, blockInWorld.z); - - Vec3i chunk = Vectors.grab3i(); - Coordinates.convertInWorldToChunk(blockInWorld, chunk); - setChunk(getWorld().getChunk(chunk)); - Vectors.release(chunk); + setChunk(getWorld().getChunkByBlock(blockInWorld)); } @Override diff --git a/src/main/java/ru/windcorp/progressia/server/world/TickAndUpdateUtil.java b/src/main/java/ru/windcorp/progressia/server/world/TickAndUpdateUtil.java index 6270361..47aaffb 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/TickAndUpdateUtil.java +++ b/src/main/java/ru/windcorp/progressia/server/world/TickAndUpdateUtil.java @@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world; import java.util.List; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.LowOverheadCache; import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.common.world.block.BlockFace; import ru.windcorp.progressia.server.Server; @@ -18,12 +17,6 @@ import ru.windcorp.progressia.server.world.tile.UpdateableTile; public class TickAndUpdateUtil { - private static final LowOverheadCache JAVAPONY_S_ULTIMATE_BLOCK_TICK_CONTEXT_SUPPLY = - new LowOverheadCache<>(MutableBlockTickContext::new); - - private static final LowOverheadCache JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY = - new LowOverheadCache<>(MutableTileTickContext::new); - public static void tickBlock(TickableBlock block, BlockTickContext context) { try { block.tick(context); @@ -36,9 +29,8 @@ public class TickAndUpdateUtil { BlockLogic block = world.getBlock(blockInWorld); if (!(block instanceof TickableBlock)) return; // also checks nulls - BlockTickContext tickContext = grabBlockTickContext(world.getServer(), blockInWorld); + BlockTickContext tickContext = getBlockTickContext(world.getServer(), blockInWorld); tickBlock((TickableBlock) block, tickContext); - releaseTickContext(tickContext); } public static void tickTile(TickableTile tile, TileTickContext context) { @@ -53,16 +45,15 @@ public class TickAndUpdateUtil { TileLogic tile = world.getTile(blockInWorld, face, layer); if (!(tile instanceof TickableTile)) return; - TileTickContext tickContext = grabTileTickContext(world.getServer(), blockInWorld, face, layer); + TileTickContext tickContext = getTileTickContext(world.getServer(), blockInWorld, face, layer); tickTile((TickableTile) tile, tickContext); - releaseTickContext(tickContext); } public static void tickTiles(WorldLogic world, Vec3i blockInWorld, BlockFace face) { List tiles = world.getTilesOrNull(blockInWorld, face); if (tiles == null || tiles.isEmpty()) return; - MutableTileTickContext tickContext = JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.grab(); + MutableTileTickContext tickContext = new MutableTileTickContext(); for (int layer = 0; layer < tiles.size(); ++layer) { TileLogic tile = tiles.get(layer); @@ -71,8 +62,6 @@ public class TickAndUpdateUtil { tickContext.init(world.getServer(), blockInWorld, face, layer); tickTile((TickableTile) tile, tickContext); } - - JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.release(tickContext); } public static void updateBlock(UpdateableBlock block, BlockTickContext context) { @@ -87,9 +76,8 @@ public class TickAndUpdateUtil { BlockLogic block = world.getBlock(blockInWorld); if (!(block instanceof UpdateableBlock)) return; // also checks nulls - BlockTickContext tickContext = grabBlockTickContext(world.getServer(), blockInWorld); + BlockTickContext tickContext = getBlockTickContext(world.getServer(), blockInWorld); updateBlock((UpdateableBlock) block, tickContext); - releaseTickContext(tickContext); } public static void updateTile(UpdateableTile tile, TileTickContext context) { @@ -104,16 +92,15 @@ public class TickAndUpdateUtil { TileLogic tile = world.getTile(blockInWorld, face, layer); if (!(tile instanceof UpdateableTile)) return; - TileTickContext tickContext = grabTileTickContext(world.getServer(), blockInWorld, face, layer); + TileTickContext tickContext = getTileTickContext(world.getServer(), blockInWorld, face, layer); updateTile((UpdateableTile) tile, tickContext); - releaseTickContext(tickContext); } public static void updateTiles(WorldLogic world, Vec3i blockInWorld, BlockFace face) { List tiles = world.getTilesOrNull(blockInWorld, face); if (tiles == null || tiles.isEmpty()) return; - MutableTileTickContext tickContext = JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.grab(); + MutableTileTickContext tickContext = new MutableTileTickContext(); for (int layer = 0; layer < tiles.size(); ++layer) { TileLogic tile = tiles.get(layer); @@ -122,42 +109,28 @@ public class TickAndUpdateUtil { tickContext.init(world.getServer(), blockInWorld, face, layer); updateTile((UpdateableTile) tile, tickContext); } - - JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.release(tickContext); } - public static BlockTickContext grabBlockTickContext( + public static BlockTickContext getBlockTickContext( Server server, Vec3i blockInWorld ) { - MutableBlockTickContext result = JAVAPONY_S_ULTIMATE_BLOCK_TICK_CONTEXT_SUPPLY.grab(); + MutableBlockTickContext result = new MutableBlockTickContext(); result.init(server, blockInWorld); return result; } - public static TileTickContext grabTileTickContext( + public static TileTickContext getTileTickContext( Server server, Vec3i blockInWorld, BlockFace face, int layer ) { - MutableTileTickContext result = JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.grab(); + MutableTileTickContext result = new MutableTileTickContext(); result.init(server, blockInWorld, face, layer); return result; } - public static void releaseTickContext(BlockTickContext context) { - JAVAPONY_S_ULTIMATE_BLOCK_TICK_CONTEXT_SUPPLY.release( - (MutableBlockTickContext) context - ); - } - - public static void releaseTickContext(TileTickContext context) { - JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.release( - (MutableTileTickContext) context - ); - } - private TickAndUpdateUtil() {} } diff --git a/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java b/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java index 0e6c61a..2fe9576 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.ChunkData; import ru.windcorp.progressia.common.world.ChunkDataListener; import ru.windcorp.progressia.common.world.ChunkDataListeners; @@ -48,10 +47,7 @@ public class WorldLogic { public void onChunkBlockChanged( ChunkData chunk, Vec3i blockInChunk, BlockData previous, BlockData current ) { - Vec3i blockInWorld = Vectors.grab3i(); - Coordinates.getInWorld(chunk.getPosition(), blockInChunk, blockInWorld); - getServer().getWorldAccessor().triggerUpdates(blockInWorld); - Vectors.release(blockInWorld); + getServer().getWorldAccessor().triggerUpdates(Coordinates.getInWorld(chunk.getPosition(), blockInChunk, null)); } @Override @@ -59,10 +55,7 @@ public class WorldLogic { ChunkData chunk, Vec3i blockInChunk, BlockFace face, TileData tile, boolean wasAdded ) { - Vec3i blockInWorld = Vectors.grab3i(); - Coordinates.getInWorld(chunk.getPosition(), blockInChunk, blockInWorld); - getServer().getWorldAccessor().triggerUpdates(blockInWorld, face); - Vectors.release(blockInWorld); + getServer().getWorldAccessor().triggerUpdates(Coordinates.getInWorld(chunk.getPosition(), blockInChunk, null), face); } })); } @@ -84,22 +77,14 @@ public class WorldLogic { } public ChunkLogic getChunkByBlock(Vec3i blockInWorld) { - Vec3i chunkPos = Vectors.grab3i(); - Coordinates.convertInWorldToChunk(blockInWorld, chunkPos); - ChunkLogic result = getChunk(chunkPos); - Vectors.release(chunkPos); - return result; + return getChunk(Coordinates.convertInWorldToChunk(blockInWorld, null)); } public BlockLogic getBlock(Vec3i blockInWorld) { ChunkLogic chunk = getChunkByBlock(blockInWorld); if (chunk == null) return null; - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk); - BlockLogic result = chunk.getBlock(blockInChunk); - Vectors.release(blockInChunk); - return result; + return chunk.getBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null)); } public List getTiles(Vec3i blockInWorld, BlockFace face) { @@ -114,15 +99,12 @@ public class WorldLogic { ChunkLogic chunk = getChunkByBlock(blockInWorld); if (chunk == null) return null; - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk); + Vec3i blockInChunk = Coordinates.convertInWorldToInChunk(blockInWorld, null); List result = createIfMissing ? chunk.getTiles(blockInChunk, face) : chunk.getTilesOrNull(blockInChunk, face); - - Vectors.release(blockInChunk); return result; } diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/AddOrRemoveTile.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/AddOrRemoveTile.java index fe0da62..60b1a7b 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/AddOrRemoveTile.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/AddOrRemoveTile.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.function.Consumer; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.WorldData; import ru.windcorp.progressia.common.world.block.BlockFace; @@ -38,18 +37,15 @@ class AddOrRemoveTile extends CachedWorldChange { @Override protected void affectCommon(WorldData world) { - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk); - - List tiles = world.getChunkByBlock(blockInWorld).getTiles(blockInChunk, face); + List tiles = world + .getChunkByBlock(blockInWorld) + .getTiles(Coordinates.convertInWorldToInChunk(blockInWorld, null), face); if (shouldAdd) { tiles.add(tile); } else { tiles.remove(tile); } - - Vectors.release(blockInChunk); } @Override diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/BlockTriggeredUpdate.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/BlockTriggeredUpdate.java index 2503e2a..d0234e4 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/BlockTriggeredUpdate.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/BlockTriggeredUpdate.java @@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.block.BlockFace; import ru.windcorp.progressia.server.Server; @@ -20,8 +19,7 @@ class BlockTriggeredUpdate extends CachedEvaluation { @Override public void evaluate(Server server) { - Vec3i cursor = Vectors.grab3i(); - cursor.set(blockInWorld.x, blockInWorld.y, blockInWorld.z); + Vec3i cursor = new Vec3i(blockInWorld.x, blockInWorld.y, blockInWorld.z); WorldLogic world = server.getWorld(); @@ -31,8 +29,6 @@ class BlockTriggeredUpdate extends CachedEvaluation { TickAndUpdateUtil.updateBlock(world, cursor); cursor.sub(face.getVector()); } - - Vectors.release(cursor); } public void init(Vec3i blockInWorld) { diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/SetBlock.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/SetBlock.java index b8a9992..f34694c 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/SetBlock.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/SetBlock.java @@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.WorldData; import ru.windcorp.progressia.common.world.block.BlockData; @@ -27,12 +26,9 @@ class SetBlock extends CachedWorldChange { @Override protected void affectCommon(WorldData world) { - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk); - - world.getChunkByBlock(blockInWorld).setBlock(blockInChunk, block, true); - - Vectors.release(blockInChunk); + world + .getChunkByBlock(blockInWorld) + .setBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null), block, true); } @Override diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/TileTriggeredUpdate.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/TileTriggeredUpdate.java index e87d9a1..bedd4c3 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/TileTriggeredUpdate.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/TileTriggeredUpdate.java @@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.block.BlockFace; import ru.windcorp.progressia.server.Server; @@ -21,8 +20,7 @@ class TileTriggeredUpdate extends CachedEvaluation { @Override public void evaluate(Server server) { - Vec3i cursor = Vectors.grab3i(); - cursor.set(blockInWorld.x, blockInWorld.y, blockInWorld.z); + Vec3i cursor = new Vec3i(blockInWorld.x, blockInWorld.y, blockInWorld.z); WorldLogic world = server.getWorld(); @@ -30,8 +28,6 @@ class TileTriggeredUpdate extends CachedEvaluation { TickAndUpdateUtil.tickBlock(world, cursor); // Tick block on one side cursor.add(face.getVector()); TickAndUpdateUtil.tickBlock(world, cursor); // Tick block on the other side - - Vectors.release(cursor); } public void init(Vec3i blockInWorld, BlockFace face) { diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/EdgeTileLogic.java b/src/main/java/ru/windcorp/progressia/server/world/tile/EdgeTileLogic.java index 84311ec..0c72f8a 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/EdgeTileLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/EdgeTileLogic.java @@ -20,15 +20,8 @@ public class EdgeTileLogic extends TileLogic implements UpdateableTile { @Override public boolean canOccupyFace(TileTickContext context) { boolean canOccupy = false; - - BlockTickContext currentTickContext = context.grabCurrentBlockContext(); - canOccupy ^= canOccupyFace(context, context.getCurrentFace(), currentTickContext); - context.release(currentTickContext); - - BlockTickContext counterTickContext = context.grabCounterBlockContext(); - canOccupy ^= canOccupyFace(context, context.getCounterFace(), counterTickContext); - context.release(counterTickContext); - + canOccupy ^= canOccupyFace(context, context.getCurrentFace(), context.getCurrentBlockContext()); + canOccupy ^= canOccupyFace(context, context.getCounterFace(), context.getCounterBlockContext()); return canOccupy; } diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/TileTickContext.java b/src/main/java/ru/windcorp/progressia/server/world/tile/TileTickContext.java index 30e8e60..5d368bb 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/TileTickContext.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/TileTickContext.java @@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world.tile; import java.util.List; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.ChunkData; import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.block.BlockData; @@ -62,35 +61,31 @@ public interface TileTickContext extends TickContext { } default List getTiles() { - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), blockInChunk); - List result = getCurrentChunk().getTiles(blockInChunk, getCurrentFace()); - Vectors.release(blockInChunk); - return result; + return getCurrentChunk().getTiles( + Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), null), + getCurrentFace() + ); } default List getTilesOrNull() { - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), blockInChunk); - List result = getCurrentChunk().getTilesOrNull(blockInChunk, getCurrentFace()); - Vectors.release(blockInChunk); - return result; + return getCurrentChunk().getTilesOrNull( + Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), null), + getCurrentFace() + ); } default List getTileDataList() { - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), blockInChunk); - List result = getCurrentChunkData().getTiles(blockInChunk, getCurrentFace()); - Vectors.release(blockInChunk); - return result; + return getCurrentChunkData().getTiles( + Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), null), + getCurrentFace() + ); } default List getTileDataListOrNull() { - Vec3i blockInChunk = Vectors.grab3i(); - Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), blockInChunk); - List result = getCurrentChunkData().getTilesOrNull(blockInChunk, getCurrentFace()); - Vectors.release(blockInChunk); - return result; + return getCurrentChunkData().getTilesOrNull( + Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), null), + getCurrentFace() + ); } /* @@ -113,8 +108,8 @@ public interface TileTickContext extends TickContext { return getWorldData().getBlock(getCurrentBlockInWorld()); } - default BlockTickContext grabCurrentBlockContext() { - return TickAndUpdateUtil.grabBlockTickContext(getServer(), getCurrentBlockInWorld()); + default BlockTickContext getCurrentBlockContext() { + return TickAndUpdateUtil.getBlockTickContext(getServer(), getCurrentBlockInWorld()); } /* @@ -137,8 +132,8 @@ public interface TileTickContext extends TickContext { return getWorldData().getBlock(getCounterBlockInWorld()); } - default BlockTickContext grabCounterBlockContext() { - return TickAndUpdateUtil.grabBlockTickContext(getServer(), getCounterBlockInWorld()); + default BlockTickContext getCounterBlockContext() { + return TickAndUpdateUtil.getBlockTickContext(getServer(), getCounterBlockInWorld()); } /* @@ -148,13 +143,5 @@ public interface TileTickContext extends TickContext { default void removeThisTile() { getAccessor().removeTile(getCurrentBlockInWorld(), getCurrentFace(), getTileData()); } - - /* - * Misc - */ - - default void release(BlockTickContext context) { - TickAndUpdateUtil.releaseTickContext(context); - } } diff --git a/src/main/java/ru/windcorp/progressia/test/CollisionModelRenderer.java b/src/main/java/ru/windcorp/progressia/test/CollisionModelRenderer.java index e2d226f..3a4c432 100644 --- a/src/main/java/ru/windcorp/progressia/test/CollisionModelRenderer.java +++ b/src/main/java/ru/windcorp/progressia/test/CollisionModelRenderer.java @@ -11,7 +11,6 @@ import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram; import ru.windcorp.progressia.common.collision.AABBoid; import ru.windcorp.progressia.common.collision.CollisionModel; import ru.windcorp.progressia.common.collision.CompoundCollisionModel; -import ru.windcorp.progressia.common.util.Vectors; public class CollisionModelRenderer { @@ -30,15 +29,13 @@ public class CollisionModelRenderer { private static void renderAABBoid(AABBoid aabb, ShapeRenderHelper helper) { Mat4 mat = helper.pushTransform(); - Vec3 tmp = Vectors.grab3(); + Vec3 tmp = new Vec3(); aabb.getOrigin(tmp); mat.translate(tmp); aabb.getSize(tmp); mat.scale(tmp); - Vectors.release(tmp); - CUBE.render(helper); helper.popTransform(); } diff --git a/src/main/java/ru/windcorp/progressia/test/TestContent.java b/src/main/java/ru/windcorp/progressia/test/TestContent.java index ca13b4e..357d8ab 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestContent.java +++ b/src/main/java/ru/windcorp/progressia/test/TestContent.java @@ -22,7 +22,6 @@ import ru.windcorp.progressia.common.collision.AABB; import ru.windcorp.progressia.common.collision.CollisionModel; import ru.windcorp.progressia.common.comms.controls.*; import ru.windcorp.progressia.common.state.StatefulObjectRegistry.Factory; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.ChunkData; import ru.windcorp.progressia.common.world.block.*; import ru.windcorp.progressia.common.world.entity.*; @@ -226,13 +225,9 @@ public class TestContent { } private static void onBlockPlaceTrigger(ControlData control) { - Vec3i blockInWorld = Vectors.grab3i(); - Vec3i selectedBlock = getSelection().getBlock(); - - blockInWorld.set(selectedBlock.x, selectedBlock.y, selectedBlock.z).add(getSelection().getSurface().getVector()); - - ((ControlPlaceBlockData) control).setBlockInWorld(blockInWorld); - Vectors.release(blockInWorld); + ((ControlPlaceBlockData) control).setBlockInWorld( + getSelection().getBlock().add_(getSelection().getSurface().getVector()) + ); } private static void onBlockPlaceReceived(Server server, PacketControl packet, ru.windcorp.progressia.server.comms.Client client) { diff --git a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java index 6282145..afd2e37 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java +++ b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java @@ -16,8 +16,6 @@ import ru.windcorp.progressia.client.graphics.input.bus.Input; import ru.windcorp.progressia.client.graphics.world.LocalPlayer; import ru.windcorp.progressia.common.Units; import ru.windcorp.progressia.common.util.FloatMathUtils; -import ru.windcorp.progressia.common.util.Matrices; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.entity.EntityData; public class TestPlayerControls { @@ -67,13 +65,9 @@ public class TestPlayerControls { } EntityData player = getEntity(); - Mat3 angMat = Matrices.grab3(); - angMat.identity().rotateZ(player.getYaw()); - - Vec3 movement = Vectors.grab3(); - - movement.set(movementForward, -movementRight, 0); + Mat3 angMat = new Mat3().identity().rotateZ(player.getYaw()); + Vec3 movement = new Vec3(movementForward, -movementRight, 0); if (movementForward != 0 && movementRight != 0) { movement.normalize(); @@ -94,9 +88,6 @@ public class TestPlayerControls { } player.getVelocity().add(movement); - - Matrices.release(angMat); - Vectors.release(movement); } public void handleInput(Input input) { diff --git a/src/main/java/ru/windcorp/progressia/test/TestTileLogicGrass.java b/src/main/java/ru/windcorp/progressia/test/TestTileLogicGrass.java index 1f030e2..4358d2c 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestTileLogicGrass.java +++ b/src/main/java/ru/windcorp/progressia/test/TestTileLogicGrass.java @@ -1,7 +1,6 @@ package ru.windcorp.progressia.test; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.world.block.BlockFace; import ru.windcorp.progressia.server.Server; import ru.windcorp.progressia.server.world.TickAndUpdateUtil; @@ -17,21 +16,12 @@ public class TestTileLogicGrass extends EdgeTileLogic { } private boolean isBlockAboveTransparent(Server server, Vec3i blockInWorld) { - Vec3i blockAboveCoords = Vectors.grab3i(); - blockAboveCoords.set(blockInWorld.x, blockInWorld.y, blockInWorld.z); - blockAboveCoords.add(BlockFace.TOP.getVector()); + BlockTickContext blockAboveContext = TickAndUpdateUtil.getBlockTickContext(server, blockInWorld.add_(BlockFace.TOP.getVector())); - BlockTickContext blockAboveContext = TickAndUpdateUtil.grabBlockTickContext(server, blockAboveCoords); + BlockLogic blockAbove = blockAboveContext.getBlock(); + if (blockAbove == null) return true; - try { - BlockLogic blockAbove = blockAboveContext.getBlock(); - if (blockAbove == null) return true; - - return blockAbove.isTransparent(blockAboveContext); - } finally { - TickAndUpdateUtil.releaseTickContext(blockAboveContext); - Vectors.release(blockAboveCoords); - } + return blockAbove.isTransparent(blockAboveContext); } @Override