diff --git a/.classpath b/.classpath
index 344bafb..7b9447b 100755
--- a/.classpath
+++ b/.classpath
@@ -41,6 +41,6 @@
-
+
diff --git a/src/projectzombie/Main.java b/src/projectzombie/Main.java
index 7575ca1..369c6e4 100755
--- a/src/projectzombie/Main.java
+++ b/src/projectzombie/Main.java
@@ -63,17 +63,14 @@ public class Main
public static void main(String[] args) throws IOException
{
- // Initialize math
MathHelpers.init();
+ Settings.init();
+ Environment.init(args);
+ Cheats.init(args);
worker = new Worker();
worker.start();
- // Initialize cheats, settings, and environment
- Environment.init(args);
- Cheats.init(args);
- Settings.init();
-
Items.init();
Entities.init();
Tiles.init();
diff --git a/src/projectzombie/display/Camera.java b/src/projectzombie/display/Camera.java
index ba7b410..0be5b7b 100755
--- a/src/projectzombie/display/Camera.java
+++ b/src/projectzombie/display/Camera.java
@@ -1,11 +1,14 @@
package projectzombie.display;
+import gl_engine.MathHelpers;
import gl_engine.matrix.Matrix4;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.Main;
public class Camera
{
+ public int cx, cy;
public double angle = 45;
private Matrix4 matrix;
@@ -14,10 +17,14 @@ public class Camera
public Camera()
{
Matrix4 identity = Matrix4.identity();
- Vec2d pos = Main.player.pos;
+ Vec3d pos = Main.player.getPos();
angle = Main.player.angle;
- identity = Matrix4.multiply(identity, Matrix4.translate(-pos.x + 0.5, 0, -pos.y + 0.5));
+ cx = MathHelpers.floor((pos.x - 0.5) / 16.0) + 1;
+ cy = MathHelpers.floor((pos.z - 0.5) / 16.0) + 1;
+
+ identity = Matrix4.multiply(identity, Matrix4.translate(
+ MathHelpers.mod(-pos.x + 0.5, 16), 0, MathHelpers.mod(-pos.z + 0.5, 16)));
identity = Matrix4.multiply(identity, Matrix4.rotate(angle + 180, 0, 1, 0));
identity = Matrix4.multiply(identity, Matrix4.rotate(-45, 1, 0, 0));
identity = Matrix4.multiply(identity, Matrix4.translate(0, 0, -16));
diff --git a/src/projectzombie/display/DisplayLighting.java b/src/projectzombie/display/DisplayLighting.java
index 8e1ad77..9558559 100755
--- a/src/projectzombie/display/DisplayLighting.java
+++ b/src/projectzombie/display/DisplayLighting.java
@@ -61,6 +61,7 @@ public class DisplayLighting
if(!ChunkEventHandler.loaded) return;
Layer layer = Main.world.getLayer();
EntityPlayer player = Main.player;
+ Vec2d ppos = player.getPos().xz();
boolean dirty = lighting_dirty;
@@ -69,8 +70,8 @@ public class DisplayLighting
for(int cx=-Chunk.RENDER_DISTANCE;cx<=Chunk.RENDER_DISTANCE;cx++) {
for(int cy=-Chunk.RENDER_DISTANCE;cy<=Chunk.RENDER_DISTANCE;cy++) {
Vec2i cpos = new Vec2i(
- cx + MathHelpers.floor(player.pos.x / 16),
- cy + MathHelpers.floor(player.pos.y / 16));
+ cx + MathHelpers.floor(ppos.x / 16),
+ cy + MathHelpers.floor(ppos.y / 16));
Chunk chunk = layer.chunks.get(cpos);
if(chunk.isLightDirty()) {
chunk.resetLightDirty();
@@ -92,8 +93,8 @@ public class DisplayLighting
for(int cy=-Chunk.RENDER_DISTANCE;cy<=Chunk.RENDER_DISTANCE;cy++)
{
Vec2i cpos = new Vec2i(
- cx + MathHelpers.floor(player.pos.x / 16),
- cy + MathHelpers.floor(player.pos.y / 16));
+ cx + MathHelpers.floor(ppos.x / 16),
+ cy + MathHelpers.floor(ppos.y / 16));
Chunk chunk = layer.chunks.get(cpos);
@@ -128,13 +129,13 @@ public class DisplayLighting
}
Main.worker.processLighting(lights, size, size,
- MathHelpers.floor(player.pos.x / 16) - Chunk.RENDER_DISTANCE,
- MathHelpers.floor(player.pos.y / 16) - Chunk.RENDER_DISTANCE);
+ MathHelpers.floor(ppos.x / 16) - Chunk.RENDER_DISTANCE,
+ MathHelpers.floor(ppos.y / 16) - Chunk.RENDER_DISTANCE);
}
private static void calculateLight(Layer layer, Lighting lighting, float[] pixels, int x, int y, float level)
{
- if(x < 0 || y < 0 || x >= lighting.w || y >= lighting.h) {
+ if(x < 0 || y < 0 || x >= lighting.w || y >= lighting.h || level <= 0) {
return;
}
@@ -192,10 +193,12 @@ public class DisplayLighting
0, 1
};
+ Vec2d epos = entity.getPos().xz();
+
for(int i=0;i 0) {
+ pos.y = new_pos.y;
+ } else {
+ velocity.y = 0;
+ velocity.x *= 0.75;
+ velocity.z *= 0.75;
+ pos.y = 0;
+ }
+
+ if(gravity) {
+ velocity.y -= MathHelpers.FallSpeed;
+ }
+
+ if(isSolid) {
+ moveAwayFromSolidEntities(layer);
+ }
}
protected void moveAwayFromSolidEntities(Layer layer)
{
if(!goThroughSolid)
{
- for(Entity e : layer.getNearbyEntities(pos, hitbox))
+ for(Entity e : layer.getNearbyEntities(pos.xz(), hitbox))
{
- if(e.isSolid && e != this) {
- double angle = Math.toDegrees(Math.atan2(
- pos.y - e.pos.y,
- pos.x - e.pos.x));
- moveTowards(angle + 180, 0.1);
+ if(e.isSolid && !e.goThroughSolid && e != this)
+ {
+ double distance = pos.distance(e.pos);
+ double angle = MathHelpers.atan2(e.pos.z - pos.z, e.pos.x - pos.x);
+
+ Vec3d vec_push = MathHelpers.moveTowards2(distance == 0 ? 1 : (0.5 / distance), angle).xny();
+
+ push(vec_push.multiply(-0.125));
}
}
}
}
- public void moveTowards(double angle, double speed)
- {
- if(chunk == null) {
- chunk = Main.world.getLayer().getChunk(pos);
- }
-
- // Calculate the new position
- speed *= 1 - MathHelpers.biggest(
- chunk.getFrontTile(pos.toInt()).tile.slowness,
- chunk.getBackTile(pos.toInt()).tile.slowness);
- Vec2d pos = this.pos.add(MathHelpers.moveTowards2(speed, Math.toRadians(angle)));
-
- // Check if the new position is legal
- if(this.moveIsLegal(new Vec2d(this.pos.x, pos.y))) this.pos.y = pos.y;
- if(this.moveIsLegal(new Vec2d(pos.x, this.pos.y))) this.pos.x = pos.x;
-
- // Activate stepped on tiles if the entity is "solid"
- if(this.isSolid) activateSteppedOnTile();
- }
-
- public void moveInVector(Vec2d vec, double speed)
- {
- // Calculate the new position
- speed *= 1 - MathHelpers.biggest(
- chunk.getFrontTile(pos.toInt()).tile.slowness,
- chunk.getBackTile(pos.toInt()).tile.slowness);
- Vec2d pos = vec.multiply(speed).add(this.pos);
-
- // Check if the new position is legal
- if(this.moveIsLegal(new Vec2d(this.pos.x, pos.y))) this.pos.y = pos.y;
- if(this.moveIsLegal(new Vec2d(pos.x, this.pos.y))) this.pos.x = pos.x;
-
- // Activate stepped on tiles if the entity is "solid"
- if(this.isSolid) activateSteppedOnTile();
+ public void push(Vec3d vec) {
+ velocity = velocity.add(vec);
}
public void kill() {
@@ -231,7 +262,7 @@ public abstract class Entity implements IBdfClassManager
{
// Get the tile position and the layer
Layer layer = Main.world.getLayer();
- Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+0);
+ Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.z)+0);
// Activate both tiles
tile_front.tile.onActivated(layer, tpos, this, tile_front);
@@ -245,7 +276,7 @@ public abstract class Entity implements IBdfClassManager
{
// Get the tile position and the layer
Layer layer = Main.world.getLayer();
- Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+0);
+ Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.z)+0);
// Activate both tiles
tile_front.tile.onWalkedOn(chunk, layer, tpos, this, tile_front);
@@ -256,7 +287,7 @@ public abstract class Entity implements IBdfClassManager
}
}
- public boolean moveIsLegal(Vec2d pos)
+ private boolean moveIsLegal(Vec2d pos)
{
Vec2i t_pos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+0);
Chunk chunk = Main.world.getLayer().getChunk(pos);
@@ -316,41 +347,7 @@ public abstract class Entity implements IBdfClassManager
return true;
}
- public Vec2d getRenderOffset(TileState state) {
- return new Vec2d(0, 0);
- }
-
public double getLightLevel() {
return 0;
}
-
- public void push(double amount, double angle)
- {
- double[] a = {amount};
-
- Main.mainloop.register(new IMainloopTask() {
-
- @Override
- public void MainLoopUpdate() {
- if(!ChunkEventHandler.loaded)
- return;
- if(chunk == null)
- chunk = Main.world.getLayer().getChunk(pos);
- if(Main.menu.doGameloop) {
- moveTowards(angle, a[0]/100.0);
- a[0] -= a[0] / 100.0;
- }
- }
-
- @Override
- public boolean MainLoopRepeat() {
- return a[0] > 0.2;
- }
-
- @Override
- public boolean MainLoopDelay(long millis) {
- return millis > 10;
- }
- });
- }
}
diff --git a/src/projectzombie/entity/EntityBoss.java b/src/projectzombie/entity/EntityBoss.java
index 49a42fd..ce86c6e 100755
--- a/src/projectzombie/entity/EntityBoss.java
+++ b/src/projectzombie/entity/EntityBoss.java
@@ -80,8 +80,8 @@ public class EntityBoss extends Entity implements IBossBar, EntityKillWithPartic
nl.set("seed", BdfObject.withLong(seed));
}
- public EntityBoss(Vec2d pos) {
- super(pos);
+ public EntityBoss(Vec3d pos, Vec3d velocity) {
+ super(pos, velocity);
this.isSolid = true;
this.goThroughSolid = false;
@@ -103,11 +103,14 @@ public class EntityBoss extends Entity implements IBossBar, EntityKillWithPartic
public void tick(Chunk chunk, Layer layer) {
super.tick(chunk, layer);
+ Vec3d bpos = getPos();
+ Vec3d ppos = Main.player.getPos();
+
double angle = Math.atan2(
- pos.x - Main.player.pos.x + noise_target_x.eval(
- time*2, Main.player.pos.x/25, Main.player.pos.y/25)*10,
- pos.y - Main.player.pos.y + noise_target_y.eval(
- time*2, Main.player.pos.y/25, Main.player.pos.y/25)*10);
+ bpos.x - ppos.x + noise_target_x.eval(
+ time*2, ppos.x/25, ppos.z/25)*10,
+ bpos.z - ppos.z + noise_target_y.eval(
+ time*2, ppos.x/25, ppos.z/25)*10);
angle = Math.toDegrees(angle) + 180;
if(this.noise_spawn.eval(GameTimer.getTime() / 500.0, 0) > 0.2) {
@@ -122,7 +125,7 @@ public class EntityBoss extends Entity implements IBossBar, EntityKillWithPartic
if(
layer.getBackTile(zombie_tpos).tile == layer.layergen.getTileDestroyed().tile &&
layer.getFrontTile(zombie_tpos).tile == Tiles.VOID) {
- layer.spawnEntity(new EntityZombie(this.pos.add(zombie_pos)));
+ layer.spawnEntity(new EntityZombie(bpos.add(zombie_pos.xny()), getVelocity()));
}
spawn_frequency = 50;
}
@@ -131,25 +134,8 @@ public class EntityBoss extends Entity implements IBossBar, EntityKillWithPartic
if(this.noise_gun.eval(GameTimer.getTime() / 500.0, 0) > 0 && !Main.player.dead && !Main.player.in_animation) {
- if(bullet_frequency == 0)
- {
- Vec2d gun_offset = MathHelpers.moveTowards2(1, Math.toRadians(90));
-
- Vec3d pos1 = new Vec3d(pos.x + gun_offset.x, pos.y + gun_offset.y, 1);
- double distance_1 = pos1.distance(new Vec3d(pos.x, pos.y, pos1.z));
- double angle1_0 = Math.toDegrees(Math.atan2(
- pos1.x - Main.player.pos.x, pos1.y - Main.player.pos.y)) + 180;
- double angle1_1 = Math.toDegrees(Math.atan2(distance_1, pos1.z - 1)) - 90;
-
- Vec3d pos2 = new Vec3d(pos.x - gun_offset.x, pos.y - gun_offset.y, 1);
- double distance_2 = pos2.distance(new Vec3d(pos.x, pos.y, pos2.z));
- double angle2_0 = Math.toDegrees(Math.atan2(pos2.x - Main.player.pos.x, pos2.y - Main.player.pos.y)) + 180;
- double angle2_1 = Math.toDegrees(Math.atan2(distance_2, pos2.z - 1)) - 90;
-
- layer.spawnEntity(new EntityBullet(pos.add(gun_offset), this, angle1_0, 20, 1000
- ).withHeight(angle1_1, pos1.z));
- layer.spawnEntity(new EntityBullet(pos.subtract(gun_offset), this, angle2_0, 20, 1000
- ).withHeight(angle2_1, pos2.z));
+ if(bullet_frequency == 0) {
+ chunk.spawnEntity(new EntityBullet(bpos, bpos.subtract(ppos).normalize(), this, 20, 1000));
bullet_frequency = 10;
}
@@ -228,7 +214,7 @@ public class EntityBoss extends Entity implements IBossBar, EntityKillWithPartic
}
public void moveTowards(double angle) {
- this.moveTowards(angle, 0.02);
+ this.push(MathHelpers.moveTowards2(0.01, Math.toRadians(angle)).xny());
}
@Override
@@ -248,16 +234,12 @@ public class EntityBoss extends Entity implements IBossBar, EntityKillWithPartic
}
// Spawn the loot
- layer.spawnEntity(new EntityItem(pos.copy(), stack));
- layer.spawnEntity(new EntityItem(pos.copy(), new ItemStack(
+ layer.spawnEntity(new EntityItem(getPos(), getVelocity(), stack));
+ layer.spawnEntity(new EntityItem(getPos(), getVelocity(), new ItemStack(
Items.HEALTH_POTION, RandomHelpers.randrange(rand, 20), (byte)50)));
- layer.spawnEntity(new EntityItem(pos.copy(), new ItemStack(
+ layer.spawnEntity(new EntityItem(getPos(), getVelocity(), new ItemStack(
Items.AMMO, RandomHelpers.randrange(rand, 200), (byte)50)));
- layer.spawnEntity(new EntityItem(pos.copy(), new ItemStack(Items.GRAPPLING_HOOK, 1, (byte)2)));
- }
-
- @Override
- public void push(double amount, double angle) {
+ layer.spawnEntity(new EntityItem(getPos(), getVelocity(), new ItemStack(Items.GRAPPLING_HOOK, 1, (byte)2)));
}
@Override
diff --git a/src/projectzombie/entity/EntityBullet.java b/src/projectzombie/entity/EntityBullet.java
index b333c94..0fc5b97 100755
--- a/src/projectzombie/entity/EntityBullet.java
+++ b/src/projectzombie/entity/EntityBullet.java
@@ -23,11 +23,6 @@ public class EntityBullet extends EntityParticle
private double damage;
- private double height = 0.2;
- private double height_angle = 0;
- private double angle = 0;
- private Vec3d velocity;
-
public EntityBullet(BdfObject bdf) {
super(bdf);
}
@@ -39,10 +34,6 @@ public class EntityBullet extends EntityParticle
BdfNamedList nl = bdf.getNamedList();
time = nl.get("time").getInteger();
damage = nl.get("damage").getDouble();
- height = nl.get("height").getDouble();
- height_angle = nl.get("angle_h").getDouble();
- angle = nl.get("angle").getDouble();
- velocity = new Vec3d(nl.get("velocity"));
}
@Override
@@ -52,62 +43,31 @@ public class EntityBullet extends EntityParticle
BdfNamedList nl = bdf.getNamedList();
nl.set("time", BdfObject.withInteger(time));
nl.set("damage", BdfObject.withDouble(damage));
- nl.set("height", BdfObject.withDouble(height));
- nl.set("angle_h", BdfObject.withDouble(height_angle));
- nl.set("angle", BdfObject.withDouble(angle));
- velocity.BdfClassSave(nl.get("velocity"));
}
- public EntityBullet(Vec2d pos, Entity parent, double angle, double damage, int despawn_time) {
- super(pos);
+ public EntityBullet(Vec3d pos, Vec3d velocity, Entity parent, double damage, int despawn_time) {
+ super(pos, velocity);
// Store some specified values
- this.angle = angle;
this.parent = parent;
this.damage = damage;
this.time = despawn_time;
-
- // Calculate the velocity vector
- this.velocity = MathHelpers.moveTowards3(0.2, new Vec2d(
- Math.toRadians(this.angle), Math.toRadians(this.height_angle)));
+ this.gravity = false;
// Play the gun sound
- Sounds.GUN.play(new Vec3d(pos.x, 0.4, pos.y), 2);
- }
-
- public EntityBullet withHeight(double angle, double height) {
- this.height_angle = angle;
- this.height = height;
- this.velocity = MathHelpers.moveTowards3(0.2, new Vec2d(
- Math.toRadians(this.angle), Math.toRadians(this.height_angle)));
- return this;
+ Sounds.GUN.play(pos, 2);
}
@Override
public void tick(Chunk chunk, Layer layer) {
super.tick(chunk, layer);
- // Move forward in the bullets angle, very quickly
- Vec3d pos3 = velocity.add(new Vec3d(pos.x, pos.y, height));
- height = pos3.z;
-
- if(moveIsLegal(new Vec2d(pos3.x, pos.y))) {
- pos.x = pos3.x;
- } if(moveIsLegal(new Vec2d(pos.x, pos3.x))) {
- pos.y = pos3.y;
- }
-
- if(height < 0 || height > 16) {
- kill();
- return;
- }
-
- chunk = layer.getChunk(pos);
+ chunk = layer.getChunk(getPos().xz());
// Is the bullets new position intersecting a solid object
{
// Get the position of the tile the bullet is over
- Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x), MathHelpers.floor(pos.y));
+ Vec2i tpos = getPos().xz().toInt();
// Get the foreground tile and the background tile
Tile tile_f = chunk.getFrontTile(tpos).tile;
@@ -115,7 +75,7 @@ public class EntityBullet extends EntityParticle
// Is the tile solid and has the bullet crashed into it
if(tile_f.tileSolid) {
- if(pos.squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_f.tileHitbox)
+ if(getPos().xz().squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_f.tileHitbox)
{
// Break the block
if(tile_f instanceof TileBulletBreakable && RandomHelpers.randrange(rand,
@@ -127,7 +87,7 @@ public class EntityBullet extends EntityParticle
kill();
}
} if(tile_b.tileSolid) {
- if(pos.squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_b.tileHitbox)
+ if(getPos().xz().squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_b.tileHitbox)
{
// Break the block
if(tile_f instanceof TileBulletBreakable && RandomHelpers.randrange(rand,
@@ -142,24 +102,26 @@ public class EntityBullet extends EntityParticle
}
// Loop over the nearby entities
- for(Entity e : layer.getNearbyEntities(pos, 1))
+ for(Entity e : layer.getNearbyEntities(getPos().xz(), 1))
{
// Is this entity alive and not the parent
- if(e instanceof EntityAlive && e != parent && e.pos.squareDistance(this.pos) < e.hitbox)
+ if(e instanceof EntityAlive && e != parent && e.getPos().squareDistance(this.getPos()) < e.hitbox)
{
// Get the alive entity
EntityAlive ea = (EntityAlive)e;
- // Knock the entity back abit
- e.push(1, angle);
-
// Spawn some blood particles
if(!EntityParticle.DISABLED) {
- chunk.spawnEntity(new ParticleBlood(pos));
+ chunk.spawnEntity(new ParticleBlood(getPos(), e.getVelocity().add(getVelocity()).divide(8)));
}
+ // Knock the entity back abit
+ e.push(getVelocity());
+
+ Vec3d pos = getPos();
+
// Play the hit noise
- Sounds.HIT.play(new Vec3d(pos.x, pos.y, 0.4), 1);
+ Sounds.HIT.play(new Vec3d(pos.x, pos.y, pos.z), 1);
// Harm the entity
ea.removeHealth(damage);
diff --git a/src/projectzombie/entity/EntityContainer.java b/src/projectzombie/entity/EntityContainer.java
index 98b3d3f..84187f1 100644
--- a/src/projectzombie/entity/EntityContainer.java
+++ b/src/projectzombie/entity/EntityContainer.java
@@ -4,6 +4,7 @@ import bdf.types.BdfArray;
import bdf.types.BdfNamedList;
import bdf.types.BdfObject;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.init.Models;
import projectzombie.model.Model;
import projectzombie.world.chunk.Chunk;
@@ -17,8 +18,8 @@ public class EntityContainer extends Entity implements EntityHoldsEntities
super(bdf);
}
- public EntityContainer(Vec2d pos, Entity[] entities) {
- super(pos);
+ public EntityContainer(Vec3d pos, Vec3d velocity, Entity[] entities) {
+ super(pos, velocity);
this.entities = entities;
}
diff --git a/src/projectzombie/entity/EntityDummy.java b/src/projectzombie/entity/EntityDummy.java
index 8f45c6f..0a1b84d 100755
--- a/src/projectzombie/entity/EntityDummy.java
+++ b/src/projectzombie/entity/EntityDummy.java
@@ -2,6 +2,7 @@ package projectzombie.entity;
import bdf.types.BdfObject;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.init.Models;
import projectzombie.model.Model;
@@ -11,8 +12,8 @@ public class EntityDummy extends Entity implements EntityAlive
super(bdf);
}
- public EntityDummy(Vec2d pos) {
- super(pos);
+ public EntityDummy(Vec3d pos, Vec3d velocity) {
+ super(pos, velocity);
this.hitbox = 0.5;
this.isSolid = true;
diff --git a/src/projectzombie/entity/EntityExplosion.java b/src/projectzombie/entity/EntityExplosion.java
index 7b9eeb8..80cdfc7 100755
--- a/src/projectzombie/entity/EntityExplosion.java
+++ b/src/projectzombie/entity/EntityExplosion.java
@@ -26,8 +26,8 @@ public class EntityExplosion extends Entity
super(bdf);
}
- public EntityExplosion(Vec2d pos, int radius, double damage) {
- super(pos);
+ public EntityExplosion(Vec3d pos, int radius, double damage) {
+ super(pos, new Vec3d(0, 0, 0));
this.damage = damage;
this.radius = radius;
}
@@ -55,6 +55,7 @@ public class EntityExplosion extends Entity
super.tick(chunk, layer);
boolean killed_entities = false;
+ Vec2d pos = getPos().xy();
// Kill all the nearby entities
for(Entity e : layer.getNearbyEntities(pos, radius))
@@ -66,7 +67,7 @@ public class EntityExplosion extends Entity
// Remove some health from the entity based on were the entity is
killed_entities = true;
- double distance = e.pos.distance(pos);
+ double distance = e.getPos().distance(getPos());
if(distance == 0) {
ea.removeHealth(damage);
@@ -126,17 +127,17 @@ public class EntityExplosion extends Entity
// Spawn some blood if entities were killed
if(killed_entities)
- entities[upto + 1] = new ParticleBlood(new Vec2d(px, py));
+ entities[upto + 1] = new ParticleBlood(new Vec3d(px, 0, py), new Vec3d(0, 0, 0));
// Spawn some smoke
- entities[upto] = new ParticleSmoke(new Vec2d(px, py));
+ entities[upto] = new ParticleSmoke(new Vec3d(px, 0, py), new Vec3d(0, 0, 0));
upto += multiplier;
}
}
}
- layer.spawnEntity(new EntityContainer(pos, entities));
+ layer.spawnEntity(new EntityContainer(getPos(), getVelocity(), entities));
// Play the explosion sound
Sounds.EXPLOSION.play(new Vec3d(pos.x, pos.y, 0), 1);
diff --git a/src/projectzombie/entity/EntityFlare.java b/src/projectzombie/entity/EntityFlare.java
index 801259f..64ef3c5 100755
--- a/src/projectzombie/entity/EntityFlare.java
+++ b/src/projectzombie/entity/EntityFlare.java
@@ -2,6 +2,7 @@ package projectzombie.entity;
import bdf.types.BdfObject;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.init.Models;
import projectzombie.model.Model;
import projectzombie.world.layer.Layer;
@@ -16,8 +17,8 @@ public class EntityFlare extends EntityTnt
protected void explode(Layer layer) {
}
- public EntityFlare(Vec2d pos, double angle) {
- super(pos, angle, 0, 0);
+ public EntityFlare(Vec3d pos, Vec3d velocity, double angle) {
+ super(pos, velocity, angle, 0, 0);
this.explode_time = 2000;
this.emitsLight = true;
diff --git a/src/projectzombie/entity/EntityGrapplingHook.java b/src/projectzombie/entity/EntityGrapplingHook.java
index a3900f8..df083ee 100755
--- a/src/projectzombie/entity/EntityGrapplingHook.java
+++ b/src/projectzombie/entity/EntityGrapplingHook.java
@@ -3,6 +3,7 @@ package projectzombie.entity;
import bdf.types.BdfNamedList;
import bdf.types.BdfObject;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.Main;
import projectzombie.entity.player.EntityPlayer;
import projectzombie.init.Models;
@@ -39,8 +40,8 @@ public class EntityGrapplingHook extends Entity
nl.set("height", BdfObject.withDouble(height));
}
- public EntityGrapplingHook(Vec2d pos, int layerId, Entity entity) {
- super(pos);
+ public EntityGrapplingHook(Vec3d pos, int layerId, Entity entity) {
+ super(pos, new Vec3d(0, 0, 0));
this.layerId = layerId;
this.height = -16;
@@ -56,49 +57,47 @@ public class EntityGrapplingHook extends Entity
public void tick(Chunk chunk, Layer layer) {
super.tick(chunk, layer);
- if(entity instanceof EntityHeight) {
- EntityHeight ea = (EntityHeight)entity;
+ if(height >= -8)
+ {
+ Vec3d epos = entity.getPos();
- if(height >= -8)
+ double h = epos.y;
+ epos.y += 0.02;
+
+ if(entity instanceof EntityPlayer) {
+ EntityPlayer ep = (EntityPlayer)entity;
+ ep.moving = true;
+ }
+
+ if(h >= 8)
{
- double h = ea.getHeight();
- ea.setHeight(h + 0.02);
+ epos.y = 0;
+ Main.world.setLayer(layerId);
- if(entity instanceof EntityPlayer) {
- EntityPlayer ep = (EntityPlayer)entity;
- ep.moving = true;
+ if(layer.layergen.destroyOnLeave) {
+ Main.world.removeLayer(layerId);
}
- if(h >= 8)
+ if(entity instanceof EntityPlayer)
{
- ea.setHeight(0);
- Main.world.setLayer(layerId);
-
- if(layer.layergen.destroyOnLeave) {
- Main.world.removeLayer(layerId);
- }
-
- if(entity instanceof EntityPlayer)
- {
- EntityPlayer ep = (EntityPlayer)entity;
- ep.in_animation = false;
- ep.moving = false;
- }
-
-
- if(layer.layergen instanceof LayerGenRememberPlayerPos) {
- LayerGenRememberPlayerPos lgrpp = (LayerGenRememberPlayerPos)layer.layergen;
- entity.pos = lgrpp.getPlayerPos();
- }
-
- kill();
- return;
+ EntityPlayer ep = (EntityPlayer)entity;
+ ep.in_animation = false;
+ ep.moving = false;
}
+
+
+ if(layer.layergen instanceof LayerGenRememberPlayerPos) {
+ LayerGenRememberPlayerPos lgrpp = (LayerGenRememberPlayerPos)layer.layergen;
+ entity.setPos(lgrpp.getPlayerPos());
+ }
+
+ kill();
+ return;
}
-
- else {
- height += 0.05;
- }
+ }
+
+ else {
+ height += 0.05;
}
}
diff --git a/src/projectzombie/entity/EntityHeight.java b/src/projectzombie/entity/EntityHeight.java
deleted file mode 100644
index 58229f2..0000000
--- a/src/projectzombie/entity/EntityHeight.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package projectzombie.entity;
-
-public interface EntityHeight
-{
- public double getHeight();
- public void setHeight(double height);
-}
diff --git a/src/projectzombie/entity/EntityItem.java b/src/projectzombie/entity/EntityItem.java
index 634d4a2..eaedb49 100755
--- a/src/projectzombie/entity/EntityItem.java
+++ b/src/projectzombie/entity/EntityItem.java
@@ -2,33 +2,21 @@ package projectzombie.entity;
import bdf.types.BdfNamedList;
import bdf.types.BdfObject;
+import gl_engine.MathHelpers;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.model.Model;
import projectzombie.util.math.ItemStack;
import projectzombie.util.math.random.RandomHelpers;
import projectzombie.world.chunk.Chunk;
import projectzombie.world.layer.Layer;
-public class EntityItem extends Entity implements EntityHeight
+public class EntityItem extends Entity
{
private ItemStack stack;
- private double height = 0;
- private double height_speed;
private int pickup_time = 200;
private long age = 0;
- public double angle;
-
- @Override
- public double getHeight() {
- return height;
- }
-
- @Override
- public void setHeight(double height) {
- this.height = height;
- }
-
public EntityItem(BdfObject bdf) {
super(bdf);
}
@@ -38,12 +26,11 @@ public class EntityItem extends Entity implements EntityHeight
super.BdfClassLoad(bdf);
BdfNamedList nl = bdf.getNamedList();
+
stack = new ItemStack(nl.get("stack"));
- height = nl.get("height").getDouble();
- height_speed = nl.get("speed_h").getDouble();
+
pickup_time = nl.get("pickup").getInteger();
age = nl.get("age").getLong();
- angle = nl.get("angle").getDouble();
}
@Override
@@ -51,21 +38,24 @@ public class EntityItem extends Entity implements EntityHeight
super.BdfClassSave(bdf);
BdfNamedList nl = bdf.getNamedList();
+
stack.BdfClassSave(nl.get("stack"));
- nl.set("height", BdfObject.withDouble(height));
- nl.set("speed_h", BdfObject.withDouble(height_speed));
+
nl.set("pickup", BdfObject.withInteger(pickup_time));
nl.set("age", BdfObject.withLong(age));
- nl.set("angle", BdfObject.withDouble(angle));
}
- public EntityItem(Vec2d pos, ItemStack stack) {
- super(pos);
+ public EntityItem(Vec3d pos, Vec3d velocity, ItemStack stack, double angle) {
+ super(pos, velocity);
this.emitsLight = true;
this.stack = stack;
- this.angle = RandomHelpers.randrange(rand, 360);
- height_speed = RandomHelpers.randrange(rand, 10000) / 200000.0;
+
+ push(new Vec3d(MathHelpers.moveTowards2(0.025, angle), 0.025));
+ }
+
+ public EntityItem(Vec3d pos, Vec3d velocity, ItemStack stack) {
+ this(pos, velocity, stack, rand.nextDouble() * MathHelpers.TWO_PI);
}
@Override
@@ -80,24 +70,8 @@ public class EntityItem extends Entity implements EntityHeight
age += 1;
- height += height_speed;
- height_speed -= 0.001;
-
- pickup_time -= 1;
- if(pickup_time < 0) {
- pickup_time = 0;
- }
-
- if(height <= 0) {
- height_speed = 0;
- }
-
- else {
- moveTowards(angle, 0.01);
- }
-
// Merge nearby stacks
- for(Entity e : layer.getNearbyEntities(pos, 1))
+ for(Entity e : layer.getNearbyEntities(getPos().xz(), 1))
{
if(e instanceof EntityItem && e != this) {
EntityItem ei = (EntityItem) e;
@@ -109,11 +83,8 @@ public class EntityItem extends Entity implements EntityHeight
) {
this.pickup_time = 200;
this.stack.count += ei.stack.count;
- this.pos = new Vec2d(
- ei.pos.x / 2 + this.pos.x / 2,
- ei.pos.y / 2 + this.pos.y / 2);
- this.height = ei.height / 2 + this.height / 2;
- this.height_speed = ei.height_speed / 2 + this.height_speed / 2;
+ setPos(ei.getPos().divide(2).add(getPos().divide(2)));
+ setVelocity(ei.getVelocity().divide(2).add(getVelocity().divide(2)));
ei.kill();
}
}
@@ -121,7 +92,7 @@ public class EntityItem extends Entity implements EntityHeight
if(pickup_time == 0)
{
- for(Entity e : layer.getNearbyEntities(pos, 1))
+ for(Entity e : layer.getNearbyEntities(getPos().xz(), 1))
{
if(e instanceof EntityInventory)
{
diff --git a/src/projectzombie/entity/EntityParticle.java b/src/projectzombie/entity/EntityParticle.java
index c09e948..5286aa5 100755
--- a/src/projectzombie/entity/EntityParticle.java
+++ b/src/projectzombie/entity/EntityParticle.java
@@ -3,6 +3,7 @@ package projectzombie.entity;
import bdf.types.BdfObject;
import gl_engine.texture.TextureRef3D;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.Main;
import projectzombie.world.chunk.Chunk;
import projectzombie.world.layer.Layer;
@@ -16,8 +17,8 @@ public abstract class EntityParticle extends Entity
super(bdf);
}
- public EntityParticle(Vec2d pos) {
- super(pos);
+ public EntityParticle(Vec3d pos, Vec3d velocity) {
+ super(pos, velocity);
}
@Override
@@ -25,6 +26,6 @@ public abstract class EntityParticle extends Entity
super.tick(chunk, layer);
// Kill the particle if the player can't see it to reduce lag
- if(Main.player.pos.squareDistance(pos) > Chunk.RENDER_DISTANCE * 16) this.kill();
+ if(Main.player.getPos().squareDistance(getPos()) > Chunk.RENDER_DISTANCE * 16) this.kill();
}
}
diff --git a/src/projectzombie/entity/EntityTnt.java b/src/projectzombie/entity/EntityTnt.java
index 6043c1f..8cb2745 100755
--- a/src/projectzombie/entity/EntityTnt.java
+++ b/src/projectzombie/entity/EntityTnt.java
@@ -11,11 +11,9 @@ import projectzombie.model.Model;
import projectzombie.world.chunk.Chunk;
import projectzombie.world.layer.Layer;
-public class EntityTnt extends Entity implements EntityHeight, EntityHoldsEntities
+public class EntityTnt extends Entity implements EntityHoldsEntities
{
protected boolean active = true;
- protected double height = 0.4;
- protected Vec3d velocity;
protected int explode_time;
private int explode_radius;
private double explode_damage;
@@ -26,16 +24,6 @@ public class EntityTnt extends Entity implements EntityHeight, EntityHoldsEntiti
return smoke_particles;
}
- @Override
- public double getHeight() {
- return height;
- }
-
- @Override
- public void setHeight(double height) {
- this.height = height;
- }
-
public EntityTnt(BdfObject bdf) {
super(bdf);
@@ -47,9 +35,6 @@ public class EntityTnt extends Entity implements EntityHeight, EntityHoldsEntiti
super.BdfClassLoad(bdf);
BdfNamedList nl = bdf.getNamedList();
- height = nl.get("height").getDouble();
- velocity = new Vec3d(nl.get("velocity"));
-
BdfNamedList explode = nl.get("explosion").getNamedList();
explode_time = explode.get("time").getInteger();
explode_radius = explode.get("radius").getInteger();
@@ -61,20 +46,17 @@ public class EntityTnt extends Entity implements EntityHeight, EntityHoldsEntiti
super.BdfClassSave(bdf);
BdfNamedList nl = bdf.getNamedList();
- nl.set("height", BdfObject.withDouble(height));
- velocity.BdfClassSave(nl.get("velocity"));
-
BdfNamedList explode = nl.get("explosion").getNamedList();
explode.set("time", BdfObject.withInteger(explode_time));
explode.set("radius", BdfObject.withInteger(explode_radius));
explode.set("damage", BdfObject.withDouble(explode_damage));
}
- public EntityTnt(Vec2d pos, double angle, int explode_radius, double explode_damage) {
- super(pos);
+ public EntityTnt(Vec3d pos, Vec3d velocity, double angle, int explode_radius, double explode_damage) {
+ super(pos, velocity);
Vec2d v = MathHelpers.moveTowards2(0.05, Math.toRadians(angle));
- velocity = new Vec3d(v.x, v.y, 0.01);
+ velocity = velocity.add(new Vec3d(v.x, v.y, 0.01));
this.explode_radius = explode_radius;
this.crossUnWalkable = true;
this.goThroughSolid = false;
@@ -87,7 +69,7 @@ public class EntityTnt extends Entity implements EntityHeight, EntityHoldsEntiti
protected void explode(Layer layer)
{
- layer.spawnEntity(new EntityExplosion(pos, explode_radius, explode_damage));
+ layer.spawnEntity(new EntityExplosion(getPos(), explode_radius, explode_damage));
}
@Override
@@ -119,30 +101,6 @@ public class EntityTnt extends Entity implements EntityHeight, EntityHoldsEntiti
return;
}
- // Create a downward gravitational pull
- height += velocity.z;
- velocity.z -= 0.001;
-
- // Move forwards
- Vec2d pos_copy = pos.copy();
- pos.x += velocity.x;
- pos.y += velocity.y;
-
- if(!moveIsLegal(new Vec2d(pos.x, pos_copy.y))) {
- pos.x = pos_copy.x;
- velocity.x *= -1;
- }
- if(!moveIsLegal(new Vec2d(pos_copy.x, pos.y))) {
- pos.y = pos_copy.y;
- velocity.y *= -1;
- }
-
- // Make the tnt bounce on the ground
- if(height < 0) {
- height = 0;
- velocity.z *= -1;
- }
-
// Explode if it is time for the tnt to blow up
explode_time -= 1;
if(explode_time < 0) {
@@ -150,7 +108,7 @@ public class EntityTnt extends Entity implements EntityHeight, EntityHoldsEntiti
explode(layer);
}
- smoke_particles[dead_particle] = new ParticleSpark(new Vec3d(pos, height + 1));
+ smoke_particles[dead_particle] = new ParticleSpark(getPos().add(new Vec3d(0, 1, 0)));
}
@Override
diff --git a/src/projectzombie/entity/EntityZombie.java b/src/projectzombie/entity/EntityZombie.java
index 741c77e..aca4fd6 100755
--- a/src/projectzombie/entity/EntityZombie.java
+++ b/src/projectzombie/entity/EntityZombie.java
@@ -4,8 +4,10 @@ import java.util.Random;
import bdf.types.BdfNamedList;
import bdf.types.BdfObject;
+import gl_engine.MathHelpers;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import projectzombie.Main;
import projectzombie.init.Models;
import projectzombie.model.Model;
@@ -31,7 +33,7 @@ public class EntityZombie extends Entity implements EntityAlive, EntityKillWithP
protected int gun_interval = 0;
protected int gun_level = 0;
- private Vec2i walk_direction;
+ private Vec3d walk_to;
private int walk_scan_cooldown = 0;
private boolean can_see_player = false;
private int walking_for = 0;
@@ -81,8 +83,8 @@ public class EntityZombie extends Entity implements EntityAlive, EntityKillWithP
}
- public EntityZombie(Vec2d pos) {
- super(pos);
+ public EntityZombie(Vec3d pos, Vec3d velocity) {
+ super(pos, velocity);
seed = rand.nextLong();
Random rand = new Random(seed);
@@ -107,62 +109,58 @@ public class EntityZombie extends Entity implements EntityAlive, EntityKillWithP
//System.out.println(walk_direction != null ? (walk_direction.x + ", " + walk_direction.y + ": " + pos.toInt().x + ", " + pos.toInt().y) : "null");
- if(walk_direction == null) {
+ if(walk_to == null) {
walk_scan_cooldown -= 1;
}
- double player_distance = pos.squareDistance(Main.player.pos);
+ double player_distance = getPos().squareDistance(Main.player.getPos());
// Only pathfind if in range of the player
if(player_distance < 16)
{
if(
- (walk_direction != null && pos.toInt().equal(walk_direction) &&
+ (walk_to != null && getPos().toInt().equal(walk_to.toInt()) &&
player_distance > 2) || walk_scan_cooldown < 1 || walking_for > 200)
{
- AStar astar = new AStar(pos.toInt(), 16, new AStarSearcher(layer, crossUnWalkable));
- Vec2i path[] = astar.getPath(Main.player.pos.toInt());
+ AStar astar = new AStar(getPos().xz().toInt(), 16, new AStarSearcher(layer, crossUnWalkable));
+ Vec2i path[] = astar.getPath(Main.player.getPos().xz().toInt());
walk_scan_cooldown = 100;
walking_for = 0;
if(path != null && path.length > 1) {
- walk_direction = path[1];
+ walk_to = new Vec3d(path[0].x, 0, path[0].y);
} else {
- walk_direction = Main.player.pos.toInt();
+ walk_to = null;
}
can_see_player = (path != null);
}
// Walk towards the player
- if(walk_direction != null)
+ if(walk_to != null)
{
- double angle = Math.toDegrees(Math.atan2(
- walk_direction.x - (this.pos.x - 0.5) + noise_target_x.eval(time, pos.x/10, pos.y/10),
- walk_direction.y - (this.pos.y - 0.5) + noise_target_y.eval(time, pos.x/10, pos.y/10)));
- this.moveTowards(angle);
+ push(walk_to.subtract(getPos()).normalize().multiply(0.016));
+
+ if(Double.isNaN(walk_to.x + walk_to.y + walk_to.z + getPos().x + getPos().y + getPos().z + getVelocity().x + getVelocity().y + getVelocity().z)) {
+ Double.isFinite(0);
+ }
walking_for += 1;
}
if(can_see_player && noise_gun_fire.eval(time, 0) > 0 && !Main.player.dead && !Main.player.in_animation)
{
- // Get the angle between the player and the zombie
- double angle_fire = Math.atan2(pos.x - Main.player.pos.x, pos.y - Main.player.pos.y);
-
gun_interval += 1;
gun_interval %= 10;
if(gun_interval == 0)
{
- // Aim the gun at the player
- double angle_gun = Math.toDegrees(angle_fire) + 180;
- angle_gun += noise_gun_angle.eval(time, 0)*20;
-
// Fire the gun
int d = (int)(1 + gun_level / 5.0);
- layer.spawnEntity(new EntityBullet(pos.copy(), this, angle_gun, 20*d*d, 60));
+ Vec3d bullet_velocity = getVelocity().add(Main.player.getPos().subtract(getPos())).normalize().multiply(0.2);
+ Vec3d bullet_pos = getPos().add(new Vec3d(0, 0.4, 0));
+ //Main.world.getLayer().spawnEntity(new EntityBullet(bullet_pos, bullet_velocity, this, 20*d*d, 60));
}
}
}
@@ -176,14 +174,6 @@ public class EntityZombie extends Entity implements EntityAlive, EntityKillWithP
return Models.ENTITY_ZOMBIE_F;
}
- public void moveInVector(Vec2d vec) {
- super.moveInVector(vec, 0.06);
- }
-
- public void moveTowards(double angle) {
- super.moveTowards(angle, 0.06);
- }
-
@Override
public void addHealth(double amount) {
health += amount;
diff --git a/src/projectzombie/entity/EntityZombieArmored.java b/src/projectzombie/entity/EntityZombieArmored.java
index 724920a..6fd90e4 100755
--- a/src/projectzombie/entity/EntityZombieArmored.java
+++ b/src/projectzombie/entity/EntityZombieArmored.java
@@ -2,6 +2,7 @@ package projectzombie.entity;
import bdf.types.BdfObject;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.init.Models;
import projectzombie.model.Model;
@@ -11,8 +12,8 @@ public class EntityZombieArmored extends EntityZombie
super(bdf);
}
- public EntityZombieArmored(Vec2d pos) {
- super(pos);
+ public EntityZombieArmored(Vec3d pos, Vec3d velocity) {
+ super(pos, velocity);
this.health_max *= 5;
this.health = this.health_max;
this.gun_level = 3;
diff --git a/src/projectzombie/entity/particle/ParticleBlood.java b/src/projectzombie/entity/particle/ParticleBlood.java
index e6e5c14..6d4441c 100755
--- a/src/projectzombie/entity/particle/ParticleBlood.java
+++ b/src/projectzombie/entity/particle/ParticleBlood.java
@@ -1,16 +1,22 @@
package projectzombie.entity.particle;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.init.Models;
public class ParticleBlood extends ParticleBreak
{
- public ParticleBlood(Vec2d pos, int size) {
- super(pos, Models.PARTICLE_BLOOD, size, 0.1);
+ public ParticleBlood(Vec3d pos, Vec3d velocity, int size) {
+ super(pos, velocity, Models.PARTICLE_BLOOD, size, 0.1);
}
- public ParticleBlood(Vec2d pos) {
- this(pos, 200);
+ public ParticleBlood(Vec3d pos, Vec3d velocity) {
+ this(pos, velocity, 400);
+ }
+
+ @Override
+ public Vec2d getParticleSize() {
+ return new Vec2d(0.05, 0.05);
}
}
diff --git a/src/projectzombie/entity/particle/ParticleBreak.java b/src/projectzombie/entity/particle/ParticleBreak.java
index 1d0d049..e0f59c4 100755
--- a/src/projectzombie/entity/particle/ParticleBreak.java
+++ b/src/projectzombie/entity/particle/ParticleBreak.java
@@ -12,6 +12,7 @@ import gl_engine.MathHelpers;
import gl_engine.matrix.Matrix4;
import gl_engine.texture.TextureRef3D;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec2i;
import gl_engine.vec.Vec3d;
import projectzombie.Main;
import projectzombie.entity.EntityParticle;
@@ -31,24 +32,29 @@ public class ParticleBreak extends EntityParticle implements IModel
Vec3d pos;
boolean moving;
int flags;
- int life;
}
private Break[] particles;
private int ibo, vbo, vao;
private boolean generated;
- private int dead;
+ private int dead, still, time;
- public ParticleBreak(Vec2d pos, IModel model) {
- this(pos, model, 200, 0.05);
+ public Vec2d getParticleSize() {
+ return new Vec2d(0.1, 0.1);
}
- public ParticleBreak(Vec2d pos, IModel model, int count) {
- this(pos, model, count, 0.05);
+ public ParticleBreak(Vec3d pos, Vec3d velocity, IModel model) {
+ this(pos, velocity, model, 200, 0.05);
}
- protected ParticleBreak(Vec2d pos, IModel model, int count, double velocity_up_multiplier) {
- super(pos);
+ public ParticleBreak(Vec3d pos, Vec3d velocity, IModel model, int count) {
+ this(pos, velocity, model, count, 0.05);
+ }
+
+ protected ParticleBreak(Vec3d pos, Vec3d velocity, IModel model, int count, double velocity_up_multiplier) {
+ super(pos, new Vec3d(0, 0, 0));
+
+ this.gravity = false;
double model_height = model.getHeight();
TextureRef3D[] textures = model.getTextures();
@@ -78,11 +84,10 @@ public class ParticleBreak extends EntityParticle implements IModel
ref.texmap = texture.texmap;
ref.z = texture.z;
- particle.life = (int)(rand.nextDouble() * 200 + 800);
- particle.pos = new Vec3d(pos, rand.nextDouble() * model_height);
- particle.velocity = new Vec3d(
- MathHelpers.moveTowards2(0.01, rand.nextDouble() * MathHelpers.TWO_PI),
- rand.nextDouble() * velocity_up_multiplier);
+ particle.pos = pos.add(new Vec3d(0, rand.nextDouble() * model_height, 0));
+ particle.velocity = velocity.multiply(rand.nextDouble()).add(
+ MathHelpers.moveTowards2(0.01, rand.nextDouble() * MathHelpers.TWO_PI).xny().add(
+ new Vec3d(0, rand.nextDouble() * velocity_up_multiplier, 0)));
particle.ref = ref;
particle.moving = true;
particle.flags = (int)verticies[tex_id * Model.SIZE + Model.SIZE - 1] | 0b1000;
@@ -90,7 +95,9 @@ public class ParticleBreak extends EntityParticle implements IModel
particles[i] = particle;
}
+ time = 1000;
generated = false;
+ still = 0;
dead = 0;
}
@@ -98,37 +105,44 @@ public class ParticleBreak extends EntityParticle implements IModel
public void tick(Chunk chunk, Layer layer) {
super.tick(chunk, layer);
- dead = 0;
-
- for(int i=0;i 0.75) {
+ dead += 1;
+ }
+ return;
+ }
+
+ for(int i=0;i 32 || opacity <= 0 || height > 16) {
+ if(getPos().squareDistance(Main.player.getPos()) > 32 || opacity <= 0 || getPos().y > 16) {
kill();
}
- height += height_speed;
opacity -= disappear_speed;
if(DISABLED) {
diff --git a/src/projectzombie/entity/particle/ParticleSpark.java b/src/projectzombie/entity/particle/ParticleSpark.java
index 17cb310..6716b67 100755
--- a/src/projectzombie/entity/particle/ParticleSpark.java
+++ b/src/projectzombie/entity/particle/ParticleSpark.java
@@ -3,40 +3,24 @@ package projectzombie.entity.particle;
import java.util.Random;
import gl_engine.vec.Vec3d;
-import projectzombie.entity.EntityHeight;
import projectzombie.entity.EntityParticle;
import projectzombie.init.Models;
import projectzombie.model.Model;
import projectzombie.world.chunk.Chunk;
import projectzombie.world.layer.Layer;
-public class ParticleSpark extends EntityParticle implements EntityHeight
+public class ParticleSpark extends EntityParticle
{
private int time;
- private double height;
- private Vec3d velocity;
private static final Random rand = new Random();
-
- @Override
- public double getHeight() {
- return height;
- }
-
- @Override
- public void setHeight(double height) {
- this.height = height;
- }
public ParticleSpark(Vec3d pos) {
- super(pos.xy());
-
- velocity = new Vec3d(
+ super(pos, new Vec3d(
rand.nextDouble() * 0.02 - 0.01,
rand.nextDouble() * 0.02 - 0.01,
- rand.nextDouble() * 0.02);
+ rand.nextDouble() * 0.02));
- height = pos.z;
time = 100;
}
@@ -44,9 +28,7 @@ public class ParticleSpark extends EntityParticle implements EntityHeight
public void tick(Chunk chunk, Layer layer) {
super.tick(chunk, layer);
- // Reduce the size
- pos = pos.add(velocity.xy());
- height += velocity.z;
+ // Reduce the time
time -= 1;
// Kill if at the end of life
diff --git a/src/projectzombie/entity/particle/ParticleWater.java b/src/projectzombie/entity/particle/ParticleWater.java
index cc2e5dc..76a7dbb 100755
--- a/src/projectzombie/entity/particle/ParticleWater.java
+++ b/src/projectzombie/entity/particle/ParticleWater.java
@@ -5,7 +5,6 @@ import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec3d;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityContainer;
-import projectzombie.entity.EntityHeight;
import projectzombie.entity.EntityParticle;
import projectzombie.init.Models;
import projectzombie.model.IModel;
@@ -15,12 +14,12 @@ import projectzombie.world.layer.Layer;
public class ParticleWater extends ParticleBreak
{
- public ParticleWater(Vec2d pos) {
- this(pos, 50);
+ public ParticleWater(Vec3d pos, Vec3d velocity) {
+ this(pos, velocity, 50);
}
- public ParticleWater(Vec2d pos, int count) {
- super(pos, Models.TILE_WATER, count, 0.01);
+ public ParticleWater(Vec3d pos, Vec3d velocity, int count) {
+ super(pos, velocity, Models.TILE_WATER, count, 0.01);
}
}
diff --git a/src/projectzombie/entity/player/EntityPlayer.java b/src/projectzombie/entity/player/EntityPlayer.java
index efd88c6..00a38c6 100755
--- a/src/projectzombie/entity/player/EntityPlayer.java
+++ b/src/projectzombie/entity/player/EntityPlayer.java
@@ -5,13 +5,13 @@ import bdf.types.BdfObject;
import gl_engine.MathHelpers;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import mainloop.task.IMainloopTask;
import projectzombie.Main;
import projectzombie.display.DisplayLighting;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityAlive;
import projectzombie.entity.EntityBullet;
-import projectzombie.entity.EntityHeight;
import projectzombie.entity.EntityInventory;
import projectzombie.entity.EntityItem;
import projectzombie.entity.particle.ParticleBreak;
@@ -25,7 +25,7 @@ import projectzombie.util.math.ItemStack;
import projectzombie.world.chunk.Chunk;
import projectzombie.world.layer.Layer;
-public class EntityPlayer extends Entity implements EntityAlive, EntityInventory, EntityHeight
+public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
{
public boolean MOVE_FORWARD = false;
public boolean MOVE_BACKWARD = false;
@@ -37,8 +37,6 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
public Model PLAYER_MOVING = Models.ENTITY_PLAYER_B_W_MOVING;
public Model PLAYER_STILL = Models.ENTITY_PLAYER_B_W_STILL;
- public double height = 0;
-
private int bullet_frequency = 0;
private double health_max = 1000;
private double health = health_max;
@@ -54,7 +52,6 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
public int gun_level = 0;
public double angle;
- public double speed;
private Vec2i last_chunk;
@@ -66,7 +63,6 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
public void BdfClassLoad(BdfObject bdf) {
super.BdfClassLoad(bdf);
BdfNamedList nl = bdf.getNamedList();
- height = nl.get("height").getDouble();
bullet_frequency = nl.get("bullet_frequency").getInteger();
health = nl.get("health").getDouble();
dead = nl.get("dead").getBoolean();
@@ -86,7 +82,6 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
public void BdfClassSave(BdfObject bdf) {
super.BdfClassSave(bdf);
BdfNamedList nl = bdf.getNamedList();
- nl.set("height", BdfObject.withDouble(height));
nl.set("bullet_frequency", BdfObject.withInteger(bullet_frequency));
nl.set("health", BdfObject.withDouble(health));
nl.set("dead", BdfObject.withBoolean(dead));
@@ -99,7 +94,7 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
}
public EntityPlayer() {
- super(new Vec2d(0, 0));
+ super(new Vec3d(0, 0, 0), new Vec3d(0, 0, 0));
this.angle = 45;
@@ -109,7 +104,6 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
goThroughSolid = false;
crossUnWalkable = false;
emitsLight = true;
- speed = 0.1;
// Create the inventory
inventory = new Inventory(10);
@@ -141,7 +135,7 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
@Override
public void tick(Chunk chunk, Layer layer)
{
- chunk = layer.getChunk(pos);
+ chunk = layer.getChunk(getPos().xz());
if(chunk != null && chunk.c_pos != null && (last_chunk == null || !chunk.c_pos.equal(last_chunk))) {
last_chunk = chunk.c_pos;
@@ -153,7 +147,7 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
// Handle player deaths
if(health <= 0)
{
- chunk.spawnEntity(new ParticleBreak(pos, getModel()));
+ chunk.spawnEntity(new ParticleBreak(getPos(), getVelocity(), getModel()));
if(Cheats.god_mode) {
this.resetHealth();
@@ -192,8 +186,8 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
super.tick(chunk, layer);
double temp_diff = MathHelpers.biggest(
- layer.layergen.getTemperatureDynamic(layer, pos),
- chunk.getLightLevel(pos.toInt()) * 0.6) - temperature;
+ layer.layergen.getTemperatureDynamic(layer, getPos().xz()),
+ chunk.getLightLevel(getPos().xz().toInt()) * 0.6) - temperature;
temperature += temp_diff / 1000;
hydration -= Math.sqrt(Math.abs(temperature - 0.5)) / 5000;
@@ -247,19 +241,18 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
return;
}
- chunk.spawnEntity(new ParticleBreak(pos, getModel()));
+ chunk.spawnEntity(new ParticleBreak(getPos(), getVelocity(), getModel()));
dead = true;
}
- @Override
public void moveTowards(double angle, double speed) {
if(dead || in_animation) return;
- super.moveTowards(angle, speed);
+ super.push(MathHelpers.moveTowards2(speed, Math.toRadians(angle)).xny());
}
public void moveTowards(double angle) {
- this.moveTowards(angle, 0.08);
+ this.moveTowards(angle, 0.02);
}
public void fireBullet(double angle)
@@ -277,8 +270,9 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
// Summon bullets at this angle relative to the player
int d = (int)(1 + gun_level / 4.0);
- Main.world.getLayer().spawnEntity(new EntityBullet(pos.copy(), this, angle + this.angle,
- 20*d*d, 60).withHeight(0, height));
+ Vec3d bullet_velocity = getVelocity().add(MathHelpers.moveTowards2(0.2, Math.toRadians(angle + this.angle)).xny());
+ Vec3d bullet_pos = getPos().add(new Vec3d(0, 0.4, 0));
+ Main.world.getLayer().spawnEntity(new EntityBullet(bullet_pos, bullet_velocity, this, 20*d*d, 60));
}
}
@@ -340,32 +334,17 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
if(!i.isEmpty())
{
- EntityItem e = new EntityItem(pos.copy(), new ItemStack(i.item, 1, i.meta));
- e.angle = angle;
+ EntityItem e = new EntityItem(getPos(), getVelocity(), new ItemStack(i.item, 1, i.meta), Math.toRadians(angle));
Main.world.getLayer().spawnEntity(e);
i.count -= 1;
}
}
- @Override
- public void push(double amount, double angle) {
- }
-
@Override
public int bloodParticles() {
return 12;
}
- @Override
- public double getHeight() {
- return height;
- }
-
- @Override
- public void setHeight(double height) {
- this.height = height;
- }
-
@Override
public Model getModel() {
return moving ? PLAYER_MOVING : PLAYER_STILL;
diff --git a/src/projectzombie/init/Models.java b/src/projectzombie/init/Models.java
index 373689e..475a471 100755
--- a/src/projectzombie/init/Models.java
+++ b/src/projectzombie/init/Models.java
@@ -50,7 +50,7 @@ public class Models
public static final Model ENTITY_DUMMY = new ModelVertical(Resources.ATLAS.get("/entity/dummy.png"));
public static final Model ENTITY_GRAPPLING_HOOK = new ModelVertical(Resources.ATLAS.get("/entity/grappling_hook.png"));
- public static final Model PARTICLE_BLOOD = new ModelVertical(Resources.ATLAS.get("/particle/blood.png"), new Vec2d(0.1, 0.1));
+ public static final Model PARTICLE_BLOOD = new ModelVertical(Resources.ATLAS.get("/particle/blood.png"), new Vec2d(1, 1));
public static final Model PARTICLE_LAVA = new ModelVertical(Resources.ATLAS.get("/particle/lava.png"), new Vec2d(0.1, 0.1));
public static final Model PARTICLE_WATER = new ModelVertical(Resources.ATLAS.get("/particle/water.png"), new Vec2d(0.1, 0.1));
public static final Model PARTICLE_SMOKE_TRAIL = new ModelVertical(Resources.ATLAS.get("/particle/smoke_trail.png"), new Vec2d(0.1, 0.1));
diff --git a/src/projectzombie/items/ItemFlare.java b/src/projectzombie/items/ItemFlare.java
index 9e7f553..6a5265c 100755
--- a/src/projectzombie/items/ItemFlare.java
+++ b/src/projectzombie/items/ItemFlare.java
@@ -19,7 +19,7 @@ public class ItemFlare extends Item
@Override
public void onPlayerAction(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) {
super.onPlayerAction(stack, layer, chunk, player);
- layer.spawnEntity(new EntityFlare(player.pos.copy(), player.angle));
+ layer.spawnEntity(new EntityFlare(player.getPos(), player.getVelocity(), player.angle));
}
@Override
diff --git a/src/projectzombie/items/ItemGrapplingHook.java b/src/projectzombie/items/ItemGrapplingHook.java
index e7bc0db..7e5aa9c 100755
--- a/src/projectzombie/items/ItemGrapplingHook.java
+++ b/src/projectzombie/items/ItemGrapplingHook.java
@@ -2,6 +2,7 @@ package projectzombie.items;
import gl_engine.MathHelpers;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.EntityGrapplingHook;
import projectzombie.entity.player.EntityPlayer;
import projectzombie.init.Models;
@@ -27,8 +28,7 @@ public class ItemGrapplingHook extends Item
public void onPlayerAction(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) {
super.onPlayerAction(stack, layer, chunk, player);
- Vec2d pos = player.pos.add(MathHelpers.moveTowards2(0.01, Math.toRadians(player.angle)));
- layer.spawnEntity(new EntityGrapplingHook(new Vec2d(pos.x, pos.y), stack.meta, player));
+ layer.spawnEntity(new EntityGrapplingHook(player.getPos(), stack.meta, player));
}
}
diff --git a/src/projectzombie/items/ItemLantern.java b/src/projectzombie/items/ItemLantern.java
index 4d4f218..aea299e 100755
--- a/src/projectzombie/items/ItemLantern.java
+++ b/src/projectzombie/items/ItemLantern.java
@@ -26,7 +26,7 @@ public class ItemLantern extends Item
@Override
public void onPlayerAction(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player)
{
- Vec2i tpos = new Vec2i(MathHelpers.floor(player.pos.x), MathHelpers.floor(player.pos.y));
+ Vec2i tpos = new Vec2i(MathHelpers.floor(player.getPos().x), MathHelpers.floor(player.getPos().z));
if(layer.getFrontTile(tpos).tile == Tiles.VOID) {
layer.setFrontTile(Tiles.LANTERN.getDefaultState(), tpos);
super.onPlayerAction(stack, layer, chunk, player);
diff --git a/src/projectzombie/items/ItemSpawn.java b/src/projectzombie/items/ItemSpawn.java
index e11f622..489b565 100755
--- a/src/projectzombie/items/ItemSpawn.java
+++ b/src/projectzombie/items/ItemSpawn.java
@@ -1,6 +1,7 @@
package projectzombie.items;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.player.EntityPlayer;
import projectzombie.util.math.ItemStack;
import projectzombie.world.chunk.Chunk;
@@ -12,10 +13,10 @@ public abstract class ItemSpawn extends Item
public void onPlayerAction(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) {
super.onPlayerAction(stack, layer, chunk, player);
- this.spawnEntity(layer, chunk, player.pos);
+ this.spawnEntity(layer, chunk, player.getPos(), player.getVelocity());
}
- public void spawnEntity(Layer layer, Chunk chunk, Vec2d pos) {
+ public void spawnEntity(Layer layer, Chunk chunk, Vec3d pos, Vec3d velocity) {
}
}
diff --git a/src/projectzombie/items/ItemTnt.java b/src/projectzombie/items/ItemTnt.java
index c677330..a0bfa2f 100755
--- a/src/projectzombie/items/ItemTnt.java
+++ b/src/projectzombie/items/ItemTnt.java
@@ -24,7 +24,7 @@ public class ItemTnt extends Item
public void onPlayerAction(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) {
super.onPlayerAction(stack, layer, chunk, player);
- layer.spawnEntity(new EntityTnt(player.pos.copy(), player.angle, stack.meta, 5000));
+ layer.spawnEntity(new EntityTnt(player.getPos(), player.getVelocity(), player.angle, stack.meta, 5000));
}
}
diff --git a/src/projectzombie/items/spawner/ItemSpawnDummy.java b/src/projectzombie/items/spawner/ItemSpawnDummy.java
index 3b734f5..f8a3455 100644
--- a/src/projectzombie/items/spawner/ItemSpawnDummy.java
+++ b/src/projectzombie/items/spawner/ItemSpawnDummy.java
@@ -1,6 +1,7 @@
package projectzombie.items.spawner;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.EntityDummy;
import projectzombie.init.Models;
import projectzombie.items.ItemSpawn;
@@ -17,8 +18,8 @@ public class ItemSpawnDummy extends ItemSpawn
}
@Override
- public void spawnEntity(Layer layer, Chunk chunk, Vec2d pos) {
- chunk.spawnEntity(new EntityDummy(new Vec2d(pos.x, pos.y)));
+ public void spawnEntity(Layer layer, Chunk chunk, Vec3d pos, Vec3d velocity) {
+ chunk.spawnEntity(new EntityDummy(pos, velocity));
}
}
diff --git a/src/projectzombie/items/spawner/ItemSpawnZombie.java b/src/projectzombie/items/spawner/ItemSpawnZombie.java
index a48a28d..ec94e19 100755
--- a/src/projectzombie/items/spawner/ItemSpawnZombie.java
+++ b/src/projectzombie/items/spawner/ItemSpawnZombie.java
@@ -1,6 +1,7 @@
package projectzombie.items.spawner;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.EntityZombie;
import projectzombie.init.Models;
import projectzombie.items.ItemSpawn;
@@ -17,8 +18,8 @@ public class ItemSpawnZombie extends ItemSpawn
}
@Override
- public void spawnEntity(Layer layer, Chunk chunk, Vec2d pos) {
- chunk.spawnEntity(new EntityZombie(new Vec2d(pos.x, pos.y)));
+ public void spawnEntity(Layer layer, Chunk chunk, Vec3d pos, Vec3d velocity) {
+ chunk.spawnEntity(new EntityZombie(pos, velocity));
}
}
diff --git a/src/projectzombie/menu/MenuMain.java b/src/projectzombie/menu/MenuMain.java
index cf48022..95a03b6 100755
--- a/src/projectzombie/menu/MenuMain.java
+++ b/src/projectzombie/menu/MenuMain.java
@@ -1,5 +1,6 @@
package projectzombie.menu;
+import gl_engine.vec.Vec3d;
import projectzombie.Main;
import projectzombie.input.types.InputGUI;
import projectzombie.menu.gui.ButtonGroup;
@@ -56,7 +57,8 @@ public class MenuMain extends Menu
Main.player.angle += 0.05;
Main.player.angle %= 360;
- Main.player.pos.x += 0.005;
+
+ Main.player.setPos(new Vec3d(Main.player.getPos().x + 0.005, 0, 0));
}
}
diff --git a/src/projectzombie/menu/MenuSettings.java b/src/projectzombie/menu/MenuSettings.java
index 3ea8b20..9c856d1 100755
--- a/src/projectzombie/menu/MenuSettings.java
+++ b/src/projectzombie/menu/MenuSettings.java
@@ -14,6 +14,7 @@ import projectzombie.menu.gui.components.ButtonBasic;
import projectzombie.menu.gui.components.ButtonSetting;
import projectzombie.menu.gui.components.GUIBackToMenu;
import projectzombie.menu.gui.components.OverlayBackground;
+import projectzombie.settings.Settings;
import projectzombie.world.chunk.Chunk;
public class MenuSettings extends Menu
@@ -41,6 +42,7 @@ public class MenuSettings extends Menu
group.add(new ButtonSetting("FPS: " + (DisplayRenderUI.showFPS ? "On" : "Off"), button -> {
DisplayRenderUI.showFPS = !DisplayRenderUI.showFPS;
button.setText("FPS: " + (DisplayRenderUI.showFPS ? "On" : "Off"));
+ Settings.update();
}));
group.add(new ButtonSetting("Pos Indicator: " + (DisplayRenderUI.showPos ? "On" : "Off"),
@@ -48,6 +50,7 @@ public class MenuSettings extends Menu
{
DisplayRenderUI.showPos = !DisplayRenderUI.showPos;
button.setText("Pos Indicator: " + (DisplayRenderUI.showPos ? "On" : "Off"));
+ Settings.update();
}));
group.add(new ButtonSetting("Render Distance: "+Chunk.RENDER_DISTANCE, button -> {
@@ -56,20 +59,14 @@ public class MenuSettings extends Menu
Chunk.RENDER_DISTANCE = 2;
}
button.setText("Render Distance: "+Chunk.RENDER_DISTANCE);
+ Settings.update();
}));
- group.add(new ButtonSetting("GUI Scale: " + DisplayRenderUI.guiScale, button -> {
- DisplayRenderUI.guiScale += 1;
- if(DisplayRenderUI.guiScale > 4) {
- DisplayRenderUI.guiScale = 1;
- }
- button.setText("GUI Scale: " + DisplayRenderUI.guiScale);
- }));
-
- group.add(new ButtonSetting("Particles: " + qualitySettingToString(EntityParticle.DISABLED), button ->
+ group.add(new ButtonSetting("Particles: " + qualitySettingToString(!EntityParticle.DISABLED), button ->
{
EntityParticle.DISABLED = !EntityParticle.DISABLED;
- button.setText("Particles: " + qualitySettingToString(EntityParticle.DISABLED));
+ button.setText("Particles: " + qualitySettingToString(!EntityParticle.DISABLED));
+ Settings.update();
}));
/*group.add(new ButtonSetting("Dynamic Lighting: " + (LightingManager.lightingMode == 0 ? "Fast" : "Fancy"),
diff --git a/src/projectzombie/settings/Settings.java b/src/projectzombie/settings/Settings.java
index 2946ed3..8b02093 100755
--- a/src/projectzombie/settings/Settings.java
+++ b/src/projectzombie/settings/Settings.java
@@ -37,13 +37,11 @@ public class Settings implements IBdfClassManager
DisplayRenderUI.showPos = false;
}
- if(nl.get("gui_scale").getType() == BdfTypes.INTEGER) {
- DisplayRenderUI.guiScale = nl.get("gui_scale").getInteger();
+ if(nl.get("particles").getType() == BdfTypes.BOOLEAN) {
+ EntityParticle.DISABLED = nl.get("particles").getBoolean();
} else {
- DisplayRenderUI.guiScale = 2;
+ EntityParticle.DISABLED = false;
}
-
- EntityParticle.DISABLED = nl.get("particles").getBoolean();
}
@Override
@@ -52,7 +50,6 @@ public class Settings implements IBdfClassManager
nl.set("render_distance", BdfObject.withInteger(Chunk.RENDER_DISTANCE));
nl.set("show_fps", BdfObject.withBoolean(DisplayRenderUI.showFPS));
nl.set("show_pos", BdfObject.withBoolean(DisplayRenderUI.showPos));
- nl.set("gui_scale", BdfObject.withInteger(DisplayRenderUI.guiScale));
nl.set("particles", BdfObject.withBoolean(EntityParticle.DISABLED));
}
diff --git a/src/projectzombie/tiles/TileBossPortal.java b/src/projectzombie/tiles/TileBossPortal.java
index 70d55f4..5971ae2 100755
--- a/src/projectzombie/tiles/TileBossPortal.java
+++ b/src/projectzombie/tiles/TileBossPortal.java
@@ -4,6 +4,7 @@ import java.util.Random;
import gl_engine.MathHelpers;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import mainloop.task.IMainloopTask;
import projectzombie.Main;
import projectzombie.entity.Entity;
@@ -42,13 +43,13 @@ public class TileBossPortal extends Tile
{
// Get the player and set some player variables
EntityPlayer ep = (EntityPlayer)entity;
- ep.height = 5;
+ ep.getPos().y = 5;
// Create the boss arena
LayerGenBossArena layergen = (LayerGenBossArena) LayerGenerators.BOSS_ARENA;
layergen.spawnPlayer(ep);
layer.setFrontTile(TileState.EMPTY, tpos);
- layer.spawnEntity(new ParticleBreak(tpos.toDouble(), getModel(state.meta)));
+ layer.spawnEntity(new ParticleBreak(tpos.toDouble().xny(), new Vec3d(0, 0, 0), getModel(state.meta)));
int id = Main.world.addLayer(new Layer(rand, layergen));
Main.world.setLayer(id);
@@ -68,11 +69,11 @@ public class TileBossPortal extends Tile
if(ChunkEventHandler.loaded)
{
this.velocity -= MathHelpers.FallSpeed;
- ep.height += this.velocity;
- if(ep.height <= 0) {
+ ep.getPos().y += this.velocity;
+ if(ep.getPos().y <= 0) {
this.velocity *= -0.6;
if(this.velocity <= 0.001) {
- ep.height = 0;
+ ep.getPos().y = 0;
}
}
}
@@ -81,7 +82,7 @@ public class TileBossPortal extends Tile
@Override
public boolean MainLoopRepeat() {
- return ep.height > 0 || this.velocity > 0.001;
+ return ep.getPos().y > 0 || this.velocity > 0.001;
}
@Override
diff --git a/src/projectzombie/tiles/TileChest.java b/src/projectzombie/tiles/TileChest.java
index a60b50c..3b277dc 100755
--- a/src/projectzombie/tiles/TileChest.java
+++ b/src/projectzombie/tiles/TileChest.java
@@ -4,6 +4,7 @@ import java.util.Random;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import projectzombie.Main;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityItem;
@@ -29,7 +30,7 @@ public class TileChest extends Tile implements TileBulletBreakable
}
private void spawnItem(Chunk chunk, Vec2i pos, ItemStack stack) {
- chunk.spawnEntity(new EntityItem(new Vec2d(pos.x+0.5, pos.y+0.5), stack));
+ chunk.spawnEntity(new EntityItem(pos.xny().toDouble(), new Vec3d(0, 0, 0), stack));
}
@Override
diff --git a/src/projectzombie/tiles/TileLadderUp.java b/src/projectzombie/tiles/TileLadderUp.java
index f7f3f53..1bc57e0 100755
--- a/src/projectzombie/tiles/TileLadderUp.java
+++ b/src/projectzombie/tiles/TileLadderUp.java
@@ -33,7 +33,7 @@ public class TileLadderUp extends Tile
// Cast to player
EntityPlayer player = (EntityPlayer)entity;
if(player.in_animation) return;
- player.height = 0;
+ player.getPos().y = 0;
player.in_animation = true;
// Register the animation
@@ -47,18 +47,18 @@ public class TileLadderUp extends Tile
player.moving = true;
if(movingPlayer == 0) {
- player.height += 0.04;
+ player.getPos().y += 0.04;
}
else if(movingPlayer == 2) {
- player.height += 0.02;
+ player.getPos().y += 0.02;
}
- if(player.height >= 6 && movingPlayer == 0)
+ if(player.getPos().y >= 8 && movingPlayer == 0)
{
movingPlayer = 1;
Main.world.setLayer(state.meta);
- player.height = -1;
+ player.getPos().y = -1;
if(layer.layergen.destroyOnLeave) {
Main.world.removeLayer(state.meta);
@@ -71,10 +71,10 @@ public class TileLadderUp extends Tile
MainloopEventHandler.MAINLOOP_EVENT_HANDLER.mspf = 1000/60;
}
- else if(player.height >= 0 && movingPlayer == 2)
+ else if(player.getPos().y >= 0 && movingPlayer == 2)
{
movingPlayer = 3;
- player.height = 0;
+ player.getPos().y = 0;
player.moving = false;
player.in_animation = false;
}
diff --git a/src/projectzombie/tiles/TileLantern.java b/src/projectzombie/tiles/TileLantern.java
index da2cb4c..b9ecdaf 100755
--- a/src/projectzombie/tiles/TileLantern.java
+++ b/src/projectzombie/tiles/TileLantern.java
@@ -2,6 +2,7 @@ package projectzombie.tiles;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityItem;
import projectzombie.init.Items;
@@ -29,7 +30,7 @@ public class TileLantern extends Tile
super.onActivated(layer, tpos, entity, state);
layer.breakFrontTile(tpos);
- layer.spawnEntity(new EntityItem(new Vec2d(tpos.x + 0.5, tpos.y + 0.5),
+ layer.spawnEntity(new EntityItem(tpos.toDouble().xny(), new Vec3d(0, 0, 0),
new ItemStack(Items.LANTERN, 1, (byte)0)));
}
diff --git a/src/projectzombie/tiles/TileLava.java b/src/projectzombie/tiles/TileLava.java
index c1eb689..e89ea98 100755
--- a/src/projectzombie/tiles/TileLava.java
+++ b/src/projectzombie/tiles/TileLava.java
@@ -4,6 +4,7 @@ import java.util.Random;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.Entity;
import projectzombie.entity.particle.ParticleLava;
import projectzombie.init.Models;
@@ -41,15 +42,15 @@ public class TileLava extends Tile
super.onWalkedOn(chunk, layer, pos, entity, state);
// Create a lava particle
- layer.spawnEntity(new ParticleLava(entity.pos.copy()));
+ layer.spawnEntity(new ParticleLava(entity.getPos(), entity.getVelocity()));
}
@Override
public void tickRandomly(Layer layer, Chunk chunk, TileState state, Vec2i pos) {
super.tickRandomly(layer, chunk, state, pos);
- chunk.spawnEntity(new ParticleLava(new Vec2d(
- pos.x + rand.nextDouble(), pos.y + rand.nextDouble())));
+ chunk.spawnEntity(new ParticleLava(new Vec3d(
+ pos.x + rand.nextDouble(), 0, pos.y + rand.nextDouble()), new Vec3d(0, 0, 0)));
}
}
diff --git a/src/projectzombie/tiles/TileLavaFlow.java b/src/projectzombie/tiles/TileLavaFlow.java
index c2aeab4..2c5c377 100755
--- a/src/projectzombie/tiles/TileLavaFlow.java
+++ b/src/projectzombie/tiles/TileLavaFlow.java
@@ -4,6 +4,7 @@ import java.util.Random;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.particle.ParticleSmoke;
import projectzombie.init.Models;
import projectzombie.model.Model;
@@ -32,8 +33,9 @@ public class TileLavaFlow extends Tile
super.tickRandomly(layer, chunk, state, pos);
if(RandomHelpers.randrange(rand, 5) == 0) {
- chunk.spawnEntity(new ParticleSmoke(new Vec2d(
- pos.x + rand.nextDouble(), pos.y + rand.nextDouble())));
+ chunk.spawnEntity(new ParticleSmoke(new Vec3d(
+ pos.x + rand.nextDouble(), 0, pos.y + rand.nextDouble()),
+ new Vec3d(0, 0, 0)));
}
}
diff --git a/src/projectzombie/tiles/TilePortalDown.java b/src/projectzombie/tiles/TilePortalDown.java
index ae2002d..1de58c0 100755
--- a/src/projectzombie/tiles/TilePortalDown.java
+++ b/src/projectzombie/tiles/TilePortalDown.java
@@ -33,7 +33,7 @@ public class TilePortalDown extends Tile
EntityPlayer player = (EntityPlayer)entity;
if(player.in_animation) return;
player.in_animation = true;
- player.height = 0;
+ player.getPos().y = 0;
// Register the animation
Main.mainloop.register(new IMainloopTask() {
@@ -46,18 +46,18 @@ public class TilePortalDown extends Tile
player.moving = true;
if(movingPlayer == 0) {
- player.height -= 0.02;
+ player.getPos().y -= 0.02;
}
else if(movingPlayer == 2) {
- player.height -= 0.04;
+ player.getPos().y -= 0.04;
}
- if(player.height < -1 && movingPlayer == 0)
+ if(player.getPos().y < -1 && movingPlayer == 0)
{
movingPlayer = 1;
Main.world.setLayer(state.meta);
- player.height = 6;
+ player.getPos().y = 8;
if(layer.layergen.destroyOnLeave) {
Main.world.removeLayer(state.meta);
@@ -104,10 +104,10 @@ public class TilePortalDown extends Tile
}
}
- else if(player.height < 0 && movingPlayer == 2)
+ else if(player.getPos().y < 0 && movingPlayer == 2)
{
movingPlayer = 3;
- player.height = 0;
+ player.getPos().y = 0;
player.moving = false;
player.in_animation = false;
}
diff --git a/src/projectzombie/tiles/TileRock.java b/src/projectzombie/tiles/TileRock.java
index 4878526..f50a27a 100755
--- a/src/projectzombie/tiles/TileRock.java
+++ b/src/projectzombie/tiles/TileRock.java
@@ -2,6 +2,7 @@ package projectzombie.tiles;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityItem;
import projectzombie.init.Items;
@@ -31,7 +32,9 @@ public class TileRock extends Tile implements TileBulletBreakable
super.onActivated(layer, tpos, entity, state);
layer.breakFrontTile(tpos);
- layer.spawnEntity(new EntityItem(new Vec2d(tpos.x + 0.5, tpos.y + 0.5), new ItemStack(Items.ROCK, 1, (byte)0)));
+ layer.spawnEntity(
+ new EntityItem(new Vec3d(tpos.x + 0.5, 0, tpos.y + 0.5),
+ new Vec3d(0, 0, 0), new ItemStack(Items.ROCK, 1, (byte)state.meta)));
}
@Override
diff --git a/src/projectzombie/tiles/TileWater.java b/src/projectzombie/tiles/TileWater.java
index d91f94d..7df9a60 100755
--- a/src/projectzombie/tiles/TileWater.java
+++ b/src/projectzombie/tiles/TileWater.java
@@ -1,6 +1,7 @@
package projectzombie.tiles;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.Entity;
import projectzombie.entity.particle.ParticleWater;
import projectzombie.init.Models;
@@ -24,7 +25,7 @@ public class TileWater extends Tile
super.onWalkedOn(chunk, layer, pos, entity, state);
// Spawn some water particles
- layer.spawnEntity(new ParticleWater(pos.toDouble()));
+ layer.spawnEntity(new ParticleWater(pos.toDouble().xny(), new Vec3d(0, 0, 0)));
}
@Override
diff --git a/src/projectzombie/util/math/astar/AStar.java b/src/projectzombie/util/math/astar/AStar.java
index 17d7a6f..6c1388a 100755
--- a/src/projectzombie/util/math/astar/AStar.java
+++ b/src/projectzombie/util/math/astar/AStar.java
@@ -2,20 +2,22 @@ package projectzombie.util.math.astar;
import java.util.ArrayList;
import java.util.List;
+import gl_engine.MathHelpers;
import gl_engine.vec.Vec2i;
class Node
{
int x, y;
- int g, h;
+ int g, h, s;
Node parent;
- public Node(Node parent, int x, int y, int g, int h) {
+ public Node(Node parent, int x, int y, int g, int h, int s) {
this.parent = parent;
this.x = x;
this.y = y;
this.g = g;
this.h = h;
+ this.s = s;
}
}
@@ -53,10 +55,10 @@ public class AStar
}
this.goal = goal;
- this.open = new ArrayList();
- this.closed = new ArrayList();
+ this.open = new ArrayList(radius*4);
+ this.closed = new ArrayList(radius*4);
- now = new Node(null, start.x, start.y, 0, 0);
+ now = new Node(null, start.x, start.y, 0, 0, 1);
closed.add(now);
addNeighboursToList();
@@ -67,21 +69,14 @@ public class AStar
if(found != null)
{
Node n = found;
+ Vec2i[] path = new Vec2i[n.s];
- ArrayList path = new ArrayList();
-
- while(n != null) {
- path.add(new Vec2i(n.x, n.y));
+ for(int i=0;n!=null;i++) {
+ path[i] = new Vec2i(n.x, n.y);
n = n.parent;
}
- Vec2i[] path2 = new Vec2i[path.size()];
-
- for(int i=0;i 0 || tsb.tile.tileHitbox > 0) {
+ return 80;
}
- if(tsf.tile.tileHitbox > 0 || tsb.tile.tileHitbox > 0) {
+ if(tsf.tile.tileSolid || tsb.tile.tileSolid) {
return 100;
}
diff --git a/src/projectzombie/world/chunk/Chunk.java b/src/projectzombie/world/chunk/Chunk.java
index d7bcce7..d2d8eaf 100755
--- a/src/projectzombie/world/chunk/Chunk.java
+++ b/src/projectzombie/world/chunk/Chunk.java
@@ -13,10 +13,11 @@ import gl_engine.range.Range2i;
import gl_engine.texture.TextureRef3D;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
+import projectzombie.Main;
import projectzombie.display.Camera;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityAlive;
-import projectzombie.entity.EntityHeight;
import projectzombie.entity.EntityHoldsEntities;
import projectzombie.entity.EntityKillWithParticles;
import projectzombie.entity.particle.ParticleBreak;
@@ -192,7 +193,7 @@ public class Chunk implements IBdfClassManager
}
IModel model = e.getModel();
- double h = 0;
+ Vec3d pos = e.getPos();
if(e instanceof EntityHoldsEntities) {
renderEntities(((EntityHoldsEntities) e).getEntities());
@@ -203,12 +204,10 @@ public class Chunk implements IBdfClassManager
continue;
}
- if(e instanceof EntityHeight) {
- h = ((EntityHeight)e).getHeight();
- }
-
// Render the model
- model.setModel(Matrix4.translate(e.pos.x - 0.5, h, e.pos.y - 0.5));
+ model.setModel(Matrix4.translate(
+ (pos.x - Camera.camera.cx * 16) - 0.5, pos.y,
+ (pos.z - Camera.camera.cy * 16) - 0.5));
model.render();
}
}
@@ -291,7 +290,7 @@ public class Chunk implements IBdfClassManager
}
// Render all the tiles in the chunk as a block
- model.setModel(Matrix4.translate(c_pos.x * 16, 0, c_pos.y * 16));
+ model.setModel(Matrix4.translate((c_pos.x - Camera.camera.cx) * 16, 0, (c_pos.y - Camera.camera.cy) * 16));
model.render();
renderEntities(entities.toArray());
@@ -338,8 +337,8 @@ public class Chunk implements IBdfClassManager
// Has the entity left the chunk
int cx = c_pos.x * CHUNK_SIZE.mx;
int cy = c_pos.y * CHUNK_SIZE.my;
- double px = e.pos.x;
- double py = e.pos.y;
+ double px = e.getPos().x;
+ double py = e.getPos().z;
if(px > cx + CHUNK_SIZE.mx || px < cx || py > cy + CHUNK_SIZE.my || py < cy)
{
// Process the entity by layer and remove the entity from the array
@@ -435,7 +434,7 @@ public class Chunk implements IBdfClassManager
if(!ts.tile.unbreakable) {
setBackTile(layer.layergen.getTileDestroyed(), pos);
- spawnEntity(new ParticleBreak(new Vec2d(pos.x + 0.5, pos.y + 0.5), ts.tile.getModel(ts.meta)));
+ spawnEntity(new ParticleBreak(new Vec3d(pos.x + 0.5, 0, pos.y + 0.5), new Vec3d(0, 0, 0), ts.tile.getModel(ts.meta)));
}
}
@@ -446,7 +445,7 @@ public class Chunk implements IBdfClassManager
if(!ts.tile.unbreakable) {
setFrontTile(Tiles.VOID.getDefaultState(), pos);
- spawnEntity(new ParticleBreak(new Vec2d(pos.x + 0.5, pos.y + 0.5), ts.tile.getModel(ts.meta)));
+ spawnEntity(new ParticleBreak(new Vec3d(pos.x + 0.5, 0, pos.y + 0.5), new Vec3d(0, 0, 0), ts.tile.getModel(ts.meta)));
}
}
@@ -527,13 +526,15 @@ public class Chunk implements IBdfClassManager
// Loop over the entities
for(Entity e : entities)
{
+ Vec2d epos = e.getPos().xz();
+
if(
- e.pos.x + distance > pos.x &&
- e.pos.x - distance < pos.x &&
- e.pos.y + distance > pos.y &&
- e.pos.y - distance < pos.y
+ epos.x + distance > pos.x &&
+ epos.x - distance < pos.x &&
+ epos.y + distance > pos.y &&
+ epos.y - distance < pos.y
) {
- if(MathHelpers.distance2d(e.pos.x, e.pos.y, pos.x, pos.y) < distance) {
+ if(MathHelpers.distance2d(pos.x, pos.y, pos.x, pos.y) < distance) {
nearby_entities.add(e);
}
}
diff --git a/src/projectzombie/world/chunk/ChunkEventHandler.java b/src/projectzombie/world/chunk/ChunkEventHandler.java
index 268a842..d0f91b2 100755
--- a/src/projectzombie/world/chunk/ChunkEventHandler.java
+++ b/src/projectzombie/world/chunk/ChunkEventHandler.java
@@ -2,6 +2,7 @@ package projectzombie.world.chunk;
import gl_engine.MathHelpers;
import gl_engine.vec.Vec2i;
+import gl_engine.vec.Vec3d;
import mainloop.task.IMainloopTask;
import projectzombie.Main;
import projectzombie.display.DisplayLighting;
@@ -27,6 +28,7 @@ public class ChunkEventHandler implements IMainloopTask
public void MainLoopUpdate()
{
// Get the layer
+ Vec3d ppos = Main.player.getPos();
Layer layer = Main.world.getLayer();
loaded = true;
@@ -34,8 +36,8 @@ public class ChunkEventHandler implements IMainloopTask
for(Map2DElement ce : layer.chunks)
{
// Convert the player pos to x and y
- int px = (int)Main.player.pos.x / 16;
- int py = (int)Main.player.pos.y / 16;
+ int px = (int)ppos.x / 16;
+ int py = (int)ppos.z / 16;
if(
// Is this chunk beyond the simulation distance
@@ -54,8 +56,8 @@ public class ChunkEventHandler implements IMainloopTask
for(int y=-Chunk.SIMULATION_DISTANCE;y pos.x &&
- Main.player.pos.x - distance < pos.x &&
- Main.player.pos.y + distance > pos.y &&
- Main.player.pos.y - distance < pos.y
+ ppos.x + distance > pos.x &&
+ ppos.x - distance < pos.x &&
+ ppos.z + distance > pos.y &&
+ ppos.z - distance < pos.y
) {
// Add the player to the list of entities
- if(MathHelpers.distance2d(Main.player.pos.x, Main.player.pos.y, pos.x, pos.y) < distance) {
+ if(MathHelpers.distance2d(ppos.x, ppos.z, pos.x, pos.y) < distance) {
entities.add(Main.player);
}
}
diff --git a/src/projectzombie/world/layer/layergen/LayerGenBossArena.java b/src/projectzombie/world/layer/layergen/LayerGenBossArena.java
index 3f41126..e01ec6c 100755
--- a/src/projectzombie/world/layer/layergen/LayerGenBossArena.java
+++ b/src/projectzombie/world/layer/layergen/LayerGenBossArena.java
@@ -19,7 +19,7 @@ public class LayerGenBossArena extends LayerGen implements LayerGenRememberPlaye
{
private final Vec2i center = new Vec2i(0, 0);
private final int size = 10;
- private Vec2d player_pos = new Vec2d(0, 0);
+ private Vec3d player_pos = new Vec3d(0, 0, 0);
private Random rand = new Random();
public LayerGenBossArena() {
@@ -66,7 +66,7 @@ public class LayerGenBossArena extends LayerGen implements LayerGenRememberPlaye
}
if(tpos.x == 0 && tpos.y == 0) {
- chunk.spawnEntity(new EntityBoss(new Vec2d(0, 0)));
+ chunk.spawnEntity(new EntityBoss(new Vec3d(0, 0, 0), new Vec3d(0, 0, 0)));
}
}
}
@@ -103,16 +103,16 @@ public class LayerGenBossArena extends LayerGen implements LayerGenRememberPlaye
}
@Override
- public Vec2d getPlayerPos() {
+ public Vec3d getPlayerPos() {
return player_pos;
}
@Override
public void spawnPlayer(EntityPlayer player) {
- this.player_pos = player.pos;
- player.pos = new Vec2d(
- RandomHelpers.randrange(rand, -size + 2, size - 2),
- RandomHelpers.randrange(rand, -size + 2, size - 2));
+ this.player_pos = player.getPos();
+ player.setPos(new Vec3d(
+ RandomHelpers.randrange(rand, -size + 2, size - 2), 0,
+ RandomHelpers.randrange(rand, -size + 2, size - 2)));
}
@Override
diff --git a/src/projectzombie/world/layer/layergen/LayerGenCaves.java b/src/projectzombie/world/layer/layergen/LayerGenCaves.java
index 40f8600..c041d71 100755
--- a/src/projectzombie/world/layer/layergen/LayerGenCaves.java
+++ b/src/projectzombie/world/layer/layergen/LayerGenCaves.java
@@ -114,13 +114,14 @@ public class LayerGenCaves extends LayerGen
}
// Spawn entities
- Entity zombie = new EntityZombie(new Vec2d(
- chunk.c_pos.x * 16 + RandomHelpers.randrange(rand, 0, 16),
- chunk.c_pos.y * 16 + RandomHelpers.randrange(rand, 0, 16)));
+ Entity zombie = new EntityZombie(new Vec3d(
+ chunk.c_pos.x * 16 + RandomHelpers.randrange(rand, 0, 16), 0,
+ chunk.c_pos.y * 16 + RandomHelpers.randrange(rand, 0, 16)),
+ new Vec3d(0, 0, 0));
if(
- chunk.getBackTile(new Vec2i((int)zombie.pos.x,
- (int)zombie.pos.y)).tile == getTileDestroyed().tile
+ chunk.getBackTile(new Vec2i((int)zombie.getPos().x,
+ (int)zombie.getPos().z)).tile == getTileDestroyed().tile
) {
chunk.spawnEntity(zombie);
}
@@ -131,13 +132,17 @@ public class LayerGenCaves extends LayerGen
{
if(rand.nextDouble() > 0.9)
{
- Entity zombie = new EntityZombie(new Vec2d(
- RandomHelpers.randrange(rand, (int)Main.player.pos.x - 128, (int)Main.player.pos.x + 128),
- RandomHelpers.randrange(rand, (int)Main.player.pos.y - 128, (int)Main.player.pos.y + 128)));
+ Vec3d ppos = Main.player.getPos();
+ Entity zombie = new EntityZombie(new Vec3d(
+ RandomHelpers.randrange(rand, (int)ppos.x - 128, (int)ppos.x + 128), 0,
+ RandomHelpers.randrange(rand, (int)ppos.z - 128, (int)ppos.z + 128)),
+ new Vec3d(0, 0, 0));
+
+ Vec3d zpos = zombie.getPos();
boolean exists = false;
- for(Entity e : layer.getChunk(zombie.pos).entities) {
+ for(Entity e : layer.getChunk(zpos.xz()).entities) {
if(e.getClass() == zombie.getClass()) {
exists = true;
break;
@@ -145,9 +150,9 @@ public class LayerGenCaves extends LayerGen
}
if(
- !exists && layer.getBackTile(new Vec2i((int)zombie.pos.x,
- (int)zombie.pos.y)).tile == getTileDestroyed().tile &&
- zombie.pos.squareDistance(Main.player.pos) > 32
+ !exists && layer.getBackTile(new Vec2i((int)zpos.x,
+ (int)zpos.z)).tile == getTileDestroyed().tile &&
+ zpos.squareDistance(ppos) > 32
) {
layer.spawnEntity(zombie);
}
diff --git a/src/projectzombie/world/layer/layergen/LayerGenEarth.java b/src/projectzombie/world/layer/layergen/LayerGenEarth.java
index b750f5c..630a532 100755
--- a/src/projectzombie/world/layer/layergen/LayerGenEarth.java
+++ b/src/projectzombie/world/layer/layergen/LayerGenEarth.java
@@ -120,20 +120,23 @@ public class LayerGenEarth extends LayerGen
{
if(rand.nextDouble() > 0.98 && getEarthLight() < -0.3)
{
- Entity zombie = new EntityZombie(new Vec2d(
- RandomHelpers.randrange(rand, (int)Main.player.pos.x - 128, (int)Main.player.pos.x + 128),
- RandomHelpers.randrange(rand, (int)Main.player.pos.y - 128, (int)Main.player.pos.y + 128)));
+ Vec3d ppos = Main.player.getPos();
+
+ Entity zombie = new EntityZombie(new Vec3d(
+ RandomHelpers.randrange(rand, (int)ppos.x - 128, (int)ppos.x + 128), 0,
+ RandomHelpers.randrange(rand, (int)ppos.y - 128, (int)ppos.y + 128)),
+ new Vec3d(0, 0, 0));
boolean exists = false;
- for(Entity e : layer.getChunk(zombie.pos).entities) {
+ for(Entity e : layer.getChunk(zombie.getPos().xz()).entities) {
if(e.getClass() == zombie.getClass()) {
exists = true;
break;
}
}
- if(!exists && zombie.pos.squareDistance(Main.player.pos) > 64) {
+ if(!exists && zombie.getPos().squareDistance(ppos) > 64) {
layer.spawnEntity(zombie);
}
}
diff --git a/src/projectzombie/world/layer/layergen/LayerGenLavaCaves.java b/src/projectzombie/world/layer/layergen/LayerGenLavaCaves.java
index 48c09ab..15c7771 100755
--- a/src/projectzombie/world/layer/layergen/LayerGenLavaCaves.java
+++ b/src/projectzombie/world/layer/layergen/LayerGenLavaCaves.java
@@ -121,13 +121,17 @@ public class LayerGenLavaCaves extends LayerGen
{
if(rand.nextDouble() > 0.9)
{
- Entity zombie = new EntityZombieArmored(new Vec2d(
- RandomHelpers.randrange(rand, (int)Main.player.pos.x - 128, (int)Main.player.pos.x + 128),
- RandomHelpers.randrange(rand, (int)Main.player.pos.y - 128, (int)Main.player.pos.y + 128)));
+ Vec3d ppos = Main.player.getPos();
+ Entity zombie = new EntityZombieArmored(new Vec3d(
+ RandomHelpers.randrange(rand, (int)ppos.x - 128, (int)ppos.x + 128), 0,
+ RandomHelpers.randrange(rand, (int)ppos.z - 128, (int)ppos.z + 128)),
+ new Vec3d(0, 0, 0));
+
+ Vec3d zpos = zombie.getPos();
boolean exists = false;
- for(Entity e : layer.getChunk(zombie.pos).entities) {
+ for(Entity e : layer.getChunk(zpos.xz()).entities) {
if(e.getClass() == zombie.getClass()) {
exists = true;
break;
@@ -136,15 +140,15 @@ public class LayerGenLavaCaves extends LayerGen
if(!exists)
{
- TileState tsb = layer.getBackTile(new Vec2i((int)zombie.pos.x,
- (int)zombie.pos.y));
- TileState tsf = layer.getFrontTile(new Vec2i((int)zombie.pos.x,
- (int)zombie.pos.y));
+ TileState tsb = layer.getBackTile(new Vec2i((int)zpos.x,
+ (int)zpos.z));
+ TileState tsf = layer.getFrontTile(new Vec2i((int)zpos.x,
+ (int)zpos.z));
if(
tsb.tile == getTileDestroyed().tile &&
tsf.tile == Tiles.VOID &&
- zombie.pos.squareDistance(Main.player.pos) > 32) {
+ zpos.squareDistance(ppos) > 32) {
layer.spawnEntity(zombie);
}
}
diff --git a/src/projectzombie/world/layer/layergen/LayerGenRememberPlayerPos.java b/src/projectzombie/world/layer/layergen/LayerGenRememberPlayerPos.java
index 5f248e3..57a8d9b 100755
--- a/src/projectzombie/world/layer/layergen/LayerGenRememberPlayerPos.java
+++ b/src/projectzombie/world/layer/layergen/LayerGenRememberPlayerPos.java
@@ -1,10 +1,11 @@
package projectzombie.world.layer.layergen;
import gl_engine.vec.Vec2d;
+import gl_engine.vec.Vec3d;
import projectzombie.entity.player.EntityPlayer;
public interface LayerGenRememberPlayerPos
{
- public Vec2d getPlayerPos();
+ public Vec3d getPlayerPos();
public void spawnPlayer(EntityPlayer player);
}
diff --git a/src/resources/shader/environmentRenderer.fsh b/src/resources/shader/environmentRenderer.fsh
index 9bf5c5b..0a7ef8b 100644
--- a/src/resources/shader/environmentRenderer.fsh
+++ b/src/resources/shader/environmentRenderer.fsh
@@ -60,8 +60,8 @@ vec3 interpolate2RGB(float x, float y, vec3 v00, vec3 v01, vec3 v10, vec3 v11) {
void main()
{
vec4 light = texture(lightmap, vec2(
- map((pLightMapPos.x), lightmap_offset.x, lightmap_offset.x + lightmap_size.x, 0, 1),
- map((pLightMapPos.z), lightmap_offset.y, lightmap_offset.y + lightmap_size.y, 0, 1)));
+ map(pLightMapPos.x, lightmap_offset.x, lightmap_offset.x + lightmap_size.x, 0, 1),
+ map(pLightMapPos.z, lightmap_offset.y, lightmap_offset.y + lightmap_size.y, 0, 1)));
vec3 light_day = mapVec(scaleLight(light.r), 0, 1, lighting_day_low, lighting_day_high);
vec3 light_src = vec3(1, 1, 1) * (scaleLight(light.g) - abs(pLightMapPos.y) * 0.1);