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.
This commit is contained in:
parent
44de6a86f7
commit
2d322e83bc
@ -23,7 +23,6 @@ import glm.vec._2.Vec2;
|
|||||||
import glm.vec._3.Vec3;
|
import glm.vec._3.Vec3;
|
||||||
import ru.windcorp.progressia.client.graphics.model.ShapeRenderProgram.VertexBuilder;
|
import ru.windcorp.progressia.client.graphics.model.ShapeRenderProgram.VertexBuilder;
|
||||||
import ru.windcorp.progressia.client.graphics.texture.Texture;
|
import ru.windcorp.progressia.client.graphics.texture.Texture;
|
||||||
import ru.windcorp.progressia.common.util.Vectors;
|
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
|
|
||||||
public class Faces {
|
public class Faces {
|
||||||
@ -41,27 +40,22 @@ public class Faces {
|
|||||||
) {
|
) {
|
||||||
VertexBuilder builder = program.getVertexBuilder();
|
VertexBuilder builder = program.getVertexBuilder();
|
||||||
|
|
||||||
Vec3 pos = Vectors.grab3();
|
|
||||||
Vec2 texCoords = Vectors.grab2();
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
builder.addVertex(
|
builder.addVertex(
|
||||||
origin,
|
origin,
|
||||||
colorMultiplier,
|
colorMultiplier,
|
||||||
texCoords.set(0, 0)
|
new Vec2(0, 0)
|
||||||
).addVertex(
|
).addVertex(
|
||||||
pos.set(origin).add(height),
|
origin.add_(height),
|
||||||
colorMultiplier,
|
colorMultiplier,
|
||||||
texCoords.set(0, 1)
|
new Vec2(0, 1)
|
||||||
).addVertex(
|
).addVertex(
|
||||||
pos.set(origin).add(width),
|
origin.add_(width),
|
||||||
colorMultiplier,
|
colorMultiplier,
|
||||||
texCoords.set(1, 0)
|
new Vec2(1, 0)
|
||||||
).addVertex(
|
).addVertex(
|
||||||
pos.add(height),
|
origin.add_(width).add(height),
|
||||||
colorMultiplier,
|
colorMultiplier,
|
||||||
texCoords.set(1, 1)
|
new Vec2(1, 1)
|
||||||
);
|
);
|
||||||
|
|
||||||
ShortBuffer buffer = flip ? ShortBuffer.wrap(new short[] {
|
ShortBuffer buffer = flip ? ShortBuffer.wrap(new short[] {
|
||||||
@ -77,11 +71,6 @@ public class Faces {
|
|||||||
builder.assemble(),
|
builder.assemble(),
|
||||||
buffer
|
buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
} finally {
|
|
||||||
Vectors.release(pos);
|
|
||||||
Vectors.release(texCoords);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Face createBlockFace(
|
public static Face createBlockFace(
|
||||||
@ -94,10 +83,7 @@ public class Faces {
|
|||||||
) {
|
) {
|
||||||
BlockFaceVectors vectors = BlockFaceVectors.get(inner);
|
BlockFaceVectors vectors = BlockFaceVectors.get(inner);
|
||||||
|
|
||||||
Vec3 origin =
|
Vec3 origin = blockCenter.add_(vectors.getOrigin(face));
|
||||||
Vectors.grab3().set(blockCenter).add(vectors.getOrigin(face));
|
|
||||||
try {
|
|
||||||
|
|
||||||
Vec3 width = vectors.getWidth(face);
|
Vec3 width = vectors.getWidth(face);
|
||||||
Vec3 height = vectors.getHeight(face);
|
Vec3 height = vectors.getHeight(face);
|
||||||
|
|
||||||
@ -106,10 +92,6 @@ public class Faces {
|
|||||||
origin, width, height,
|
origin, width, height,
|
||||||
inner
|
inner
|
||||||
);
|
);
|
||||||
|
|
||||||
} finally {
|
|
||||||
Vectors.release(origin);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ import java.util.Map;
|
|||||||
import glm.vec._3.Vec3;
|
import glm.vec._3.Vec3;
|
||||||
import ru.windcorp.progressia.client.graphics.backend.Usage;
|
import ru.windcorp.progressia.client.graphics.backend.Usage;
|
||||||
import ru.windcorp.progressia.client.graphics.texture.Texture;
|
import ru.windcorp.progressia.client.graphics.texture.Texture;
|
||||||
import ru.windcorp.progressia.common.util.Vectors;
|
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
|
|
||||||
public class Shapes {
|
public class Shapes {
|
||||||
@ -48,14 +47,11 @@ public class Shapes {
|
|||||||
boolean flip
|
boolean flip
|
||||||
) {
|
) {
|
||||||
|
|
||||||
Vec3 faceOrigin = Vectors.grab3();
|
|
||||||
Vec3 faceWidth = Vectors.grab3();
|
|
||||||
|
|
||||||
Face top = Faces.createRectangle(
|
Face top = Faces.createRectangle(
|
||||||
program,
|
program,
|
||||||
topTexture, colorMultiplier,
|
topTexture, colorMultiplier,
|
||||||
faceOrigin.set(origin).add(height).add(width),
|
origin.add_(height).add(width),
|
||||||
faceWidth.set(width).negate(),
|
width.negate_(),
|
||||||
depth,
|
depth,
|
||||||
flip
|
flip
|
||||||
);
|
);
|
||||||
@ -72,7 +68,7 @@ public class Shapes {
|
|||||||
Face north = Faces.createRectangle(
|
Face north = Faces.createRectangle(
|
||||||
program,
|
program,
|
||||||
northTexture, colorMultiplier,
|
northTexture, colorMultiplier,
|
||||||
faceOrigin.set(origin).add(depth),
|
origin.add_(depth),
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
flip
|
flip
|
||||||
@ -81,8 +77,8 @@ public class Shapes {
|
|||||||
Face south = Faces.createRectangle(
|
Face south = Faces.createRectangle(
|
||||||
program,
|
program,
|
||||||
southTexture, colorMultiplier,
|
southTexture, colorMultiplier,
|
||||||
faceOrigin.set(origin).add(width),
|
origin.add_(width),
|
||||||
faceWidth.set(width).negate(),
|
width.negate_(),
|
||||||
height,
|
height,
|
||||||
flip
|
flip
|
||||||
);
|
);
|
||||||
@ -99,8 +95,8 @@ public class Shapes {
|
|||||||
Face west = Faces.createRectangle(
|
Face west = Faces.createRectangle(
|
||||||
program,
|
program,
|
||||||
westTexture, colorMultiplier,
|
westTexture, colorMultiplier,
|
||||||
faceOrigin.set(origin).add(width).add(depth),
|
origin.add_(width).add(depth),
|
||||||
faceWidth.set(depth).negate(),
|
depth.negate_(),
|
||||||
height,
|
height,
|
||||||
flip
|
flip
|
||||||
);
|
);
|
||||||
@ -111,9 +107,6 @@ public class Shapes {
|
|||||||
top, bottom, north, south, east, west
|
top, bottom, north, south, east, west
|
||||||
);
|
);
|
||||||
|
|
||||||
Vectors.release(faceOrigin);
|
|
||||||
Vectors.release(faceWidth);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@ import glm.mat._4.Mat4;
|
|||||||
import glm.vec._3.Vec3;
|
import glm.vec._3.Vec3;
|
||||||
import ru.windcorp.progressia.client.graphics.backend.GraphicsInterface;
|
import ru.windcorp.progressia.client.graphics.backend.GraphicsInterface;
|
||||||
import ru.windcorp.progressia.client.graphics.world.Camera.Anchor.Mode;
|
import ru.windcorp.progressia.client.graphics.world.Camera.Anchor.Mode;
|
||||||
import ru.windcorp.progressia.common.util.Vectors;
|
|
||||||
|
|
||||||
public class Camera {
|
public class Camera {
|
||||||
|
|
||||||
@ -133,14 +132,12 @@ public class Camera {
|
|||||||
|
|
||||||
Mat4 matrix = helper.pushViewTransform();
|
Mat4 matrix = helper.pushViewTransform();
|
||||||
|
|
||||||
Vec3 offset = Vectors.grab3();
|
Vec3 offset = new Vec3();
|
||||||
mode.getCameraOffset(offset);
|
mode.getCameraOffset(offset);
|
||||||
|
|
||||||
offset.negate();
|
offset.negate();
|
||||||
matrix.translate(offset);
|
matrix.translate(offset);
|
||||||
|
|
||||||
Vectors.release(offset);
|
|
||||||
|
|
||||||
mode.applyCameraRotation(matrix);
|
mode.applyCameraRotation(matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,15 +165,12 @@ public class Camera {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void applyPosition(WorldRenderHelper helper) {
|
private void applyPosition(WorldRenderHelper helper) {
|
||||||
Vec3 v = Vectors.grab3();
|
Vec3 v = new Vec3();
|
||||||
|
|
||||||
anchor.getCameraPosition(v);
|
anchor.getCameraPosition(v);
|
||||||
this.lastAnchorPosition.set(v);
|
this.lastAnchorPosition.set(v);
|
||||||
|
|
||||||
v.negate();
|
v.negate();
|
||||||
helper.pushViewTransform().translate(v);
|
helper.pushViewTransform().translate(v);
|
||||||
|
|
||||||
Vectors.release(v);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cacheCameraTransform(WorldRenderHelper helper) {
|
private void cacheCameraTransform(WorldRenderHelper helper) {
|
||||||
|
@ -4,7 +4,6 @@ import glm.vec._2.Vec2;
|
|||||||
import glm.vec._3.Vec3;
|
import glm.vec._3.Vec3;
|
||||||
import glm.vec._3.i.Vec3i;
|
import glm.vec._3.i.Vec3i;
|
||||||
import ru.windcorp.progressia.client.world.WorldRender;
|
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.BlockRay;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
import ru.windcorp.progressia.common.world.entity.EntityData;
|
import ru.windcorp.progressia.common.world.entity.EntityData;
|
||||||
@ -21,8 +20,8 @@ public class Selection {
|
|||||||
private BlockRay ray = new BlockRay();
|
private BlockRay ray = new BlockRay();
|
||||||
|
|
||||||
public void update(WorldRender world, EntityData player) {
|
public void update(WorldRender world, EntityData player) {
|
||||||
Vec3 direction = Vectors.grab3();
|
Vec3 direction = new Vec3();
|
||||||
Vec3 start = Vectors.grab3();
|
Vec3 start = new Vec3();
|
||||||
|
|
||||||
player.getLookingAtVector(direction);
|
player.getLookingAtVector(direction);
|
||||||
world.getEntityRenderable(player).getViewPoint(start);
|
world.getEntityRenderable(player).getViewPoint(start);
|
||||||
@ -44,9 +43,6 @@ public class Selection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ray.end();
|
ray.end();
|
||||||
|
|
||||||
Vectors.release(direction);
|
|
||||||
Vectors.release(start);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vec3i getBlock() {
|
public Vec3i getBlock() {
|
||||||
|
@ -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.cro.ChunkRenderOptimizers;
|
||||||
import ru.windcorp.progressia.client.world.tile.TileRender;
|
import ru.windcorp.progressia.client.world.tile.TileRender;
|
||||||
import ru.windcorp.progressia.client.world.tile.TileRenderRegistry;
|
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.ChunkData;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
import ru.windcorp.progressia.common.world.tile.TileData;
|
import ru.windcorp.progressia.common.world.tile.TileData;
|
||||||
@ -216,16 +215,13 @@ public class ChunkRender {
|
|||||||
) {
|
) {
|
||||||
// TODO implement
|
// 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));
|
optimizers.forEach(cro -> cro.processTile(tile, cursor, face));
|
||||||
|
|
||||||
if (!tile.needsOwnRenderable()) {
|
if (!tile.needsOwnRenderable()) return;
|
||||||
Vectors.release(pos);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vec3 offset = Vectors.grab3().set(
|
Vec3 offset = new Vec3(
|
||||||
face.getVector().x, face.getVector().y, face.getVector().z
|
face.getVector().x, face.getVector().y, face.getVector().z
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -235,9 +231,6 @@ public class ChunkRender {
|
|||||||
tile.createRenderable(face),
|
tile.createRenderable(face),
|
||||||
new Mat4().identity().translate(pos)
|
new Mat4().identity().translate(pos)
|
||||||
);
|
);
|
||||||
|
|
||||||
Vectors.release(pos);
|
|
||||||
Vectors.release(offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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.ChunkRender;
|
||||||
import ru.windcorp.progressia.client.world.block.BlockRender;
|
import ru.windcorp.progressia.client.world.block.BlockRender;
|
||||||
import ru.windcorp.progressia.client.world.tile.TileRender;
|
import ru.windcorp.progressia.client.world.tile.TileRender;
|
||||||
import ru.windcorp.progressia.common.util.Vectors;
|
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
|
|
||||||
public class ChunkRenderOptimizerCube extends ChunkRenderOptimizer {
|
public class ChunkRenderOptimizerCube extends ChunkRenderOptimizer {
|
||||||
@ -173,16 +172,11 @@ public class ChunkRenderOptimizerCube extends ChunkRenderOptimizer {
|
|||||||
Vec3i cursor,
|
Vec3i cursor,
|
||||||
Consumer<Face> output
|
Consumer<Face> output
|
||||||
) {
|
) {
|
||||||
Vec3 faceOrigin = Vectors.grab3();
|
|
||||||
Vec3 offset = Vectors.grab3();
|
|
||||||
|
|
||||||
for (BlockFace face : BlockFace.getFaces()) {
|
for (BlockFace face : BlockFace.getFaces()) {
|
||||||
if (!shouldRenderOuterFace(cursor, face)) continue;
|
if (!shouldRenderOuterFace(cursor, face)) continue;
|
||||||
|
|
||||||
faceOrigin.set(cursor.x, cursor.y, cursor.z);
|
Vec3 faceOrigin = new Vec3(cursor.x, cursor.y, cursor.z);
|
||||||
offset
|
Vec3 offset = new Vec3(face.getVector().x, face.getVector().y, face.getVector().z).mul(1f / 128);
|
||||||
.set(face.getVector().x, face.getVector().y, face.getVector().z)
|
|
||||||
.mul(1f / 128);
|
|
||||||
|
|
||||||
FaceInfo info = getFace(cursor, face);
|
FaceInfo info = getFace(cursor, face);
|
||||||
|
|
||||||
@ -215,9 +209,6 @@ public class ChunkRenderOptimizerCube extends ChunkRenderOptimizer {
|
|||||||
faceOrigin.add(offset);
|
faceOrigin.add(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vectors.release(offset);
|
|
||||||
Vectors.release(faceOrigin);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addFace(
|
private void addFace(
|
||||||
|
@ -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.Renderable;
|
||||||
import ru.windcorp.progressia.client.graphics.model.ShapeRenderHelper;
|
import ru.windcorp.progressia.client.graphics.model.ShapeRenderHelper;
|
||||||
import ru.windcorp.progressia.common.Units;
|
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;
|
import ru.windcorp.progressia.common.world.entity.EntityData;
|
||||||
|
|
||||||
public abstract class NPedModel extends EntityRenderable {
|
public abstract class NPedModel extends EntityRenderable {
|
||||||
@ -162,8 +160,7 @@ public abstract class NPedModel extends EntityRenderable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void accountForVelocity() {
|
private void accountForVelocity() {
|
||||||
Vec3 horizontal = Vectors.grab3();
|
Vec3 horizontal = new Vec3(getData().getVelocity());
|
||||||
horizontal.set(getData().getVelocity());
|
|
||||||
horizontal.z = 0;
|
horizontal.z = 0;
|
||||||
|
|
||||||
velocity = horizontal.length();
|
velocity = horizontal.length();
|
||||||
@ -176,7 +173,6 @@ public abstract class NPedModel extends EntityRenderable {
|
|||||||
bodyYaw += velocityParameter * normalizeAngle(
|
bodyYaw += velocityParameter * normalizeAngle(
|
||||||
(float) (atan2(horizontal.y, horizontal.x) - bodyYaw)
|
(float) (atan2(horizontal.y, horizontal.x) - bodyYaw)
|
||||||
) * min(1, GraphicsInterface.getFrameLength() * 10);
|
) * min(1, GraphicsInterface.getFrameLength() * 10);
|
||||||
Vectors.release(horizontal);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void evaluateVelocityCoeff() {
|
private void evaluateVelocityCoeff() {
|
||||||
@ -189,8 +185,8 @@ public abstract class NPedModel extends EntityRenderable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void getViewPoint(Vec3 output) {
|
public void getViewPoint(Vec3 output) {
|
||||||
Mat4 m = Matrices.grab4();
|
Mat4 m = new Mat4();
|
||||||
Vec4 v = Vectors.grab4();
|
Vec4 v = new Vec4();
|
||||||
|
|
||||||
m.identity()
|
m.identity()
|
||||||
.scale(scale)
|
.scale(scale)
|
||||||
@ -203,9 +199,6 @@ public abstract class NPedModel extends EntityRenderable {
|
|||||||
m.mul(v);
|
m.mul(v);
|
||||||
|
|
||||||
output.set(v.x, v.y, v.z);
|
output.set(v.x, v.y, v.z);
|
||||||
|
|
||||||
Vectors.release(v);
|
|
||||||
Matrices.release(m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Body getBody() {
|
public Body getBody() {
|
||||||
|
@ -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.texture.Texture;
|
||||||
import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram;
|
import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram;
|
||||||
import ru.windcorp.progressia.client.world.cro.ChunkRenderOptimizerCube.OpaqueTile;
|
import ru.windcorp.progressia.client.world.cro.ChunkRenderOptimizerCube.OpaqueTile;
|
||||||
import ru.windcorp.progressia.common.util.Vectors;
|
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
|
|
||||||
public class TileRenderGrass extends TileRender implements OpaqueTile {
|
public class TileRenderGrass extends TileRender implements OpaqueTile {
|
||||||
@ -40,21 +39,13 @@ public class TileRenderGrass extends TileRender implements OpaqueTile {
|
|||||||
public Renderable createRenderable(BlockFace face) {
|
public Renderable createRenderable(BlockFace face) {
|
||||||
ShapeRenderProgram program = WorldRenderProgram.getDefault();
|
ShapeRenderProgram program = WorldRenderProgram.getDefault();
|
||||||
|
|
||||||
Vec3 color = Vectors.grab3().set(1, 1, 1);
|
|
||||||
Vec3 center = Vectors.grab3().set(0, 0, 0);
|
|
||||||
|
|
||||||
try {
|
|
||||||
return new Shape(
|
return new Shape(
|
||||||
Usage.STATIC, WorldRenderProgram.getDefault(),
|
Usage.STATIC, WorldRenderProgram.getDefault(),
|
||||||
Faces.createBlockFace(
|
Faces.createBlockFace(
|
||||||
program, getTexture(face), color,
|
program, getTexture(face), new Vec3(1, 1, 1),
|
||||||
center, face, false
|
new Vec3(0, 0, 0), face, false
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} finally {
|
|
||||||
Vectors.release(color);
|
|
||||||
Vectors.release(center);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -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.texture.Texture;
|
||||||
import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram;
|
import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram;
|
||||||
import ru.windcorp.progressia.client.world.cro.ChunkRenderOptimizerCube.OpaqueTile;
|
import ru.windcorp.progressia.client.world.cro.ChunkRenderOptimizerCube.OpaqueTile;
|
||||||
import ru.windcorp.progressia.common.util.Vectors;
|
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
|
|
||||||
public class TileRenderSimple extends TileRender implements OpaqueTile {
|
public class TileRenderSimple extends TileRender implements OpaqueTile {
|
||||||
@ -35,21 +34,13 @@ public class TileRenderSimple extends TileRender implements OpaqueTile {
|
|||||||
public Renderable createRenderable(BlockFace face) {
|
public Renderable createRenderable(BlockFace face) {
|
||||||
ShapeRenderProgram program = WorldRenderProgram.getDefault();
|
ShapeRenderProgram program = WorldRenderProgram.getDefault();
|
||||||
|
|
||||||
Vec3 color = Vectors.grab3().set(1, 1, 1);
|
|
||||||
Vec3 center = Vectors.grab3().set(0, 0, 0);
|
|
||||||
|
|
||||||
try {
|
|
||||||
return new Shape(
|
return new Shape(
|
||||||
Usage.STATIC, WorldRenderProgram.getDefault(),
|
Usage.STATIC, WorldRenderProgram.getDefault(),
|
||||||
Faces.createBlockFace(
|
Faces.createBlockFace(
|
||||||
program, getTexture(face), color,
|
program, getTexture(face), new Vec3(1, 1, 1),
|
||||||
center, face, false
|
new Vec3(0, 0, 0), face, false
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} finally {
|
|
||||||
Vectors.release(color);
|
|
||||||
Vectors.release(center);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -5,8 +5,7 @@ import glm.mat._4.Mat4;
|
|||||||
import glm.mat._4.d.Mat4d;
|
import glm.mat._4.d.Mat4d;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A set of caches for GLM matrix objects. Use this instead of allocating new
|
* A set of caches for GLM matrix objects.
|
||||||
* matrices when the objects are effectively local.
|
|
||||||
* <p>
|
* <p>
|
||||||
* All {@code grab}bed objects must be {@code release}d as soon as possible.
|
* All {@code grab}bed objects must be {@code release}d as soon as possible.
|
||||||
* Ideally, user code should be:
|
* Ideally, user code should be:
|
||||||
|
@ -8,8 +8,7 @@ import glm.vec._4.Vec4;
|
|||||||
import glm.vec._4.i.Vec4i;
|
import glm.vec._4.i.Vec4i;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A set of caches for GLM vector objects. Use this instead of allocating new
|
* A set of caches for GLM vector objects.
|
||||||
* vectors when the objects are effectively local.
|
|
||||||
* <p>
|
* <p>
|
||||||
* All {@code grab}bed objects must be {@code release}d as soon as possible.
|
* All {@code grab}bed objects must be {@code release}d as soon as possible.
|
||||||
* Ideally, user code should be:
|
* Ideally, user code should be:
|
||||||
|
@ -34,7 +34,6 @@ import glm.vec._3.i.Vec3i;
|
|||||||
import ru.windcorp.progressia.client.world.tile.TileLocation;
|
import ru.windcorp.progressia.client.world.tile.TileLocation;
|
||||||
import ru.windcorp.progressia.common.util.SizeLimitedList;
|
import ru.windcorp.progressia.common.util.SizeLimitedList;
|
||||||
import ru.windcorp.progressia.common.util.VectorUtil;
|
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.BlockData;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockDataRegistry;
|
import ru.windcorp.progressia.common.world.block.BlockDataRegistry;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
@ -219,9 +218,7 @@ public class ChunkData {
|
|||||||
|
|
||||||
List<TileData> secondaryList = Lists.reverse(primaryList);
|
List<TileData> secondaryList = Lists.reverse(primaryList);
|
||||||
|
|
||||||
|
Vec3i cursor = new Vec3i(blockInChunk.x, blockInChunk.y, blockInChunk.z);
|
||||||
Vec3i cursor = Vectors.grab3i()
|
|
||||||
.set(blockInChunk.x, blockInChunk.y, blockInChunk.z);
|
|
||||||
|
|
||||||
face = face.getPrimaryAndMoveCursor(cursor);
|
face = face.getPrimaryAndMoveCursor(cursor);
|
||||||
setTiles(cursor, face, primaryList);
|
setTiles(cursor, face, primaryList);
|
||||||
|
@ -60,6 +60,8 @@ public class Coordinates {
|
|||||||
Vec3i blockInWorld,
|
Vec3i blockInWorld,
|
||||||
Vec3i output
|
Vec3i output
|
||||||
) {
|
) {
|
||||||
|
if (output == null) output = new Vec3i();
|
||||||
|
|
||||||
output.x = convertInWorldToChunk(blockInWorld.x);
|
output.x = convertInWorldToChunk(blockInWorld.x);
|
||||||
output.y = convertInWorldToChunk(blockInWorld.y);
|
output.y = convertInWorldToChunk(blockInWorld.y);
|
||||||
output.z = convertInWorldToChunk(blockInWorld.z);
|
output.z = convertInWorldToChunk(blockInWorld.z);
|
||||||
@ -94,6 +96,8 @@ public class Coordinates {
|
|||||||
Vec3i blockInWorld,
|
Vec3i blockInWorld,
|
||||||
Vec3i output
|
Vec3i output
|
||||||
) {
|
) {
|
||||||
|
if (output == null) output = new Vec3i();
|
||||||
|
|
||||||
output.x = convertInWorldToInChunk(blockInWorld.x);
|
output.x = convertInWorldToInChunk(blockInWorld.x);
|
||||||
output.y = convertInWorldToInChunk(blockInWorld.y);
|
output.y = convertInWorldToInChunk(blockInWorld.y);
|
||||||
output.z = convertInWorldToInChunk(blockInWorld.z);
|
output.z = convertInWorldToInChunk(blockInWorld.z);
|
||||||
@ -130,6 +134,8 @@ public class Coordinates {
|
|||||||
Vec3i chunk, Vec3i blockInChunk,
|
Vec3i chunk, Vec3i blockInChunk,
|
||||||
Vec3i output
|
Vec3i output
|
||||||
) {
|
) {
|
||||||
|
if (output == null) output = new Vec3i();
|
||||||
|
|
||||||
output.x = getInWorld(chunk.x, blockInChunk.x);
|
output.x = getInWorld(chunk.x, blockInChunk.x);
|
||||||
output.y = getInWorld(chunk.y, blockInChunk.y);
|
output.y = getInWorld(chunk.y, blockInChunk.y);
|
||||||
output.z = getInWorld(chunk.z, blockInChunk.z);
|
output.z = getInWorld(chunk.z, blockInChunk.z);
|
||||||
|
@ -27,7 +27,6 @@ import gnu.trove.map.TLongObjectMap;
|
|||||||
import gnu.trove.map.hash.TLongObjectHashMap;
|
import gnu.trove.map.hash.TLongObjectHashMap;
|
||||||
import ru.windcorp.progressia.common.collision.CollisionModel;
|
import ru.windcorp.progressia.common.collision.CollisionModel;
|
||||||
import ru.windcorp.progressia.common.util.CoordinatePacker;
|
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.block.BlockData;
|
||||||
import ru.windcorp.progressia.common.world.entity.EntityData;
|
import ru.windcorp.progressia.common.world.entity.EntityData;
|
||||||
|
|
||||||
@ -102,22 +101,14 @@ public class WorldData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ChunkData getChunkByBlock(Vec3i blockInWorld) {
|
public ChunkData getChunkByBlock(Vec3i blockInWorld) {
|
||||||
Vec3i chunkPos = Vectors.grab3i();
|
return getChunk(Coordinates.convertInWorldToChunk(blockInWorld, null));
|
||||||
Coordinates.convertInWorldToChunk(blockInWorld, chunkPos);
|
|
||||||
ChunkData result = getChunk(chunkPos);
|
|
||||||
Vectors.release(chunkPos);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockData getBlock(Vec3i blockInWorld) {
|
public BlockData getBlock(Vec3i blockInWorld) {
|
||||||
ChunkData chunk = getChunkByBlock(blockInWorld);
|
ChunkData chunk = getChunkByBlock(blockInWorld);
|
||||||
if (chunk == null) return null;
|
if (chunk == null) return null;
|
||||||
|
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
return chunk.getBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null));
|
||||||
Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk);
|
|
||||||
BlockData result = chunk.getBlock(blockInChunk);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBlock(Vec3i blockInWorld, BlockData block, boolean notify) {
|
public void setBlock(Vec3i blockInWorld, BlockData block, boolean notify) {
|
||||||
@ -129,9 +120,7 @@ public class WorldData {
|
|||||||
+ "do not belong to a loaded chunk"
|
+ "do not belong to a loaded chunk"
|
||||||
);
|
);
|
||||||
|
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
chunk.setBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null), block, notify);
|
||||||
Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk);
|
|
||||||
chunk.setBlock(blockInChunk, block, notify);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<ChunkData> getChunks() {
|
public Collection<ChunkData> getChunks() {
|
||||||
@ -158,11 +147,7 @@ public class WorldData {
|
|||||||
ChunkData chunk = getChunkByBlock(blockInWorld);
|
ChunkData chunk = getChunkByBlock(blockInWorld);
|
||||||
if (chunk == null) return null;
|
if (chunk == null) return null;
|
||||||
|
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
BlockData block = chunk.getBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null));
|
||||||
Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk);
|
|
||||||
BlockData block = chunk.getBlock(blockInChunk);
|
|
||||||
Vectors.release(blockInChunk);
|
|
||||||
|
|
||||||
if (block == null) return null;
|
if (block == null) return null;
|
||||||
return block.getCollisionModel();
|
return block.getCollisionModel();
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import glm.vec._3.Vec3;
|
|||||||
import ru.windcorp.progressia.common.collision.Collideable;
|
import ru.windcorp.progressia.common.collision.Collideable;
|
||||||
import ru.windcorp.progressia.common.collision.CollisionModel;
|
import ru.windcorp.progressia.common.collision.CollisionModel;
|
||||||
import ru.windcorp.progressia.common.state.StatefulObject;
|
import ru.windcorp.progressia.common.state.StatefulObject;
|
||||||
import ru.windcorp.progressia.common.util.Vectors;
|
|
||||||
|
|
||||||
public class EntityData extends StatefulObject implements Collideable {
|
public class EntityData extends StatefulObject implements Collideable {
|
||||||
|
|
||||||
@ -29,10 +28,7 @@ public class EntityData extends StatefulObject implements Collideable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setPosition(Vec3 position) {
|
public void setPosition(Vec3 position) {
|
||||||
Vec3 displacement = Vectors.grab3();
|
move(position.sub_(getPosition()));
|
||||||
displacement.set(position).sub(getPosition());
|
|
||||||
move(displacement);
|
|
||||||
Vectors.release(displacement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void move(Vec3 displacement) {
|
public void move(Vec3 displacement) {
|
||||||
|
@ -12,7 +12,6 @@ import com.google.common.collect.Lists;
|
|||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
import glm.vec._3.i.Vec3i;
|
||||||
import ru.windcorp.progressia.client.world.tile.TileLocation;
|
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.ChunkData;
|
||||||
import ru.windcorp.progressia.common.world.Coordinates;
|
import ru.windcorp.progressia.common.world.Coordinates;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
@ -53,12 +52,10 @@ public class ChunkLogic {
|
|||||||
BlockLogic block = getBlock(blockInChunk);
|
BlockLogic block = getBlock(blockInChunk);
|
||||||
|
|
||||||
if (block instanceof TickableBlock) {
|
if (block instanceof TickableBlock) {
|
||||||
Vec3i blockInWorld = Vectors.grab3i();
|
blockTickContext.init(
|
||||||
Coordinates.getInWorld(getData().getPosition(), blockInChunk, blockInWorld);
|
getWorld().getServer(),
|
||||||
|
Coordinates.getInWorld(getData().getPosition(), blockInChunk, null)
|
||||||
blockTickContext.init(getWorld().getServer(), blockInWorld);
|
);
|
||||||
|
|
||||||
Vectors.release(blockInWorld);
|
|
||||||
|
|
||||||
if (((TickableBlock) block).doesTickRegularly(blockTickContext)) {
|
if (((TickableBlock) block).doesTickRegularly(blockTickContext)) {
|
||||||
tickingBlocks.add(new Vec3i(blockInChunk));
|
tickingBlocks.add(new Vec3i(blockInChunk));
|
||||||
@ -70,12 +67,12 @@ public class ChunkLogic {
|
|||||||
TileLogic tile = TileLogicRegistry.getInstance().get(tileData.getId());
|
TileLogic tile = TileLogicRegistry.getInstance().get(tileData.getId());
|
||||||
|
|
||||||
if (tile instanceof TickableTile) {
|
if (tile instanceof TickableTile) {
|
||||||
Vec3i blockInWorld = Vectors.grab3i();
|
tileTickContext.init(
|
||||||
Coordinates.getInWorld(getData().getPosition(), loc.pos, blockInWorld);
|
getWorld().getServer(),
|
||||||
|
Coordinates.getInWorld(getData().getPosition(), loc.pos, null),
|
||||||
tileTickContext.init(getWorld().getServer(), blockInWorld, loc.face, loc.layer);
|
loc.face,
|
||||||
|
loc.layer
|
||||||
Vectors.release(blockInWorld);
|
);
|
||||||
|
|
||||||
if (((TickableTile) tile).doesTickRegularly(tileTickContext)) {
|
if (((TickableTile) tile).doesTickRegularly(tileTickContext)) {
|
||||||
tickingTiles.add(new TileLocation(loc));
|
tickingTiles.add(new TileLocation(loc));
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package ru.windcorp.progressia.server.world;
|
package ru.windcorp.progressia.server.world;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.Server;
|
||||||
import ru.windcorp.progressia.server.world.block.BlockTickContext;
|
import ru.windcorp.progressia.server.world.block.BlockTickContext;
|
||||||
|
|
||||||
@ -20,11 +18,7 @@ implements BlockTickContext {
|
|||||||
|
|
||||||
public void setCoordsInWorld(Vec3i blockInWorld) {
|
public void setCoordsInWorld(Vec3i blockInWorld) {
|
||||||
getBlockInWorld().set(blockInWorld.x, blockInWorld.y, blockInWorld.z);
|
getBlockInWorld().set(blockInWorld.x, blockInWorld.y, blockInWorld.z);
|
||||||
|
setChunk(getWorld().getChunkByBlock(blockInWorld));
|
||||||
Vec3i chunk = Vectors.grab3i();
|
|
||||||
Coordinates.convertInWorldToChunk(blockInWorld, chunk);
|
|
||||||
setChunk(getWorld().getChunk(chunk));
|
|
||||||
Vectors.release(chunk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.util.crash.CrashReports;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
import ru.windcorp.progressia.server.Server;
|
import ru.windcorp.progressia.server.Server;
|
||||||
@ -18,12 +17,6 @@ import ru.windcorp.progressia.server.world.tile.UpdateableTile;
|
|||||||
|
|
||||||
public class TickAndUpdateUtil {
|
public class TickAndUpdateUtil {
|
||||||
|
|
||||||
private static final LowOverheadCache<MutableBlockTickContext> JAVAPONY_S_ULTIMATE_BLOCK_TICK_CONTEXT_SUPPLY =
|
|
||||||
new LowOverheadCache<>(MutableBlockTickContext::new);
|
|
||||||
|
|
||||||
private static final LowOverheadCache<MutableTileTickContext> JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY =
|
|
||||||
new LowOverheadCache<>(MutableTileTickContext::new);
|
|
||||||
|
|
||||||
public static void tickBlock(TickableBlock block, BlockTickContext context) {
|
public static void tickBlock(TickableBlock block, BlockTickContext context) {
|
||||||
try {
|
try {
|
||||||
block.tick(context);
|
block.tick(context);
|
||||||
@ -36,9 +29,8 @@ public class TickAndUpdateUtil {
|
|||||||
BlockLogic block = world.getBlock(blockInWorld);
|
BlockLogic block = world.getBlock(blockInWorld);
|
||||||
if (!(block instanceof TickableBlock)) return; // also checks nulls
|
if (!(block instanceof TickableBlock)) return; // also checks nulls
|
||||||
|
|
||||||
BlockTickContext tickContext = grabBlockTickContext(world.getServer(), blockInWorld);
|
BlockTickContext tickContext = getBlockTickContext(world.getServer(), blockInWorld);
|
||||||
tickBlock((TickableBlock) block, tickContext);
|
tickBlock((TickableBlock) block, tickContext);
|
||||||
releaseTickContext(tickContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void tickTile(TickableTile tile, TileTickContext context) {
|
public static void tickTile(TickableTile tile, TileTickContext context) {
|
||||||
@ -53,16 +45,15 @@ public class TickAndUpdateUtil {
|
|||||||
TileLogic tile = world.getTile(blockInWorld, face, layer);
|
TileLogic tile = world.getTile(blockInWorld, face, layer);
|
||||||
if (!(tile instanceof TickableTile)) return;
|
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);
|
tickTile((TickableTile) tile, tickContext);
|
||||||
releaseTickContext(tickContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void tickTiles(WorldLogic world, Vec3i blockInWorld, BlockFace face) {
|
public static void tickTiles(WorldLogic world, Vec3i blockInWorld, BlockFace face) {
|
||||||
List<TileLogic> tiles = world.getTilesOrNull(blockInWorld, face);
|
List<TileLogic> tiles = world.getTilesOrNull(blockInWorld, face);
|
||||||
if (tiles == null || tiles.isEmpty()) return;
|
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) {
|
for (int layer = 0; layer < tiles.size(); ++layer) {
|
||||||
TileLogic tile = tiles.get(layer);
|
TileLogic tile = tiles.get(layer);
|
||||||
@ -71,8 +62,6 @@ public class TickAndUpdateUtil {
|
|||||||
tickContext.init(world.getServer(), blockInWorld, face, layer);
|
tickContext.init(world.getServer(), blockInWorld, face, layer);
|
||||||
tickTile((TickableTile) tile, tickContext);
|
tickTile((TickableTile) tile, tickContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.release(tickContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateBlock(UpdateableBlock block, BlockTickContext context) {
|
public static void updateBlock(UpdateableBlock block, BlockTickContext context) {
|
||||||
@ -87,9 +76,8 @@ public class TickAndUpdateUtil {
|
|||||||
BlockLogic block = world.getBlock(blockInWorld);
|
BlockLogic block = world.getBlock(blockInWorld);
|
||||||
if (!(block instanceof UpdateableBlock)) return; // also checks nulls
|
if (!(block instanceof UpdateableBlock)) return; // also checks nulls
|
||||||
|
|
||||||
BlockTickContext tickContext = grabBlockTickContext(world.getServer(), blockInWorld);
|
BlockTickContext tickContext = getBlockTickContext(world.getServer(), blockInWorld);
|
||||||
updateBlock((UpdateableBlock) block, tickContext);
|
updateBlock((UpdateableBlock) block, tickContext);
|
||||||
releaseTickContext(tickContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateTile(UpdateableTile tile, TileTickContext context) {
|
public static void updateTile(UpdateableTile tile, TileTickContext context) {
|
||||||
@ -104,16 +92,15 @@ public class TickAndUpdateUtil {
|
|||||||
TileLogic tile = world.getTile(blockInWorld, face, layer);
|
TileLogic tile = world.getTile(blockInWorld, face, layer);
|
||||||
if (!(tile instanceof UpdateableTile)) return;
|
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);
|
updateTile((UpdateableTile) tile, tickContext);
|
||||||
releaseTickContext(tickContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateTiles(WorldLogic world, Vec3i blockInWorld, BlockFace face) {
|
public static void updateTiles(WorldLogic world, Vec3i blockInWorld, BlockFace face) {
|
||||||
List<TileLogic> tiles = world.getTilesOrNull(blockInWorld, face);
|
List<TileLogic> tiles = world.getTilesOrNull(blockInWorld, face);
|
||||||
if (tiles == null || tiles.isEmpty()) return;
|
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) {
|
for (int layer = 0; layer < tiles.size(); ++layer) {
|
||||||
TileLogic tile = tiles.get(layer);
|
TileLogic tile = tiles.get(layer);
|
||||||
@ -122,42 +109,28 @@ public class TickAndUpdateUtil {
|
|||||||
tickContext.init(world.getServer(), blockInWorld, face, layer);
|
tickContext.init(world.getServer(), blockInWorld, face, layer);
|
||||||
updateTile((UpdateableTile) tile, tickContext);
|
updateTile((UpdateableTile) tile, tickContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.release(tickContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BlockTickContext grabBlockTickContext(
|
public static BlockTickContext getBlockTickContext(
|
||||||
Server server,
|
Server server,
|
||||||
Vec3i blockInWorld
|
Vec3i blockInWorld
|
||||||
) {
|
) {
|
||||||
MutableBlockTickContext result = JAVAPONY_S_ULTIMATE_BLOCK_TICK_CONTEXT_SUPPLY.grab();
|
MutableBlockTickContext result = new MutableBlockTickContext();
|
||||||
result.init(server, blockInWorld);
|
result.init(server, blockInWorld);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TileTickContext grabTileTickContext(
|
public static TileTickContext getTileTickContext(
|
||||||
Server server,
|
Server server,
|
||||||
Vec3i blockInWorld,
|
Vec3i blockInWorld,
|
||||||
BlockFace face,
|
BlockFace face,
|
||||||
int layer
|
int layer
|
||||||
) {
|
) {
|
||||||
MutableTileTickContext result = JAVAPONY_S_ULTIMATE_TILE_TICK_CONTEXT_SUPPLY.grab();
|
MutableTileTickContext result = new MutableTileTickContext();
|
||||||
result.init(server, blockInWorld, face, layer);
|
result.init(server, blockInWorld, face, layer);
|
||||||
return result;
|
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() {}
|
private TickAndUpdateUtil() {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.ChunkData;
|
||||||
import ru.windcorp.progressia.common.world.ChunkDataListener;
|
import ru.windcorp.progressia.common.world.ChunkDataListener;
|
||||||
import ru.windcorp.progressia.common.world.ChunkDataListeners;
|
import ru.windcorp.progressia.common.world.ChunkDataListeners;
|
||||||
@ -48,10 +47,7 @@ public class WorldLogic {
|
|||||||
public void onChunkBlockChanged(
|
public void onChunkBlockChanged(
|
||||||
ChunkData chunk, Vec3i blockInChunk, BlockData previous, BlockData current
|
ChunkData chunk, Vec3i blockInChunk, BlockData previous, BlockData current
|
||||||
) {
|
) {
|
||||||
Vec3i blockInWorld = Vectors.grab3i();
|
getServer().getWorldAccessor().triggerUpdates(Coordinates.getInWorld(chunk.getPosition(), blockInChunk, null));
|
||||||
Coordinates.getInWorld(chunk.getPosition(), blockInChunk, blockInWorld);
|
|
||||||
getServer().getWorldAccessor().triggerUpdates(blockInWorld);
|
|
||||||
Vectors.release(blockInWorld);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,10 +55,7 @@ public class WorldLogic {
|
|||||||
ChunkData chunk, Vec3i blockInChunk, BlockFace face, TileData tile,
|
ChunkData chunk, Vec3i blockInChunk, BlockFace face, TileData tile,
|
||||||
boolean wasAdded
|
boolean wasAdded
|
||||||
) {
|
) {
|
||||||
Vec3i blockInWorld = Vectors.grab3i();
|
getServer().getWorldAccessor().triggerUpdates(Coordinates.getInWorld(chunk.getPosition(), blockInChunk, null), face);
|
||||||
Coordinates.getInWorld(chunk.getPosition(), blockInChunk, blockInWorld);
|
|
||||||
getServer().getWorldAccessor().triggerUpdates(blockInWorld, face);
|
|
||||||
Vectors.release(blockInWorld);
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@ -84,22 +77,14 @@ public class WorldLogic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ChunkLogic getChunkByBlock(Vec3i blockInWorld) {
|
public ChunkLogic getChunkByBlock(Vec3i blockInWorld) {
|
||||||
Vec3i chunkPos = Vectors.grab3i();
|
return getChunk(Coordinates.convertInWorldToChunk(blockInWorld, null));
|
||||||
Coordinates.convertInWorldToChunk(blockInWorld, chunkPos);
|
|
||||||
ChunkLogic result = getChunk(chunkPos);
|
|
||||||
Vectors.release(chunkPos);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockLogic getBlock(Vec3i blockInWorld) {
|
public BlockLogic getBlock(Vec3i blockInWorld) {
|
||||||
ChunkLogic chunk = getChunkByBlock(blockInWorld);
|
ChunkLogic chunk = getChunkByBlock(blockInWorld);
|
||||||
if (chunk == null) return null;
|
if (chunk == null) return null;
|
||||||
|
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
return chunk.getBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null));
|
||||||
Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk);
|
|
||||||
BlockLogic result = chunk.getBlock(blockInChunk);
|
|
||||||
Vectors.release(blockInChunk);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<TileLogic> getTiles(Vec3i blockInWorld, BlockFace face) {
|
public List<TileLogic> getTiles(Vec3i blockInWorld, BlockFace face) {
|
||||||
@ -114,16 +99,13 @@ public class WorldLogic {
|
|||||||
ChunkLogic chunk = getChunkByBlock(blockInWorld);
|
ChunkLogic chunk = getChunkByBlock(blockInWorld);
|
||||||
if (chunk == null) return null;
|
if (chunk == null) return null;
|
||||||
|
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
Vec3i blockInChunk = Coordinates.convertInWorldToInChunk(blockInWorld, null);
|
||||||
Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk);
|
|
||||||
|
|
||||||
List<TileLogic> result =
|
List<TileLogic> result =
|
||||||
createIfMissing
|
createIfMissing
|
||||||
? chunk.getTiles(blockInChunk, face)
|
? chunk.getTiles(blockInChunk, face)
|
||||||
: chunk.getTilesOrNull(blockInChunk, face);
|
: chunk.getTilesOrNull(blockInChunk, face);
|
||||||
|
|
||||||
Vectors.release(blockInChunk);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ import java.util.List;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.Coordinates;
|
||||||
import ru.windcorp.progressia.common.world.WorldData;
|
import ru.windcorp.progressia.common.world.WorldData;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
@ -38,18 +37,15 @@ class AddOrRemoveTile extends CachedWorldChange {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void affectCommon(WorldData world) {
|
protected void affectCommon(WorldData world) {
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
List<TileData> tiles = world
|
||||||
Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk);
|
.getChunkByBlock(blockInWorld)
|
||||||
|
.getTiles(Coordinates.convertInWorldToInChunk(blockInWorld, null), face);
|
||||||
List<TileData> tiles = world.getChunkByBlock(blockInWorld).getTiles(blockInChunk, face);
|
|
||||||
|
|
||||||
if (shouldAdd) {
|
if (shouldAdd) {
|
||||||
tiles.add(tile);
|
tiles.add(tile);
|
||||||
} else {
|
} else {
|
||||||
tiles.remove(tile);
|
tiles.remove(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vectors.release(blockInChunk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world.tasks;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.Coordinates;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
import ru.windcorp.progressia.server.Server;
|
import ru.windcorp.progressia.server.Server;
|
||||||
@ -20,8 +19,7 @@ class BlockTriggeredUpdate extends CachedEvaluation {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void evaluate(Server server) {
|
public void evaluate(Server server) {
|
||||||
Vec3i cursor = Vectors.grab3i();
|
Vec3i cursor = new Vec3i(blockInWorld.x, blockInWorld.y, blockInWorld.z);
|
||||||
cursor.set(blockInWorld.x, blockInWorld.y, blockInWorld.z);
|
|
||||||
|
|
||||||
WorldLogic world = server.getWorld();
|
WorldLogic world = server.getWorld();
|
||||||
|
|
||||||
@ -31,8 +29,6 @@ class BlockTriggeredUpdate extends CachedEvaluation {
|
|||||||
TickAndUpdateUtil.updateBlock(world, cursor);
|
TickAndUpdateUtil.updateBlock(world, cursor);
|
||||||
cursor.sub(face.getVector());
|
cursor.sub(face.getVector());
|
||||||
}
|
}
|
||||||
|
|
||||||
Vectors.release(cursor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(Vec3i blockInWorld) {
|
public void init(Vec3i blockInWorld) {
|
||||||
|
@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world.tasks;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.Coordinates;
|
||||||
import ru.windcorp.progressia.common.world.WorldData;
|
import ru.windcorp.progressia.common.world.WorldData;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockData;
|
import ru.windcorp.progressia.common.world.block.BlockData;
|
||||||
@ -27,12 +26,9 @@ class SetBlock extends CachedWorldChange {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void affectCommon(WorldData world) {
|
protected void affectCommon(WorldData world) {
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
world
|
||||||
Coordinates.convertInWorldToInChunk(blockInWorld, blockInChunk);
|
.getChunkByBlock(blockInWorld)
|
||||||
|
.setBlock(Coordinates.convertInWorldToInChunk(blockInWorld, null), block, true);
|
||||||
world.getChunkByBlock(blockInWorld).setBlock(blockInChunk, block, true);
|
|
||||||
|
|
||||||
Vectors.release(blockInChunk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world.tasks;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.Coordinates;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||||
import ru.windcorp.progressia.server.Server;
|
import ru.windcorp.progressia.server.Server;
|
||||||
@ -21,8 +20,7 @@ class TileTriggeredUpdate extends CachedEvaluation {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void evaluate(Server server) {
|
public void evaluate(Server server) {
|
||||||
Vec3i cursor = Vectors.grab3i();
|
Vec3i cursor = new Vec3i(blockInWorld.x, blockInWorld.y, blockInWorld.z);
|
||||||
cursor.set(blockInWorld.x, blockInWorld.y, blockInWorld.z);
|
|
||||||
|
|
||||||
WorldLogic world = server.getWorld();
|
WorldLogic world = server.getWorld();
|
||||||
|
|
||||||
@ -30,8 +28,6 @@ class TileTriggeredUpdate extends CachedEvaluation {
|
|||||||
TickAndUpdateUtil.tickBlock(world, cursor); // Tick block on one side
|
TickAndUpdateUtil.tickBlock(world, cursor); // Tick block on one side
|
||||||
cursor.add(face.getVector());
|
cursor.add(face.getVector());
|
||||||
TickAndUpdateUtil.tickBlock(world, cursor); // Tick block on the other side
|
TickAndUpdateUtil.tickBlock(world, cursor); // Tick block on the other side
|
||||||
|
|
||||||
Vectors.release(cursor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(Vec3i blockInWorld, BlockFace face) {
|
public void init(Vec3i blockInWorld, BlockFace face) {
|
||||||
|
@ -20,15 +20,8 @@ public class EdgeTileLogic extends TileLogic implements UpdateableTile {
|
|||||||
@Override
|
@Override
|
||||||
public boolean canOccupyFace(TileTickContext context) {
|
public boolean canOccupyFace(TileTickContext context) {
|
||||||
boolean canOccupy = false;
|
boolean canOccupy = false;
|
||||||
|
canOccupy ^= canOccupyFace(context, context.getCurrentFace(), context.getCurrentBlockContext());
|
||||||
BlockTickContext currentTickContext = context.grabCurrentBlockContext();
|
canOccupy ^= canOccupyFace(context, context.getCounterFace(), context.getCounterBlockContext());
|
||||||
canOccupy ^= canOccupyFace(context, context.getCurrentFace(), currentTickContext);
|
|
||||||
context.release(currentTickContext);
|
|
||||||
|
|
||||||
BlockTickContext counterTickContext = context.grabCounterBlockContext();
|
|
||||||
canOccupy ^= canOccupyFace(context, context.getCounterFace(), counterTickContext);
|
|
||||||
context.release(counterTickContext);
|
|
||||||
|
|
||||||
return canOccupy;
|
return canOccupy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package ru.windcorp.progressia.server.world.tile;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.ChunkData;
|
||||||
import ru.windcorp.progressia.common.world.Coordinates;
|
import ru.windcorp.progressia.common.world.Coordinates;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockData;
|
import ru.windcorp.progressia.common.world.block.BlockData;
|
||||||
@ -62,35 +61,31 @@ public interface TileTickContext extends TickContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default List<TileLogic> getTiles() {
|
default List<TileLogic> getTiles() {
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
return getCurrentChunk().getTiles(
|
||||||
Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), blockInChunk);
|
Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), null),
|
||||||
List<TileLogic> result = getCurrentChunk().getTiles(blockInChunk, getCurrentFace());
|
getCurrentFace()
|
||||||
Vectors.release(blockInChunk);
|
);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default List<TileLogic> getTilesOrNull() {
|
default List<TileLogic> getTilesOrNull() {
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
return getCurrentChunk().getTilesOrNull(
|
||||||
Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), blockInChunk);
|
Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), null),
|
||||||
List<TileLogic> result = getCurrentChunk().getTilesOrNull(blockInChunk, getCurrentFace());
|
getCurrentFace()
|
||||||
Vectors.release(blockInChunk);
|
);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default List<TileData> getTileDataList() {
|
default List<TileData> getTileDataList() {
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
return getCurrentChunkData().getTiles(
|
||||||
Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), blockInChunk);
|
Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), null),
|
||||||
List<TileData> result = getCurrentChunkData().getTiles(blockInChunk, getCurrentFace());
|
getCurrentFace()
|
||||||
Vectors.release(blockInChunk);
|
);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default List<TileData> getTileDataListOrNull() {
|
default List<TileData> getTileDataListOrNull() {
|
||||||
Vec3i blockInChunk = Vectors.grab3i();
|
return getCurrentChunkData().getTilesOrNull(
|
||||||
Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), blockInChunk);
|
Coordinates.convertInWorldToInChunk(getCurrentBlockInWorld(), null),
|
||||||
List<TileData> result = getCurrentChunkData().getTilesOrNull(blockInChunk, getCurrentFace());
|
getCurrentFace()
|
||||||
Vectors.release(blockInChunk);
|
);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -113,8 +108,8 @@ public interface TileTickContext extends TickContext {
|
|||||||
return getWorldData().getBlock(getCurrentBlockInWorld());
|
return getWorldData().getBlock(getCurrentBlockInWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
default BlockTickContext grabCurrentBlockContext() {
|
default BlockTickContext getCurrentBlockContext() {
|
||||||
return TickAndUpdateUtil.grabBlockTickContext(getServer(), getCurrentBlockInWorld());
|
return TickAndUpdateUtil.getBlockTickContext(getServer(), getCurrentBlockInWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -137,8 +132,8 @@ public interface TileTickContext extends TickContext {
|
|||||||
return getWorldData().getBlock(getCounterBlockInWorld());
|
return getWorldData().getBlock(getCounterBlockInWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
default BlockTickContext grabCounterBlockContext() {
|
default BlockTickContext getCounterBlockContext() {
|
||||||
return TickAndUpdateUtil.grabBlockTickContext(getServer(), getCounterBlockInWorld());
|
return TickAndUpdateUtil.getBlockTickContext(getServer(), getCounterBlockInWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -149,12 +144,4 @@ public interface TileTickContext extends TickContext {
|
|||||||
getAccessor().removeTile(getCurrentBlockInWorld(), getCurrentFace(), getTileData());
|
getAccessor().removeTile(getCurrentBlockInWorld(), getCurrentFace(), getTileData());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Misc
|
|
||||||
*/
|
|
||||||
|
|
||||||
default void release(BlockTickContext context) {
|
|
||||||
TickAndUpdateUtil.releaseTickContext(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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.AABBoid;
|
||||||
import ru.windcorp.progressia.common.collision.CollisionModel;
|
import ru.windcorp.progressia.common.collision.CollisionModel;
|
||||||
import ru.windcorp.progressia.common.collision.CompoundCollisionModel;
|
import ru.windcorp.progressia.common.collision.CompoundCollisionModel;
|
||||||
import ru.windcorp.progressia.common.util.Vectors;
|
|
||||||
|
|
||||||
public class CollisionModelRenderer {
|
public class CollisionModelRenderer {
|
||||||
|
|
||||||
@ -30,15 +29,13 @@ public class CollisionModelRenderer {
|
|||||||
|
|
||||||
private static void renderAABBoid(AABBoid aabb, ShapeRenderHelper helper) {
|
private static void renderAABBoid(AABBoid aabb, ShapeRenderHelper helper) {
|
||||||
Mat4 mat = helper.pushTransform();
|
Mat4 mat = helper.pushTransform();
|
||||||
Vec3 tmp = Vectors.grab3();
|
Vec3 tmp = new Vec3();
|
||||||
|
|
||||||
aabb.getOrigin(tmp);
|
aabb.getOrigin(tmp);
|
||||||
mat.translate(tmp);
|
mat.translate(tmp);
|
||||||
aabb.getSize(tmp);
|
aabb.getSize(tmp);
|
||||||
mat.scale(tmp);
|
mat.scale(tmp);
|
||||||
|
|
||||||
Vectors.release(tmp);
|
|
||||||
|
|
||||||
CUBE.render(helper);
|
CUBE.render(helper);
|
||||||
helper.popTransform();
|
helper.popTransform();
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ import ru.windcorp.progressia.common.collision.AABB;
|
|||||||
import ru.windcorp.progressia.common.collision.CollisionModel;
|
import ru.windcorp.progressia.common.collision.CollisionModel;
|
||||||
import ru.windcorp.progressia.common.comms.controls.*;
|
import ru.windcorp.progressia.common.comms.controls.*;
|
||||||
import ru.windcorp.progressia.common.state.StatefulObjectRegistry.Factory;
|
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.ChunkData;
|
||||||
import ru.windcorp.progressia.common.world.block.*;
|
import ru.windcorp.progressia.common.world.block.*;
|
||||||
import ru.windcorp.progressia.common.world.entity.*;
|
import ru.windcorp.progressia.common.world.entity.*;
|
||||||
@ -226,13 +225,9 @@ public class TestContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void onBlockPlaceTrigger(ControlData control) {
|
private static void onBlockPlaceTrigger(ControlData control) {
|
||||||
Vec3i blockInWorld = Vectors.grab3i();
|
((ControlPlaceBlockData) control).setBlockInWorld(
|
||||||
Vec3i selectedBlock = getSelection().getBlock();
|
getSelection().getBlock().add_(getSelection().getSurface().getVector())
|
||||||
|
);
|
||||||
blockInWorld.set(selectedBlock.x, selectedBlock.y, selectedBlock.z).add(getSelection().getSurface().getVector());
|
|
||||||
|
|
||||||
((ControlPlaceBlockData) control).setBlockInWorld(blockInWorld);
|
|
||||||
Vectors.release(blockInWorld);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void onBlockPlaceReceived(Server server, PacketControl packet, ru.windcorp.progressia.server.comms.Client client) {
|
private static void onBlockPlaceReceived(Server server, PacketControl packet, ru.windcorp.progressia.server.comms.Client client) {
|
||||||
|
@ -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.client.graphics.world.LocalPlayer;
|
||||||
import ru.windcorp.progressia.common.Units;
|
import ru.windcorp.progressia.common.Units;
|
||||||
import ru.windcorp.progressia.common.util.FloatMathUtils;
|
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;
|
import ru.windcorp.progressia.common.world.entity.EntityData;
|
||||||
|
|
||||||
public class TestPlayerControls {
|
public class TestPlayerControls {
|
||||||
@ -67,13 +65,9 @@ public class TestPlayerControls {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EntityData player = getEntity();
|
EntityData player = getEntity();
|
||||||
Mat3 angMat = Matrices.grab3();
|
|
||||||
|
|
||||||
angMat.identity().rotateZ(player.getYaw());
|
Mat3 angMat = new Mat3().identity().rotateZ(player.getYaw());
|
||||||
|
Vec3 movement = new Vec3(movementForward, -movementRight, 0);
|
||||||
Vec3 movement = Vectors.grab3();
|
|
||||||
|
|
||||||
movement.set(movementForward, -movementRight, 0);
|
|
||||||
|
|
||||||
if (movementForward != 0 && movementRight != 0) {
|
if (movementForward != 0 && movementRight != 0) {
|
||||||
movement.normalize();
|
movement.normalize();
|
||||||
@ -94,9 +88,6 @@ public class TestPlayerControls {
|
|||||||
}
|
}
|
||||||
|
|
||||||
player.getVelocity().add(movement);
|
player.getVelocity().add(movement);
|
||||||
|
|
||||||
Matrices.release(angMat);
|
|
||||||
Vectors.release(movement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleInput(Input input) {
|
public void handleInput(Input input) {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package ru.windcorp.progressia.test;
|
package ru.windcorp.progressia.test;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
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.common.world.block.BlockFace;
|
||||||
import ru.windcorp.progressia.server.Server;
|
import ru.windcorp.progressia.server.Server;
|
||||||
import ru.windcorp.progressia.server.world.TickAndUpdateUtil;
|
import ru.windcorp.progressia.server.world.TickAndUpdateUtil;
|
||||||
@ -17,21 +16,12 @@ public class TestTileLogicGrass extends EdgeTileLogic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isBlockAboveTransparent(Server server, Vec3i blockInWorld) {
|
private boolean isBlockAboveTransparent(Server server, Vec3i blockInWorld) {
|
||||||
Vec3i blockAboveCoords = Vectors.grab3i();
|
BlockTickContext blockAboveContext = TickAndUpdateUtil.getBlockTickContext(server, blockInWorld.add_(BlockFace.TOP.getVector()));
|
||||||
blockAboveCoords.set(blockInWorld.x, blockInWorld.y, blockInWorld.z);
|
|
||||||
blockAboveCoords.add(BlockFace.TOP.getVector());
|
|
||||||
|
|
||||||
BlockTickContext blockAboveContext = TickAndUpdateUtil.grabBlockTickContext(server, blockAboveCoords);
|
|
||||||
|
|
||||||
try {
|
|
||||||
BlockLogic blockAbove = blockAboveContext.getBlock();
|
BlockLogic blockAbove = blockAboveContext.getBlock();
|
||||||
if (blockAbove == null) return true;
|
if (blockAbove == null) return true;
|
||||||
|
|
||||||
return blockAbove.isTransparent(blockAboveContext);
|
return blockAbove.isTransparent(blockAboveContext);
|
||||||
} finally {
|
|
||||||
TickAndUpdateUtil.releaseTickContext(blockAboveContext);
|
|
||||||
Vectors.release(blockAboveCoords);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user