From 28be74ec0d12356390ae3082321cbe907a24fc18 Mon Sep 17 00:00:00 2001 From: josua Date: Sun, 25 Aug 2019 16:04:47 +1000 Subject: [PATCH] Fixed issues with rendering entities --- .../display/transparent/ITransparentObject.java | 1 + .../display/transparent/TransparentObject.java | 3 ++- src/shootergame/entity/Entity.java | 11 +++++++++++ src/shootergame/entity/EntityVertical.java | 2 +- src/shootergame/tiles/Tile.java | 5 +++++ src/shootergame/util/gl/VerticalRender.java | 12 ++++++------ 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/shootergame/display/transparent/ITransparentObject.java b/src/shootergame/display/transparent/ITransparentObject.java index 6ac011e..fe627be 100644 --- a/src/shootergame/display/transparent/ITransparentObject.java +++ b/src/shootergame/display/transparent/ITransparentObject.java @@ -7,4 +7,5 @@ public interface ITransparentObject { public boolean isOpaqueTile(); public void render(Vec2d pos, Camera camera); + public Vec2d getRenderOffset(); } diff --git a/src/shootergame/display/transparent/TransparentObject.java b/src/shootergame/display/transparent/TransparentObject.java index cb613f1..5da7c5d 100644 --- a/src/shootergame/display/transparent/TransparentObject.java +++ b/src/shootergame/display/transparent/TransparentObject.java @@ -11,7 +11,8 @@ class TransparentObject Vec2d pos; TransparentObject(ITransparentObject object, Camera camera, Vec2d pos) { - this.distance = camera.pos.distance(new Vec3d(pos.x, pos.y, 0)); + Vec2d offset = object.getRenderOffset(); + this.distance = camera.pos.distance(new Vec3d(offset.x + pos.x, offset.y + pos.y, 0)); this.object = object; this.pos = pos; } diff --git a/src/shootergame/entity/Entity.java b/src/shootergame/entity/Entity.java index 8e1fe82..6e37c68 100644 --- a/src/shootergame/entity/Entity.java +++ b/src/shootergame/entity/Entity.java @@ -11,6 +11,7 @@ import shootergame.tiles.Tile; import shootergame.util.math.MathHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; +import shootergame.util.math.vec.Vec3d; import shootergame.world.World; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -85,6 +86,11 @@ public class Entity implements ITransparentObject chunk.killEntity(this); } + public void activateSteppedOnBlocks() + { + + } + public boolean moveIsLegal(Vec2d pos) { // Is this entity solid @@ -141,4 +147,9 @@ public class Entity implements ITransparentObject // Send back true if everything passes return true; } + + @Override + public Vec2d getRenderOffset() { + return new Vec2d(0, 0); + } } diff --git a/src/shootergame/entity/EntityVertical.java b/src/shootergame/entity/EntityVertical.java index 8932cce..5f76ab5 100644 --- a/src/shootergame/entity/EntityVertical.java +++ b/src/shootergame/entity/EntityVertical.java @@ -20,7 +20,7 @@ public class EntityVertical extends Entity public void render(Vec2d pos, Camera camera, TextureReference tex, double height) { super.render(pos, camera); - VerticalRender.render(pos, camera, tex, height); + VerticalRender.render(new Vec2d(pos.x - 0.5, pos.y - 0.5), camera, tex, height); } @Override diff --git a/src/shootergame/tiles/Tile.java b/src/shootergame/tiles/Tile.java index 8575c55..1b3b2c9 100644 --- a/src/shootergame/tiles/Tile.java +++ b/src/shootergame/tiles/Tile.java @@ -7,6 +7,7 @@ import shootergame.entity.Entity; import shootergame.entity.player.EntityPlayer; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; +import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -49,4 +50,8 @@ public class Tile implements ITransparentObject public void onWalkedOn(Chunk chunk, Layer layer, Vec2i pos, Entity entity) { } + @Override + public Vec2d getRenderOffset() { + return new Vec2d(0.5, 0.5); + } } diff --git a/src/shootergame/util/gl/VerticalRender.java b/src/shootergame/util/gl/VerticalRender.java index 3560c39..411545f 100644 --- a/src/shootergame/util/gl/VerticalRender.java +++ b/src/shootergame/util/gl/VerticalRender.java @@ -18,17 +18,17 @@ public class VerticalRender double angle_r = camera.angle.x; // Make the tile upright - GlHelpers.translate(0.5, 0, 0); + GlHelpers.translate(0.5, 0.5, 0); GlHelpers.translate(pos.x, pos.y, 0); GlHelpers.rotate(-angle_r, 0, 0, 1); - GlHelpers.translate(-0.5, 0, 0); + GlHelpers.translate(-0.5, -0.5, 0); // Render the tile GlHelpers.begin(); - tex.texCoord(1, 1); GlHelpers.vertex3(0, 0, 0); - tex.texCoord(0, 1); GlHelpers.vertex3(1, 0, 0); - tex.texCoord(0, 0); GlHelpers.vertex3(1, 0, h); - tex.texCoord(1, 0); GlHelpers.vertex3(0, 0, h); + tex.texCoord(1, 1); GlHelpers.vertex3(0, 0.5, 0); + tex.texCoord(0, 1); GlHelpers.vertex3(1, 0.5, 0); + tex.texCoord(0, 0); GlHelpers.vertex3(1, 0.5, h); + tex.texCoord(1, 0); GlHelpers.vertex3(0, 0.5, h); GlHelpers.end(); // Pop the matrix