diff --git a/resources/texmap.png b/resources/texmap.png index 9d1521f..49e058c 100644 Binary files a/resources/texmap.png and b/resources/texmap.png differ diff --git a/resources/texmap.xcf b/resources/texmap.xcf index 625f217..9a79296 100644 Binary files a/resources/texmap.xcf and b/resources/texmap.xcf differ diff --git a/src/shootergame/display/DisplayRenderUI.java b/src/shootergame/display/DisplayRenderUI.java index 9df9446..f2dfe43 100644 --- a/src/shootergame/display/DisplayRenderUI.java +++ b/src/shootergame/display/DisplayRenderUI.java @@ -2,8 +2,12 @@ package shootergame.display; import shootergame.Main; import shootergame.audio.AudioSources; +import shootergame.entity.EntityInventory; import shootergame.entity.player.EntityPlayer; import shootergame.init.Textures; +import shootergame.inventory.IInventory; +import shootergame.inventory.Inventory; +import shootergame.items.ItemStack; import shootergame.text.Text; import shootergame.util.gl.GlHelpers; import shootergame.util.gl.texture.TextureReference; @@ -31,8 +35,6 @@ public class DisplayRenderUI Text.render("FPS: " + DisplayStatsEventHandler.fps, text_size); GlHelpers.translate(0, -0.5, 0); Text.render("x: " + (int) player.pos.x + ", y: " + (int) player.pos.y, text_size); - GlHelpers.translate(0, -0.5, 0); - Text.render("AL Sound Source: "+AudioSources.upto, text_size); GlHelpers.color3(1, 1, 1); GlHelpers.popMatrix(); @@ -43,22 +45,72 @@ public class DisplayRenderUI TextureReference health_bg = Textures.UI_HEALTH_BG; GlHelpers.begin(); - health_bg.texCoord(0, 0); GlHelpers.vertex2(-2.5, -9.0); - health_bg.texCoord(0, 1); GlHelpers.vertex2(-2.5, -9.5); - health_bg.texCoord(1, 1); GlHelpers.vertex2(2.5, -9.5); - health_bg.texCoord(1, 0); GlHelpers.vertex2(2.5, -9.0); + health_bg.texCoord(0, 1); GlHelpers.vertex2(-3.2, -8.0); + health_bg.texCoord(0, 0); GlHelpers.vertex2(-3.2, -9.0); + health_bg.texCoord(1, 0); GlHelpers.vertex2(3.2, -9.0); + health_bg.texCoord(1, 1); GlHelpers.vertex2(3.2, -8.0); - health_fg.texCoord(0, 0); GlHelpers.vertex2(-2.5, -9.0); - health_fg.texCoord(0, 1); GlHelpers.vertex2(-2.5, -9.5); - health_fg.texCoord(1-a, 1); GlHelpers.vertex2(2.5-a*5, -9.5); - health_fg.texCoord(1-a, 0); GlHelpers.vertex2(2.5-a*5, -9.0); + health_fg.texCoord(0, 1); GlHelpers.vertex2(-3.2, -8.0); + health_fg.texCoord(0, 0); GlHelpers.vertex2(-3.2, -9.0); + health_fg.texCoord(1-a, 0); GlHelpers.vertex2(3.2-a*6.4, -9.0); + health_fg.texCoord(1-a, 1); GlHelpers.vertex2(3.2-a*6.4, -8.0); GlHelpers.end(); // Display the amount of ammo left GlHelpers.pushMatrix(); - GlHelpers.translate(-9.5, -9.5, 0); - Text.render("Ammo: "+player.ammo, text_size); + TextureReference ammo_tex = Textures.ITEM_AMMO_BOX; + GlHelpers.begin(); + + ammo_tex.texCoord(0, 1); GlHelpers.vertex2(-9.5, -8.5); + ammo_tex.texCoord(0, 0); GlHelpers.vertex2(-9.5, -7.0); + ammo_tex.texCoord(1, 0); GlHelpers.vertex2(-8.5, -7.0); + ammo_tex.texCoord(1, 1); GlHelpers.vertex2(-8.5, -8.5); + + GlHelpers.end(); + + GlHelpers.translate(-8.5, -9, 0); + Text.render(Integer.toString(player.ammo), text_size); GlHelpers.popMatrix(); + + // Display all the items in the players inventory + TextureReference slots_tex = Textures.UI_ITEM_SLOTS; + GlHelpers.begin(); + + slots_tex.texCoord(0, 1); GlHelpers.vertex2(9.5, -9.4); + slots_tex.texCoord(0, 0); GlHelpers.vertex2(9.5, -7.6); + slots_tex.texCoord(1, 0); GlHelpers.vertex2(3.5, -7.6); + slots_tex.texCoord(1, 1); GlHelpers.vertex2(3.5, -9.4); + + GlHelpers.end(); + + // Render the players active slot + TextureReference hotbar_slot_tex = Textures.UI_ACTIVE_SLOT; + GlHelpers.begin(); + + hotbar_slot_tex.texCoord(0, 1); GlHelpers.vertex2(4.55 + player.inventory_hand, -9.45); + hotbar_slot_tex.texCoord(0, 0); GlHelpers.vertex2(4.55 + player.inventory_hand, -7.55); + hotbar_slot_tex.texCoord(1, 0); GlHelpers.vertex2(3.45 + player.inventory_hand, -7.55); + hotbar_slot_tex.texCoord(1, 1); GlHelpers.vertex2(3.45 + player.inventory_hand, -9.45); + + GlHelpers.end(); + + // Render the players inventory + for(int i=0;i<6;i++) + { + Inventory player_inv = ((EntityInventory)player).getInventory(); + ItemStack player_item = player_inv.getItem(i); + + if(!player_item.isEmpty()) + { + player_item.item.render(new Vec2d(3.5 + i, -9.2), new Vec2d(1, 1.5)); + + GlHelpers.pushMatrix(); + GlHelpers.translate(3.8 + i, -9.2, 0); + Text.render(Integer.toString(player_item.count), text_size); + GlHelpers.popMatrix(); + } + } + } } diff --git a/src/shootergame/display/transparent/TransparentObjects.java b/src/shootergame/display/transparent/TransparentObjects.java index 6fb235a..6a03dc5 100644 --- a/src/shootergame/display/transparent/TransparentObjects.java +++ b/src/shootergame/display/transparent/TransparentObjects.java @@ -3,7 +3,6 @@ package shootergame.display.transparent; import java.util.ArrayList; import shootergame.display.Camera; -import shootergame.tiles.TileBlackened; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec3d; diff --git a/src/shootergame/entity/Entity.java b/src/shootergame/entity/Entity.java index 6a4b038..cca486e 100644 --- a/src/shootergame/entity/Entity.java +++ b/src/shootergame/entity/Entity.java @@ -1,6 +1,7 @@ package shootergame.entity; import java.util.ArrayList; +import java.util.Random; import shootergame.Main; import shootergame.display.Camera; @@ -30,6 +31,7 @@ public class Entity implements ITransparentObject private TileState tile_back; public boolean crossUnWalkable = true; public boolean goThroughSolid = true; + protected static final Random rand = new Random(); public Entity(Vec2d pos, double angle) { diff --git a/src/shootergame/entity/EntityBullet.java b/src/shootergame/entity/EntityBullet.java index 0d5b726..fba5182 100644 --- a/src/shootergame/entity/EntityBullet.java +++ b/src/shootergame/entity/EntityBullet.java @@ -2,6 +2,7 @@ package shootergame.entity; import java.util.Random; +import shootergame.Main; import shootergame.display.Camera; import shootergame.entity.particle.ParticleBlood; import shootergame.init.Sounds; @@ -20,14 +21,12 @@ import shootergame.world.layer.Layer; public class EntityBullet extends EntityParticle { private int time = 0; - private Random rand; private Entity parent; - public EntityBullet(Random rand, Vec2d pos, Entity parent, double angle) { + public EntityBullet(Vec2d pos, Entity parent, double angle) { super(0.2, 0.4); // Store some specified values - this.rand = rand; this.pos = pos; this.angle = angle; this.parent = parent; @@ -56,12 +55,22 @@ public class EntityBullet extends EntityParticle if(tile_f.tile.tileSolid) { if(pos.squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_f.tile.tileHitbox) { + // Break the block + if(RandomHelpers.randrange(rand, 5) == 0) { + chunk.breakFrontTile(tpos); + } + // Delete the bullet kill(); } } if(tile_b.tile.tileSolid) { if(pos.squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_b.tile.tileHitbox) { + // Break the block + if(RandomHelpers.randrange(rand, 5) == 0) { + chunk.breakBackTile(tpos); + } + // Delete the bullet kill(); } diff --git a/src/shootergame/entity/EntityInventory.java b/src/shootergame/entity/EntityInventory.java index f285a3b..9798e48 100644 --- a/src/shootergame/entity/EntityInventory.java +++ b/src/shootergame/entity/EntityInventory.java @@ -1,5 +1,8 @@ package shootergame.entity; -public interface EntityInventory { +import shootergame.inventory.Inventory; +public interface EntityInventory +{ + public Inventory getInventory(); } diff --git a/src/shootergame/entity/EntityItem.java b/src/shootergame/entity/EntityItem.java new file mode 100644 index 0000000..5873ffe --- /dev/null +++ b/src/shootergame/entity/EntityItem.java @@ -0,0 +1,40 @@ +package shootergame.entity; + +import shootergame.inventory.Inventory; +import shootergame.items.ItemStack; +import shootergame.util.math.vec.Vec2d; +import shootergame.world.chunk.Chunk; +import shootergame.world.layer.Layer; + +public class EntityItem extends EntityVertical +{ + private ItemStack stack; + + public EntityItem(Vec2d pos, ItemStack stack) { + super(stack.item.texture, 1); + + this.opaqueTile = true; + this.pos = pos; + this.stack = stack; + } + + @Override + public void tick(Chunk chunk, Layer layer) { + super.tick(chunk, layer); + + for(Entity e : layer.getNearbyEntities(pos, 1)) + { + if(e instanceof EntityInventory) + { + // Pick the stack up if its an inventory + stack.item.onPickedUp(stack, layer, chunk, e); + + // Kill this entity if the stack is empty + if(stack.isEmpty()) { + kill(); + return; + } + } + } + } +} diff --git a/src/shootergame/entity/EntityTnt.java b/src/shootergame/entity/EntityTnt.java index 70a1033..81b9681 100644 --- a/src/shootergame/entity/EntityTnt.java +++ b/src/shootergame/entity/EntityTnt.java @@ -9,7 +9,6 @@ import shootergame.entity.particle.ParticleSpark; import shootergame.init.Sounds; import shootergame.init.Textures; import shootergame.init.Tiles; -import shootergame.tiles.TileBlackened; import shootergame.tiles.TileStone; import shootergame.util.gl.GlHelpers; import shootergame.util.math.MathHelpers; @@ -27,8 +26,6 @@ public class EntityTnt extends EntityVertical private int explode_time; private int explode_radius; - private Random rand = new Random(); - public EntityTnt(Vec2d pos, double angle, int explode_radius) { super(Textures.ENTITY_TNT, 0.5); diff --git a/src/shootergame/entity/EntityVertical.java b/src/shootergame/entity/EntityVertical.java index 5f76ab5..af4978c 100644 --- a/src/shootergame/entity/EntityVertical.java +++ b/src/shootergame/entity/EntityVertical.java @@ -10,9 +10,6 @@ public class EntityVertical extends Entity private TextureReference tex; private double height; - public EntityVertical() { - } - public EntityVertical(TextureReference tex, double height) { this.height = height; this.tex = tex; diff --git a/src/shootergame/entity/EntityZombie.java b/src/shootergame/entity/EntityZombie.java index 4bb2d0c..6c7b8e9 100644 --- a/src/shootergame/entity/EntityZombie.java +++ b/src/shootergame/entity/EntityZombie.java @@ -12,7 +12,6 @@ import shootergame.world.layer.Layer; public class EntityZombie extends EntityVertical implements EntityAlive { - private Random rand; private OpenSimplexNoise noise_movement; private OpenSimplexNoise noise_gun_fire; private OpenSimplexNoise noise_gun_angle; @@ -23,7 +22,6 @@ public class EntityZombie extends EntityVertical implements EntityAlive public EntityZombie() { super(Textures.ENTITY_ZOMBIE, 1); - rand = new Random(); noise_movement = new OpenSimplexNoise(rand.nextLong()); noise_gun_fire = new OpenSimplexNoise(rand.nextLong()); noise_gun_angle = new OpenSimplexNoise(rand.nextLong()); @@ -60,7 +58,7 @@ public class EntityZombie extends EntityVertical implements EntityAlive angle_gun += noise_gun_angle.eval(time, 0)*20; // Fire the gun - layer.spawnEntity(new EntityBullet(rand, pos.copy(), this, angle_gun)); + layer.spawnEntity(new EntityBullet(pos.copy(), this, angle_gun)); } } diff --git a/src/shootergame/entity/particle/EntityBreak.java b/src/shootergame/entity/particle/EntityBreak.java new file mode 100644 index 0000000..eab0b77 --- /dev/null +++ b/src/shootergame/entity/particle/EntityBreak.java @@ -0,0 +1,41 @@ +package shootergame.entity.particle; + +import shootergame.Main; +import shootergame.entity.EntityParticle; +import shootergame.entity.EntityVertical; +import shootergame.util.gl.texture.IHasTexture; +import shootergame.util.gl.texture.TextureReference; +import shootergame.util.math.TileState; +import shootergame.util.math.vec.Vec2d; +import shootergame.world.chunk.Chunk; +import shootergame.world.layer.Layer; + +public class EntityBreak extends EntityVertical +{ + private static TextureReference getTexture(TileState ts) + { + if(ts.tile instanceof IHasTexture) + { + TextureReference tex = ((IHasTexture)ts.tile).getTexture(); + return tex; + } + + else { + return TextureReference.EMPTY; + } + } + + public EntityBreak(Vec2d pos, TileState ts) { + super(getTexture(ts), 1); + this.opaqueTile = ts.tile.opaqueTile; + this.pos = pos; + } + + @Override + public void tick(Chunk chunk, Layer layer) { + super.tick(chunk, layer); + + // Kill the particle if the player can't see it to reduce lag + if(Main.player.pos.squareDistance(pos) > 32) this.kill(); + } +} diff --git a/src/shootergame/entity/player/EntityPlayer.java b/src/shootergame/entity/player/EntityPlayer.java index 4d4ae0f..d0d7a88 100644 --- a/src/shootergame/entity/player/EntityPlayer.java +++ b/src/shootergame/entity/player/EntityPlayer.java @@ -8,10 +8,14 @@ import shootergame.display.Camera; import shootergame.entity.Entity; import shootergame.entity.EntityAlive; import shootergame.entity.EntityBullet; +import shootergame.entity.EntityInventory; import shootergame.entity.EntityTnt; import shootergame.entity.EntityVertical; +import shootergame.init.Items; import shootergame.init.Sounds; import shootergame.init.Textures; +import shootergame.inventory.Inventory; +import shootergame.items.ItemStack; import shootergame.util.gl.GlHelpers; import shootergame.util.gl.texture.TextureReference; import shootergame.util.math.MathHelpers; @@ -21,7 +25,7 @@ import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; -public class EntityPlayer extends EntityVertical implements EntityAlive +public class EntityPlayer extends EntityVertical implements EntityAlive, EntityInventory { public boolean MOVE_FORWARD = false; public boolean MOVE_BACKWARD = false; @@ -39,9 +43,14 @@ public class EntityPlayer extends EntityVertical implements EntityAlive public boolean dead = false; public boolean in_animation = false; + private Inventory inventory; + public int inventory_hand = 0; + public int ammo = 1000; public EntityPlayer() { + super(TextureReference.EMPTY, 0); + this.angle = 45; rand = new Random(); @@ -50,6 +59,8 @@ public class EntityPlayer extends EntityVertical implements EntityAlive isSolid = true; goThroughSolid = false; crossUnWalkable = false; + + inventory = new Inventory(6); } @Override @@ -73,7 +84,7 @@ public class EntityPlayer extends EntityVertical implements EntityAlive super.tick(chunk, layer); // Regen some of the players health - this.addHealth(0.1); + //this.addHealth(0.1); // Rotate left if(MOVE_LEFT) { @@ -163,23 +174,30 @@ public class EntityPlayer extends EntityVertical implements EntityAlive ammo -= 1; // Summon bullets at this angle relative to the player - Main.world.getLayer().spawnEntity(new EntityBullet(rand, pos.copy(), this, angle + this.angle)); + Main.world.getLayer().spawnEntity(new EntityBullet(pos.copy(), this, angle + this.angle)); } } - public void throwTnt(double angle) { + public void activateItem() { if(dead || in_animation) return; - Main.world.getLayer().spawnEntity(new EntityTnt(pos.copy(), angle + this.angle, 10)); + + ItemStack is = inventory.getItem(inventory_hand); + + if(!is.isEmpty()) { + is.item.onAction(is, Main.world.getLayer(), chunk, this); + } } @Override public void addHealth(double amount) { - if(health < health_max) health += amount; + health += amount; + if(health > health_max) health = health_max; } @Override public void removeHealth(double amount) { health -= amount; + if(health < 0) health = 0; } @Override @@ -206,4 +224,9 @@ public class EntityPlayer extends EntityVertical implements EntityAlive public void setHealth(double health) { this.health = health; } + + @Override + public Inventory getInventory() { + return inventory; + } } diff --git a/src/shootergame/init/Items.java b/src/shootergame/init/Items.java new file mode 100644 index 0000000..a4c49d9 --- /dev/null +++ b/src/shootergame/init/Items.java @@ -0,0 +1,17 @@ +package shootergame.init; + +import shootergame.items.Item; +import shootergame.items.ItemAmmo; +import shootergame.items.ItemDefenceUpgrade; +import shootergame.items.ItemEmpty; +import shootergame.items.ItemGunUpgrade; +import shootergame.items.ItemHealthPotion; + +public class Items +{ + public static final Item AMMO = new ItemAmmo("ammo"); + public static final Item DEFENCE_UPGRADE = new ItemDefenceUpgrade("defence_upgrade"); + public static final Item GUN_UPGRADE = new ItemGunUpgrade("gun_upgrade"); + public static final Item HEALTH_POTION = new ItemHealthPotion("health_potion"); + public static final Item EMPTY = new ItemEmpty("empty"); +} diff --git a/src/shootergame/init/Textures.java b/src/shootergame/init/Textures.java index 688d4a4..c4804a3 100644 --- a/src/shootergame/init/Textures.java +++ b/src/shootergame/init/Textures.java @@ -36,9 +36,17 @@ public class Textures public static final TextureReference TILE_PORTAL = texmap.getTextureReference(3, 4, 5, 6); public static final TextureReference TILE_WALL = texmap.getTextureReference(2, 3, 5, 6); public static final TextureReference TILE_LADDER_UP = texmap.getTextureReference(16, 17, 0, 16); + public static final TextureReference TILE_CHEST = texmap.getTextureReference(2, 3, 4, 5); public static final TextureReference UI_HEALTH_FG = texmap.getTextureReference(0, 16, 11, 12); public static final TextureReference UI_HEALTH_BG = texmap.getTextureReference(0, 16, 12, 13); + public static final TextureReference UI_ITEM_SLOTS = texmap.getTextureReference(0, 12, 13, 15); + public static final TextureReference UI_ACTIVE_SLOT = texmap.getTextureReference(12, 14, 13, 15); + + public static final TextureReference ITEM_HEALTH_POTION = texmap.getTextureReference(0, 1, 5, 6); + public static final TextureReference ITEM_AMMO_BOX = texmap.getTextureReference(1, 2, 5, 6); + public static final TextureReference ITEM_GUN_UPGRADE = texmap.getTextureReference(0, 1, 4, 5); + public static final TextureReference ITEM_DEFENCE_UPGRADE = texmap.getTextureReference(1, 2, 4, 5); // Fire public static final TextureReference TILE_FIRE_0 = texmap.getTextureReference(0, 1, 1, 2); diff --git a/src/shootergame/init/Tiles.java b/src/shootergame/init/Tiles.java index e899194..b142100 100644 --- a/src/shootergame/init/Tiles.java +++ b/src/shootergame/init/Tiles.java @@ -1,7 +1,7 @@ package shootergame.init; import shootergame.tiles.Tile; -import shootergame.tiles.TileBlackened; +import shootergame.tiles.TileChest; import shootergame.tiles.TileDirt; import shootergame.tiles.TileFire; import shootergame.tiles.TileGrass; @@ -33,9 +33,9 @@ public class Tiles public static final Tile WATER = new TileWater("water"); public static final Tile LAVA_FLOW = new TileLavaFlow("lava_flow"); public static final Tile WATER_FLOW = new TileWaterFlow("water_flow"); - public static final Tile BLACKENED = new TileBlackened("blackened"); public static final Tile LADDER = new TileLadder("ladder"); public static final Tile PORTAL_DOWN = new TilePortalDown("portal_down"); public static final Tile WALL = new TileWall("wall"); public static final Tile LADDER_UP = new TileLadderUp("ladder_up"); + public static final Tile TILE_CHEST = new TileChest("chest"); } diff --git a/src/shootergame/input/JoystickCallback.java b/src/shootergame/input/JoystickCallback.java index 2cd08bd..dc92ae7 100644 --- a/src/shootergame/input/JoystickCallback.java +++ b/src/shootergame/input/JoystickCallback.java @@ -9,14 +9,18 @@ import org.lwjgl.glfw.GLFWJoystickCallbackI; import mainloop.task.IMainloopTask; import shootergame.Main; +import shootergame.util.math.MathHelpers; public class JoystickCallback implements GLFWJoystickCallbackI, IMainloopTask { public static final JoystickCallback JOYSTICK_CALLBACK = new JoystickCallback(); private ArrayList connections = new ArrayList(); - private static boolean throwTnt_last = false; - private static boolean activate_last = false; + private static boolean activateItem_last = false; + private static boolean activateTile_last = false; + + private static boolean hotbar_l = false; + private static boolean hotbar_r = false; @Override public void invoke(int jid, int event) @@ -167,45 +171,53 @@ public class JoystickCallback implements GLFWJoystickCallbackI, IMainloopTask Main.player.fireBullet(0); } - // Tnt trigger + // Item trigger if(left_trigger > 0.3) { - if(!throwTnt_last) + if(!activateItem_last) { - throwTnt_last = true; - Main.player.throwTnt(0); + activateItem_last = true; + Main.player.activateItem(); } } else { - throwTnt_last = false; + activateItem_last = false; } - if(dpad_up) { - Main.player.fireBullet(0); - } - - if(dpad_down) { - Main.player.fireBullet(180); - } - - if(dpad_left) { - Main.player.fireBullet(270); - } - - if(dpad_right) { - Main.player.fireBullet(90); - } - - // Activate block - if(button_x) { - if(!activate_last) { - Main.player.activateTile(); - activate_last = true; + if(shoulder_left) { + if(!hotbar_l) { + hotbar_l = true; + Main.player.inventory_hand -= 1; + Main.player.inventory_hand = MathHelpers.mod(Main.player.inventory_hand, 6); } } - else if(activate_last) { - activate_last = false; + else if(hotbar_l) { + hotbar_l = false; + } + + if(shoulder_right) { + if(!hotbar_r) { + hotbar_r = true; + Main.player.inventory_hand += 1; + Main.player.inventory_hand = MathHelpers.mod(Main.player.inventory_hand, 6); + } + } + + else if(hotbar_r) { + hotbar_r = false; + } + + // Activate tile + if(button_x) { + if(!activateTile_last) { + Main.player.activateTile(); + activateTile_last = true; + } + } + + else if(activateTile_last) { + activateTile_last = false; } } diff --git a/src/shootergame/inventory/IInventory.java b/src/shootergame/inventory/IInventory.java new file mode 100644 index 0000000..c8c7cae --- /dev/null +++ b/src/shootergame/inventory/IInventory.java @@ -0,0 +1,11 @@ +package shootergame.inventory; + +import shootergame.items.ItemStack; + +public interface IInventory +{ + public ItemStack getItem(int slot); + public int getSlotCount(); + public void setItem(ItemStack stack, int slot); + public ItemStack removeItem(int slot); +} diff --git a/src/shootergame/inventory/Inventory.java b/src/shootergame/inventory/Inventory.java new file mode 100644 index 0000000..0b1c067 --- /dev/null +++ b/src/shootergame/inventory/Inventory.java @@ -0,0 +1,47 @@ +package shootergame.inventory; + +import shootergame.items.ItemStack; + +public class Inventory implements IInventory +{ + protected ItemStack[] items; + + public Inventory(int size) + { + items = new ItemStack[size]; + + for(int i=0;i ce : layer.chunks) diff --git a/src/shootergame/world/layer/Layer.java b/src/shootergame/world/layer/Layer.java index 8ebb68a..e9573ba 100644 --- a/src/shootergame/world/layer/Layer.java +++ b/src/shootergame/world/layer/Layer.java @@ -6,6 +6,7 @@ import java.util.Random; import shootergame.Main; import shootergame.display.Camera; import shootergame.entity.Entity; +import shootergame.init.Tiles; import shootergame.tiles.Tile; import shootergame.util.math.MathHelpers; import shootergame.util.math.TileState; @@ -65,6 +66,14 @@ public class Layer public void spawnRandomEntities() { this.layergen.spawnEntities(this, rand); } + + public Chunk getChunk(Vec2i pos) { + return chunks.get(getChunkPosFromPos(pos)); + } + + public Chunk getChunk(Vec2d pos) { + return chunks.get(getChunkPosFromPos(pos)); + } public void setBackTile(TileState tile, Vec2i pos) { @@ -93,6 +102,14 @@ public class Layer return chunks.get(c_pos).getBackTile(pos); } + public void breakBackTile(Vec2i pos) { + getChunk(pos).breakBackTile(pos); + } + + public void breakFrontTile(Vec2i pos) { + getChunk(pos).breakFrontTile(pos); + } + private Vec2i getChunkPosFromPos(Vec2i pos) { return this.getChunkPosFromPos(new Vec2d(pos.x, pos.y)); } diff --git a/src/shootergame/world/layer/layergen/LayerGenCaves.java b/src/shootergame/world/layer/layergen/LayerGenCaves.java index ce0b174..666c8a0 100644 --- a/src/shootergame/world/layer/layergen/LayerGenCaves.java +++ b/src/shootergame/world/layer/layergen/LayerGenCaves.java @@ -4,10 +4,17 @@ import java.util.Random; import org.lwjgl.stb.STBPerlin; +import shootergame.Main; +import shootergame.entity.Entity; +import shootergame.entity.EntityItem; +import shootergame.entity.EntityZombie; +import shootergame.init.Items; import shootergame.init.Tiles; +import shootergame.items.ItemStack; import shootergame.util.math.TileState; import shootergame.util.math.random.OpenSimplexNoise; import shootergame.util.math.random.RandomHelpers; +import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -47,19 +54,35 @@ public class LayerGenCaves extends LayerGen else { chunk.setBackTile(Tiles.WALL.getDefaultState(), pos); } - - if(portal) { - chunk.setFrontTile(new TileState(Tiles.LADDER_UP, (short)0), portal_pos); - } } } + + if(portal) { + chunk.setFrontTile(new TileState(Tiles.LADDER_UP, (short)0), portal_pos); + } + + Vec2i chest_pos = new Vec2i( + RandomHelpers.randrange(rand, Chunk.CHUNK_SIZE.mx), + RandomHelpers.randrange(rand, Chunk.CHUNK_SIZE.my)); + + chunk.setFrontTile(Tiles.TILE_CHEST.getDefaultState(), chest_pos); } @Override public void spawnEntities(Layer layer, Random rand) { - // TODO Auto-generated method stub - + if(rand.nextDouble() > 0.95) + { + Entity zombie = new EntityZombie(); + zombie.pos = 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)); + + if(layer.getBackTile(new Vec2i((int)zombie.pos.x, + (int)zombie.pos.y)).tile == getTileDestroyed().tile && + zombie.pos.squareDistance(Main.player.pos) > 32) + layer.spawnEntity(zombie); + } } @Override diff --git a/src/shootergame/world/layer/layergen/LayerGenEarth.java b/src/shootergame/world/layer/layergen/LayerGenEarth.java index b7bd174..26accfe 100644 --- a/src/shootergame/world/layer/layergen/LayerGenEarth.java +++ b/src/shootergame/world/layer/layergen/LayerGenEarth.java @@ -70,13 +70,15 @@ public class LayerGenEarth extends LayerGen @Override public void spawnEntities(Layer layer, Random rand) { - if(rand.nextDouble() > 0.99) + if(rand.nextDouble() > 0.98) { Entity zombie = new EntityZombie(); zombie.pos = new Vec2d( - RandomHelpers.randrange(rand, (int)Main.player.pos.x - 100, (int)Main.player.pos.x + 100), - RandomHelpers.randrange(rand, (int)Main.player.pos.y - 100, (int)Main.player.pos.y + 100)); - layer.spawnEntity(zombie); + 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)); + + if(zombie.pos.squareDistance(Main.player.pos) > 64) + layer.spawnEntity(zombie); } }