diff --git a/src/projectzombie/display/DisplayRenderUI.java b/src/projectzombie/display/DisplayRenderUI.java index 0a94ead..fd40421 100755 --- a/src/projectzombie/display/DisplayRenderUI.java +++ b/src/projectzombie/display/DisplayRenderUI.java @@ -62,12 +62,29 @@ public class DisplayRenderUI model_item.setModel(matrix_item); model_item.render(); + double damage = stack.item.getDamage(stack); + + if(damage > 0) + { + Matrix4 matrix_damage = Matrix4.multiply(matrix_item, Matrix4.translate(0, -0.85 / 16, 0)); + matrix_damage = Matrix4.multiply(Matrix4.scale(new Vec3d(damage * 0.85, 0.85 / 16, 0)), matrix_damage); + + GL33.glUniform4f(Main.window.glsl_color, + 1 - (float)MathHelpers.squared(1 - damage), + 1 - (float)MathHelpers.squared(damage), 0, 1); + + Models.UI_PIXEL_WHITE.setModel(matrix_damage); + Models.UI_PIXEL_WHITE.render(); + + GL33.glUniform4f(Main.window.glsl_color, 1, 1, 1, 1); + } + if(stack.count > 1) { - matrix_item = Matrix4.multiply(matrix, Matrix4.translate(i * offset + 0.25, 0.28125, 0)); - matrix_item = Matrix4.multiply(Matrix4.scale(new Vec3d(0.4, 0.4, 0.4)), matrix_item); + Matrix4 matrix_text = Matrix4.multiply(matrix, Matrix4.translate(i * offset + 0.25, 0.28125, 0)); + matrix_text = Matrix4.multiply(Matrix4.scale(new Vec3d(0.4, 0.4, 0.4)), matrix_text); - Text.render("" + stack.count, matrix_item); + Text.render("" + stack.count, matrix_text); } } } diff --git a/src/projectzombie/entity/Entity.java b/src/projectzombie/entity/Entity.java index 23aaed1..27874a7 100755 --- a/src/projectzombie/entity/Entity.java +++ b/src/projectzombie/entity/Entity.java @@ -124,7 +124,7 @@ public abstract class Entity implements IBdfClassManager this.pos = pos.copy(); } - public Entity(BdfObject bdf) { + protected Entity() { } @Override @@ -223,6 +223,14 @@ public abstract class Entity implements IBdfClassManager tile_back.tile.onWalkedOn(chunk, layer, tpos, this, tile_back); tile_front.tile.onWalkedOn(chunk, layer, tpos, this, tile_front); } + + // Move the player out of a solid area + while(!moveIsLegal(pos)) + { + Vec2i tpos = pos.xz().toInt(); + Vec2d direction = pos.xz().subtract(tpos.toDouble()).subtract(0.5).normalize(); + pos = pos.add(direction.multiply(0.01).xny()); + } } } diff --git a/src/projectzombie/entity/EntityBoss.java b/src/projectzombie/entity/EntityBoss.java index 45f0aa4..efc2833 100755 --- a/src/projectzombie/entity/EntityBoss.java +++ b/src/projectzombie/entity/EntityBoss.java @@ -42,8 +42,6 @@ public class EntityBoss extends Entity implements IBossBar, EntityKillWithPartic private long seed; public EntityBoss(BdfObject bdf) { - super(bdf); - BdfClassLoad(bdf); } diff --git a/src/projectzombie/entity/EntityBullet.java b/src/projectzombie/entity/EntityBullet.java index bad3bc1..a4ab5e6 100755 --- a/src/projectzombie/entity/EntityBullet.java +++ b/src/projectzombie/entity/EntityBullet.java @@ -25,8 +25,6 @@ public class EntityBullet extends EntityParticle private double damage; public EntityBullet(BdfObject bdf) { - super(bdf); - BdfClassLoad(bdf); } diff --git a/src/projectzombie/entity/EntityContainer.java b/src/projectzombie/entity/EntityContainer.java index 28f6e81..4bd1aff 100644 --- a/src/projectzombie/entity/EntityContainer.java +++ b/src/projectzombie/entity/EntityContainer.java @@ -14,8 +14,6 @@ public class EntityContainer extends Entity implements EntityHoldsEntities private Entity[] entities; public EntityContainer(BdfObject bdf) { - super(bdf); - BdfClassLoad(bdf); } diff --git a/src/projectzombie/entity/EntityDummy.java b/src/projectzombie/entity/EntityDummy.java index 6f93da1..892af22 100755 --- a/src/projectzombie/entity/EntityDummy.java +++ b/src/projectzombie/entity/EntityDummy.java @@ -8,8 +8,6 @@ import projectzombie.model.Model; public class EntityDummy extends Entity implements EntityAlive { public EntityDummy(BdfObject bdf) { - super(bdf); - BdfClassLoad(bdf); } diff --git a/src/projectzombie/entity/EntityExplosion.java b/src/projectzombie/entity/EntityExplosion.java index b000a78..04cbc24 100755 --- a/src/projectzombie/entity/EntityExplosion.java +++ b/src/projectzombie/entity/EntityExplosion.java @@ -23,8 +23,6 @@ public class EntityExplosion extends Entity private int radius; public EntityExplosion(BdfObject bdf) { - super(bdf); - BdfClassLoad(bdf); } diff --git a/src/projectzombie/entity/EntityGrapplingHook.java b/src/projectzombie/entity/EntityGrapplingHook.java index 11de793..6873bcd 100755 --- a/src/projectzombie/entity/EntityGrapplingHook.java +++ b/src/projectzombie/entity/EntityGrapplingHook.java @@ -18,8 +18,6 @@ public class EntityGrapplingHook extends Entity private Entity entity; public EntityGrapplingHook(BdfObject bdf) { - super(bdf); - BdfClassLoad(bdf); } diff --git a/src/projectzombie/entity/EntityItem.java b/src/projectzombie/entity/EntityItem.java index f07e53a..92ebf6a 100755 --- a/src/projectzombie/entity/EntityItem.java +++ b/src/projectzombie/entity/EntityItem.java @@ -16,8 +16,6 @@ public class EntityItem extends EntityParticle private long age = 0; public EntityItem(BdfObject bdf) { - super(bdf); - BdfClassLoad(bdf); } diff --git a/src/projectzombie/entity/EntityParticle.java b/src/projectzombie/entity/EntityParticle.java index e4fedd0..13c0e35 100755 --- a/src/projectzombie/entity/EntityParticle.java +++ b/src/projectzombie/entity/EntityParticle.java @@ -12,8 +12,7 @@ public abstract class EntityParticle extends Entity public abstract int getParticleCount(); public abstract EntityParticlePart getParticleAt(int id); - public EntityParticle(BdfObject bdf) { - super(bdf); + protected EntityParticle() { } public EntityParticle(Vec3d pos, Vec3d velocity) { diff --git a/src/projectzombie/entity/EntityTnt.java b/src/projectzombie/entity/EntityTnt.java index d0cb5c0..56f2393 100755 --- a/src/projectzombie/entity/EntityTnt.java +++ b/src/projectzombie/entity/EntityTnt.java @@ -25,8 +25,6 @@ public class EntityTnt extends Entity implements EntityHoldsEntities } public EntityTnt(BdfObject bdf) { - super(bdf); - smoke_particles = new ParticleSmokeTrail(this); BdfClassLoad(bdf); } diff --git a/src/projectzombie/entity/EntityZombie.java b/src/projectzombie/entity/EntityZombie.java index 79254ba..491d2da 100755 --- a/src/projectzombie/entity/EntityZombie.java +++ b/src/projectzombie/entity/EntityZombie.java @@ -37,9 +37,8 @@ public class EntityZombie extends Entity implements EntityAlive, EntityKillWithP protected boolean crossUnwalkable = false; private int walking_for = 0; - public EntityZombie(BdfObject bdf) { - super(bdf); - + public EntityZombie(BdfObject bdf) + { // Set some settings hitbox = 0.5; isSolid = true; diff --git a/src/projectzombie/entity/player/EntityPlayer.java b/src/projectzombie/entity/player/EntityPlayer.java index e7991cc..417b62e 100755 --- a/src/projectzombie/entity/player/EntityPlayer.java +++ b/src/projectzombie/entity/player/EntityPlayer.java @@ -2,9 +2,12 @@ package projectzombie.entity.player; import java.util.ArrayList; +import org.lwjgl.opengl.GL33; + import bdf.types.BdfNamedList; import bdf.types.BdfObject; import gl_engine.MathHelpers; +import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec2i; import gl_engine.vec.Vec3d; @@ -67,7 +70,6 @@ public class EntityPlayer extends Entity implements private Vec2i last_chunk; public EntityPlayer(BdfObject bdf) { - super(bdf); BdfClassLoad(bdf); } @@ -262,12 +264,12 @@ public class EntityPlayer extends Entity implements Layer layer = Main.world.getLayer(); ItemStack is = inventory.getItem(inventory_hand); + Vec2d place_pos = getPos().xz().add(MathHelpers.moveTowards2(0.5, Math.toRadians(angle))); - if(is.isEmpty() || !is.item.onPlayerLeftClick(is, Main.world.getLayer(), chunk, this)) + if(is.isEmpty() || !is.item.onPlayerLeftClick(is, Main.world.getLayer(), this, place_pos)) { ItemTool tool = (is.item instanceof ItemTool) ? (ItemTool) is.item : null; - - Vec2i pos = getPos().xz().add(MathHelpers.moveTowards2(0.5, Math.toRadians(angle))).toInt(); + Vec2i pos = place_pos.toInt(); for(int ti=0;ti<2;ti++) { @@ -321,8 +323,9 @@ public class EntityPlayer extends Entity implements if(dead || in_animation) return; ItemStack is = inventory.getItem(inventory_hand); + Vec2d place_pos = getPos().xz().add(MathHelpers.moveTowards2(1, Math.toRadians(angle))); - if(is.isEmpty() || !is.item.onPlayerRightClick(is, Main.world.getLayer(), chunk, this)) { + if(is.isEmpty() || !is.item.onPlayerRightClick(is, Main.world.getLayer(), this, place_pos)) { activateTile(); } } @@ -394,6 +397,46 @@ public class EntityPlayer extends Entity implements } } + public void render() + { + Model model = getModel(); + model.setModel(Matrix4.identity()); + model.render(); + + ItemStack holding = inventory.getItem(inventory_hand); + + if(holding != null && !holding.isEmpty()) + { + Vec3d ppos = getPos(); + + Model model_place = holding.item.getPlaceModel(holding); + Model model_spawn = holding.item.getSpawnModel(holding); + Vec2d pos = ppos.xz().add(MathHelpers.moveTowards2(1, Math.toRadians(angle))); + + if(model_place != null || model_spawn != null) + { + GL33.glUniform4f(Main.window.glsl_color, 0.5f, 0.75f, 0.5f, 1); + } + + if(model_place != null) + { + model_place.setModel(Matrix4.translate(Math.floor(pos.x) - ppos.x + 0.5, 0, Math.floor(pos.y) - ppos.z + 0.5)); + model_place.render(); + } + + if(model_spawn != null) + { + model_spawn.setModel(Matrix4.translate(pos.x - ppos.x, 0, pos.y - ppos.z)); + model_spawn.render(); + } + + if(model_place != null || model_spawn != null) + { + GL33.glUniform4f(Main.window.glsl_color, 1, 1, 1, 1); + } + } + } + @Override public int bloodParticles() { return 12; diff --git a/src/projectzombie/entity/tileentity/TileEntity.java b/src/projectzombie/entity/tileentity/TileEntity.java new file mode 100644 index 0000000..0dd8d86 --- /dev/null +++ b/src/projectzombie/entity/tileentity/TileEntity.java @@ -0,0 +1,22 @@ +package projectzombie.entity.tileentity; + +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; +import projectzombie.entity.Entity; +import projectzombie.init.Models; +import projectzombie.model.IModel; + +public abstract class TileEntity extends Entity +{ + public TileEntity(Vec2i pos) { + super(new Vec3d(pos.x, 0, pos.y), new Vec3d(0, 0, 0)); + } + + protected TileEntity() { + } + + @Override + public IModel getModel() { + return Models.EMPTY; + } +} diff --git a/src/projectzombie/entity/tileentity/TileEntityCampfire.java b/src/projectzombie/entity/tileentity/TileEntityCampfire.java new file mode 100644 index 0000000..58ab883 --- /dev/null +++ b/src/projectzombie/entity/tileentity/TileEntityCampfire.java @@ -0,0 +1,22 @@ +package projectzombie.entity.tileentity; + +import bdf.types.BdfObject; +import gl_engine.vec.Vec2i; +import projectzombie.world.chunk.Chunk; +import projectzombie.world.layer.Layer; + +public class TileEntityCampfire extends TileEntity +{ + public TileEntityCampfire(BdfObject bdf) { + BdfClassLoad(bdf); + } + + public TileEntityCampfire(Vec2i pos) { + super(pos); + } + + @Override + public void tick(Chunk chunk, Layer layer) { + super.tick(chunk, layer); + } +} diff --git a/src/projectzombie/init/Entities.java b/src/projectzombie/init/Entities.java index 12a0b09..54fa032 100755 --- a/src/projectzombie/init/Entities.java +++ b/src/projectzombie/init/Entities.java @@ -16,6 +16,7 @@ import projectzombie.entity.EntityTnt; import projectzombie.entity.EntityZombie; import projectzombie.entity.EntityZombieArmored; import projectzombie.entity.player.EntityPlayer; +import projectzombie.entity.tileentity.TileEntityCampfire; public class Entities { @@ -47,5 +48,6 @@ public class Entities register(EntityBoss.class); register(EntityPlayer.class); register(EntityContainer.class); + register(TileEntityCampfire.class); } } diff --git a/src/projectzombie/init/Items.java b/src/projectzombie/init/Items.java index 4d37cd2..5418e44 100755 --- a/src/projectzombie/init/Items.java +++ b/src/projectzombie/init/Items.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import projectzombie.items.Item; import projectzombie.items.ItemAcorn; import projectzombie.items.ItemAmmo; +import projectzombie.items.ItemCampfire; import projectzombie.items.ItemEmpty; import projectzombie.items.ItemFlare; import projectzombie.items.ItemFlint; @@ -33,29 +34,24 @@ public class Items public static void init() { register(EMPTY); - register(AMMO); register(HEALTH_POTION); register(TNT); register(LANTERN); register(FLARE); register(GRAPPLING_HOOK); - register(SPAWN_ZOMBIE); register(SPAWN_DUMMY); - register(ROCK); register(FLINT); register(LOG); register(ACORN); register(PLANT_FIBRE); register(HEMP_SEED); - register(AMMO); - register(INFESTATION); - register(FLINT_HATCHET); + register(CAMPFIRE); } public static final Item AMMO = new ItemAmmo(); @@ -65,18 +61,15 @@ public class Items public static final Item LANTERN = new ItemLantern(); public static final Item FLARE = new ItemFlare(); public static final Item GRAPPLING_HOOK = new ItemGrapplingHook(); - public static final Item SPAWN_ZOMBIE = new ItemSpawnZombie(); public static final Item SPAWN_DUMMY = new ItemSpawnDummy(); - public static final Item ROCK = new ItemRock(); public static final Item FLINT = new ItemFlint(); public static final Item LOG = new ItemLog(); public static final Item ACORN = new ItemAcorn(); public static final Item HEMP_SEED = new ItemHempSeed(); public static final Item PLANT_FIBRE = new ItemPlantFibre(); - + public static final Item CAMPFIRE = new ItemCampfire(); public static final Item FLINT_HATCHET = new ItemFlintHatchet(); - public static final Item INFESTATION = new ItemInfestation(); } diff --git a/src/projectzombie/init/Models.java b/src/projectzombie/init/Models.java index 2096cf6..1d2672a 100755 --- a/src/projectzombie/init/Models.java +++ b/src/projectzombie/init/Models.java @@ -27,6 +27,8 @@ public class Models public static final Model TILE_TREE = new ModelTree(); public static final Model TILE_TREE_SNOW = new ModelTreeSnow(); + public static final Model TILE_CAMPFIRE = new ModelCross(Resources.ATLAS.get("/tile/campfire.png")); + public static final Model TILE_SAPLING_1 = new ModelCross(Resources.ATLAS.get("/tile/sapling1.png")); public static final Model TILE_SAPLING_2 = new ModelCross(Resources.ATLAS.get("/tile/sapling2.png")); public static final Model TILE_SAPLING_3 = new ModelCross(Resources.ATLAS.get("/tile/sapling3.png")); @@ -103,11 +105,14 @@ public class Models public static final ModelGui UI_BUTTON_PLAY_HOVER = new ModelGui(Resources.ATLAS.get("/gui/button_play_hover.png"), new Vec2d(1.875, 1.875)); public static final ModelGui UI_LABEL = new ModelGui(Resources.ATLAS.get("/gui/label.png"), new Vec2d(24, 3)); public static final ModelGui UI_LABEL_RECIPE = new ModelGui(Resources.ATLAS.get("/gui/label_recipe.png"), new Vec2d(12, 3)); - public static final ModelGui UI_SELECTION_BOX_WIDE = new ModelGui(Resources.ATLAS.get("/gui/selection_box_wide.png"), new Vec2d(24, 12)); - public static final ModelGui UI_SELECTION_BOX_BIG = new ModelGui(Resources.ATLAS.get("/gui/selection_box_big.png"), new Vec2d(12, 12)); public static final ModelGui UI_TEXT_BOX = new ModelGui(Resources.ATLAS.get("/gui/text_box.png"), new Vec2d(12, 1.5)); public static final ModelGui UI_TEXT_CURSOR = new ModelGui(Resources.ATLAS.get("/gui/text_cursor.png"), 2, 50); + public static final ModelGui UI_SELECTION_BOX_WIDE = new ModelGui(Resources.ATLAS.get("/gui/selection_box_wide.png"), new Vec2d(24, 12)); + public static final ModelGui UI_SELECTION_BOX_CRAFTING = new ModelGui(Resources.ATLAS.get("/gui/selection_box_crafting.png"), new Vec2d(12, 12)); + public static final ModelGui UI_SELECTION_BOX_STORAGE = new ModelGui(Resources.ATLAS.get("/gui/selection_box_storage.png"), new Vec2d(12, 12)); + public static final ModelGui UI_ITEM_SLOT_STORAGE = new ModelGui(Resources.ATLAS.get("/gui/item_slot_storage.png"), new Vec2d(1.5, 1.5)); + public static final ModelGui UI_HEALTH_FG = new ModelGui(Resources.ATLAS.get("/gui/health_full.png"), new Vec2d(6, 0.375)); public static final ModelGui UI_HEALTH_BG = new ModelGui(Resources.ATLAS.get("/gui/health_empty.png"), new Vec2d(6, 0.375)); public static final ModelGui UI_ITEM_SLOTS = new ModelGui(Resources.ATLAS.get("/gui/hotbar.png"), new Vec2d(15, 1.5)); @@ -126,6 +131,7 @@ public class Models public static final ModelItem UI_SLOT_CLOTHING_BOOTS = new ModelItem(Resources.ATLAS.get("/gui/slot_clothing_boots.png")); public static final ModelItem ITEM_EMPTY = ModelItem.createEmpty(); + public static final ModelItem ITEM_CAMPFIRE = new ModelItem(Resources.ATLAS.get("/tile/campfire.png")); public static final ModelItem ITEM_GRAPPLING_HOOK = new ModelItem(Resources.ATLAS.get("/item/grappling_hook.png")); public static final ModelItem ITEM_HEALTH_POTION = new ModelItem(Resources.ATLAS.get("/item/health_potion.png")); public static final ModelItem ITEM_AMMO_BOX = new ModelItem(Resources.ATLAS.get("/item/ammo_box.png")); diff --git a/src/projectzombie/init/Recipes.java b/src/projectzombie/init/Recipes.java index a33729e..c9f5c82 100644 --- a/src/projectzombie/init/Recipes.java +++ b/src/projectzombie/init/Recipes.java @@ -54,6 +54,14 @@ public class Recipes Crafting.BASIC, }, new ItemStack(Items.FLINT_HATCHET, 1))); + recipies.add(new RecipeBasic( + new ItemStack[] { + new ItemStack(Items.LOG, 1), + new ItemStack(Items.ROCK, 1), + }, new Crafting[] { + Crafting.BASIC, + }, new ItemStack(Items.CAMPFIRE, 1))); + } } diff --git a/src/projectzombie/init/Tiles.java b/src/projectzombie/init/Tiles.java index d6c7883..7bfa986 100755 --- a/src/projectzombie/init/Tiles.java +++ b/src/projectzombie/init/Tiles.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import projectzombie.tiles.Tile; import projectzombie.tiles.TileBossPortal; import projectzombie.tiles.TileCactus; +import projectzombie.tiles.TileCampfire; import projectzombie.tiles.TileChest; import projectzombie.tiles.TileDirt; import projectzombie.tiles.TileGrass; @@ -74,6 +75,7 @@ public class Tiles register(GRASS_INFESTED); register(TALL_GRASS); register(SAPLING); + register(CAMPFIRE); } public static final Tile GRASS = new TileGrass(); @@ -103,4 +105,5 @@ public class Tiles public static final Tile TALL_GRASS = new TileTallGrass(); public static final Tile SAPLING = new TileSapling(); public static final Tile HEMP = new TileHemp(); + public static final Tile CAMPFIRE = new TileCampfire(); } diff --git a/src/projectzombie/input/types/InputGame.java b/src/projectzombie/input/types/InputGame.java index 962d50d..442b779 100755 --- a/src/projectzombie/input/types/InputGame.java +++ b/src/projectzombie/input/types/InputGame.java @@ -4,9 +4,13 @@ import gl_engine.MathHelpers; import gl_engine.vec.Vec2d; import projectzombie.Main; import projectzombie.inventory.Crafting; +import projectzombie.inventory.Inventory; import projectzombie.menu.MenuGamePause; import projectzombie.menu.MenuInventory; import projectzombie.menu.MenuInventoryBasic; +import projectzombie.menu.MenuInventoryStorage; +import projectzombie.menu.gui.GUIItemSlotGetter; +import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.ChunkEventHandler; public class InputGame implements Input diff --git a/src/projectzombie/items/Item.java b/src/projectzombie/items/Item.java index efcc843..569d235 100755 --- a/src/projectzombie/items/Item.java +++ b/src/projectzombie/items/Item.java @@ -1,9 +1,15 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.Entity; import projectzombie.entity.EntityHasInventory; import projectzombie.entity.player.EntityPlayer; +import projectzombie.init.Models; import projectzombie.inventory.IInventory; +import projectzombie.items.modifier.ItemModifierDamage; +import projectzombie.model.Model; import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; @@ -14,11 +20,11 @@ public abstract class Item public int id; public int max = 99; - public boolean onPlayerLeftClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { + public boolean onPlayerLeftClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { return false; } - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { return false; } @@ -30,6 +36,14 @@ public abstract class Item return 0; } + public Model getPlaceModel(ItemStack stack) { + return null; + } + + public Model getSpawnModel(ItemStack stack) { + return null; + } + public abstract ModelItem getModel(ItemStack stack); public void onPickedUp(ItemStack stack, Layer layer, Chunk chunk, Entity entity) @@ -47,4 +61,15 @@ public abstract class Item entity_i.addItem(stack); } } + + public double getDamage(ItemStack stack) + { + ItemModifierDamage damage_modifier = (ItemModifierDamage)stack.getModifier(ItemModifierDamage.class); + + if(damage_modifier == null) { + return 0; + } + + return (double)damage_modifier.getDamage() / (double)damage_modifier.getMaxDamage(); + } } diff --git a/src/projectzombie/items/ItemAcorn.java b/src/projectzombie/items/ItemAcorn.java index 90e38f8..65ba89e 100644 --- a/src/projectzombie/items/ItemAcorn.java +++ b/src/projectzombie/items/ItemAcorn.java @@ -1,9 +1,12 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; import projectzombie.init.Tiles; +import projectzombie.model.Model; import projectzombie.model.ModelItem; import projectzombie.tiles.Tile; import projectzombie.util.math.ItemStack; @@ -24,13 +27,18 @@ public class ItemAcorn extends Item } @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { + public Model getPlaceModel(ItemStack stack) { + return Models.TILE_SAPLING_1; + } + + @Override + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) + { + Vec2i pos = place_pos.toInt(); + Tile bt = layer.getBackTile(pos).tile; - Vec2i tpos = player.getPos().xz().toInt(); - Tile bt = chunk.getBackTile(tpos).tile; - - if((bt == Tiles.GRASS || bt == Tiles.SNOW) && chunk.getFrontTile(tpos).tile == Tiles.VOID) { - chunk.setFrontTile(Tiles.SAPLING.getDefaultState(), tpos); + if((bt == Tiles.GRASS || bt == Tiles.SNOW) && layer.getFrontTile(pos).tile == Tiles.VOID) { + layer.setFrontTile(Tiles.SAPLING.getDefaultState(), pos); stack.count -= 1; return true; } diff --git a/src/projectzombie/items/ItemCampfire.java b/src/projectzombie/items/ItemCampfire.java new file mode 100644 index 0000000..a8bc72a --- /dev/null +++ b/src/projectzombie/items/ItemCampfire.java @@ -0,0 +1,47 @@ +package projectzombie.items; + +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import projectzombie.entity.player.EntityPlayer; +import projectzombie.init.Models; +import projectzombie.init.Tiles; +import projectzombie.model.Model; +import projectzombie.model.ModelItem; +import projectzombie.util.math.ItemStack; +import projectzombie.world.chunk.Chunk; +import projectzombie.world.layer.Layer; + +public class ItemCampfire extends Item +{ + + @Override + public ModelItem getModel(ItemStack stack) { + return Models.ITEM_CAMPFIRE; + } + + @Override + public Model getPlaceModel(ItemStack stack) { + return Models.TILE_CAMPFIRE; + } + + @Override + public String getName(ItemStack stack) { + return "Campfire"; + } + + @Override + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) + { + Vec2i pos = place_pos.toInt(); + + if(layer.getFrontTile(pos).tile != Tiles.VOID) { + return false; + } + + stack.count -= 1; + layer.setFrontTile(Tiles.CAMPFIRE.getDefaultState(), pos); + + return true; + } + +} diff --git a/src/projectzombie/items/ItemFlare.java b/src/projectzombie/items/ItemFlare.java index 3b63add..44c66be 100755 --- a/src/projectzombie/items/ItemFlare.java +++ b/src/projectzombie/items/ItemFlare.java @@ -1,5 +1,8 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.EntityFlare; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; @@ -17,7 +20,7 @@ public class ItemFlare extends Item } @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { layer.spawnEntity(new EntityFlare(player.getPos(), player.getVelocity(), player.angle)); stack.count -= 1; return true; diff --git a/src/projectzombie/items/ItemGrapplingHook.java b/src/projectzombie/items/ItemGrapplingHook.java index 4695e4f..281f091 100755 --- a/src/projectzombie/items/ItemGrapplingHook.java +++ b/src/projectzombie/items/ItemGrapplingHook.java @@ -1,5 +1,8 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.EntityGrapplingHook; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; @@ -24,7 +27,7 @@ public class ItemGrapplingHook extends Item } @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { layer.spawnEntity(new EntityGrapplingHook(player.getPos(), ItemModifierMeta.getStackMeta(stack), player)); stack.count -= 1; diff --git a/src/projectzombie/items/ItemHealthPotion.java b/src/projectzombie/items/ItemHealthPotion.java index 0131448..bc0f6af 100755 --- a/src/projectzombie/items/ItemHealthPotion.java +++ b/src/projectzombie/items/ItemHealthPotion.java @@ -1,5 +1,8 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; import projectzombie.items.modifier.ItemModifierMeta; @@ -22,7 +25,7 @@ public class ItemHealthPotion extends Item } @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { player.addHealth(ItemModifierMeta.getStackMeta(stack)); stack.count -= 1; return true; diff --git a/src/projectzombie/items/ItemHempSeed.java b/src/projectzombie/items/ItemHempSeed.java index 769873e..bc6d11e 100644 --- a/src/projectzombie/items/ItemHempSeed.java +++ b/src/projectzombie/items/ItemHempSeed.java @@ -1,9 +1,12 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; import projectzombie.init.Tiles; +import projectzombie.model.Model; import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; @@ -23,12 +26,17 @@ public class ItemHempSeed extends Item } @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { + public Model getPlaceModel(ItemStack stack) { + return Models.TILE_HEMP[0]; + } + + @Override + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) + { + Vec2i pos = place_pos.toInt(); - Vec2i tpos = player.getPos().xz().toInt(); - - if(chunk.getBackTile(tpos).tile == Tiles.GRASS && chunk.getFrontTile(tpos).tile == Tiles.VOID) { - chunk.setFrontTile(Tiles.HEMP.getDefaultState(), tpos); + if(layer.getBackTile(pos).tile == Tiles.GRASS && layer.getFrontTile(pos).tile == Tiles.VOID) { + layer.setFrontTile(Tiles.HEMP.getDefaultState(), pos); stack.count -= 1; return true; } diff --git a/src/projectzombie/items/ItemInfestation.java b/src/projectzombie/items/ItemInfestation.java index e104f93..3949dc7 100644 --- a/src/projectzombie/items/ItemInfestation.java +++ b/src/projectzombie/items/ItemInfestation.java @@ -1,5 +1,8 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; import projectzombie.init.Tiles; @@ -17,8 +20,8 @@ public class ItemInfestation extends Item } @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { - chunk.setBackTile(Tiles.GRASS_INFESTED.getDefaultState(), player.getPos().xz().toInt()); + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { + layer.setBackTile(Tiles.GRASS_INFESTED.getDefaultState(), place_pos.toInt()); stack.count -= 1; return true; } diff --git a/src/projectzombie/items/ItemLantern.java b/src/projectzombie/items/ItemLantern.java index 9d0489e..e384db6 100755 --- a/src/projectzombie/items/ItemLantern.java +++ b/src/projectzombie/items/ItemLantern.java @@ -1,10 +1,13 @@ package projectzombie.items; import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; import projectzombie.init.Tiles; +import projectzombie.model.Model; import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; @@ -24,11 +27,17 @@ public class ItemLantern extends Item } @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) + public Model getPlaceModel(ItemStack stack) { + return Models.TILE_LANTERN; + } + + @Override + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { - 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); + Vec2i pos = place_pos.toInt(); + + if(layer.getFrontTile(pos).tile == Tiles.VOID) { + layer.setFrontTile(Tiles.LANTERN.getDefaultState(), pos); stack.count -= 1; return true; } diff --git a/src/projectzombie/items/ItemSpawn.java b/src/projectzombie/items/ItemSpawn.java index ea1990f..c5aac9e 100755 --- a/src/projectzombie/items/ItemSpawn.java +++ b/src/projectzombie/items/ItemSpawn.java @@ -1,5 +1,7 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; import gl_engine.vec.Vec3d; import projectzombie.entity.player.EntityPlayer; import projectzombie.util.math.ItemStack; @@ -9,13 +11,13 @@ import projectzombie.world.layer.Layer; public abstract class ItemSpawn extends Item { @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { - this.spawnEntity(layer, chunk, player.getPos(), player.getVelocity()); + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { + this.spawnEntity(layer, player.getPos(), player.getVelocity()); stack.count -= 1; return true; } - public void spawnEntity(Layer layer, Chunk chunk, Vec3d pos, Vec3d velocity) { + public void spawnEntity(Layer layer, Vec3d pos, Vec3d velocity) { } } diff --git a/src/projectzombie/items/ItemTnt.java b/src/projectzombie/items/ItemTnt.java index 8622f3b..e3bc7ba 100755 --- a/src/projectzombie/items/ItemTnt.java +++ b/src/projectzombie/items/ItemTnt.java @@ -1,5 +1,8 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.EntityTnt; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; @@ -22,7 +25,7 @@ public class ItemTnt extends Item } @Override - public boolean onPlayerRightClick(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { + public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos) { layer.spawnEntity(new EntityTnt(player.getPos(), player.getVelocity(), player.angle, ItemModifierMeta.getStackMeta(stack), 5000)); stack.count -= 1; diff --git a/src/projectzombie/items/modifier/ItemModifierDamage.java b/src/projectzombie/items/modifier/ItemModifierDamage.java index bd34ca6..1d39b78 100644 --- a/src/projectzombie/items/modifier/ItemModifierDamage.java +++ b/src/projectzombie/items/modifier/ItemModifierDamage.java @@ -17,6 +17,14 @@ public class ItemModifierDamage extends ItemModifier BdfClassLoad(bdf); } + public int getDamage() { + return damage; + } + + public int getMaxDamage() { + return max; + } + public void repair() { damage = 0; } diff --git a/src/projectzombie/items/spawner/ItemSpawnDummy.java b/src/projectzombie/items/spawner/ItemSpawnDummy.java index ae3401b..c98c3d8 100644 --- a/src/projectzombie/items/spawner/ItemSpawnDummy.java +++ b/src/projectzombie/items/spawner/ItemSpawnDummy.java @@ -18,8 +18,8 @@ public class ItemSpawnDummy extends ItemSpawn } @Override - public void spawnEntity(Layer layer, Chunk chunk, Vec3d pos, Vec3d velocity) { - chunk.spawnEntity(new EntityDummy(pos, velocity)); + public void spawnEntity(Layer layer, Vec3d pos, Vec3d velocity) { + layer.spawnEntity(new EntityDummy(pos, velocity)); } } diff --git a/src/projectzombie/items/spawner/ItemSpawnZombie.java b/src/projectzombie/items/spawner/ItemSpawnZombie.java index 10d58bb..36b5f7b 100755 --- a/src/projectzombie/items/spawner/ItemSpawnZombie.java +++ b/src/projectzombie/items/spawner/ItemSpawnZombie.java @@ -18,8 +18,8 @@ public class ItemSpawnZombie extends ItemSpawn } @Override - public void spawnEntity(Layer layer, Chunk chunk, Vec3d pos, Vec3d velocity) { - chunk.spawnEntity(new EntityZombie(pos, velocity)); + public void spawnEntity(Layer layer, Vec3d pos, Vec3d velocity) { + layer.spawnEntity(new EntityZombie(pos, velocity)); } } diff --git a/src/projectzombie/menu/MenuInventoryBasic.java b/src/projectzombie/menu/MenuInventoryBasic.java index 90beddf..f4c45ef 100644 --- a/src/projectzombie/menu/MenuInventoryBasic.java +++ b/src/projectzombie/menu/MenuInventoryBasic.java @@ -30,14 +30,16 @@ public class MenuInventoryBasic extends MenuInventory Models.UI_INVENTORY.getWidth() * 21 / 256.0, -Models.UI_INVENTORY.getHeight() * 127 / 256.0), new Vec2d( Models.UI_INVENTORY.getWidth() * 234 / 256.0, - Models.UI_INVENTORY.getHeight() * 254 / 256.0), 100); + Models.UI_INVENTORY.getHeight() * 254 / 256.0), + recipies.length * Models.UI_LABEL_RECIPE.getHeight() * + 36 / 34.0 - Models.UI_INVENTORY.getHeight()); for(int i=0;i 0) + { + Matrix4 matrix_damage = Matrix4.multiply(holding_matrix, Matrix4.translate(0, -0.85 / 16, 0)); + matrix_damage = Matrix4.multiply(Matrix4.scale(new Vec3d(damage * 0.85, 0.85 / 16, 0)), matrix_damage); + + GL33.glUniform4f(Main.window.glsl_color, + 1 - (float)MathHelpers.squared(1 - damage), + 1 - (float)MathHelpers.squared(damage), 0, 1); + + Models.UI_PIXEL_WHITE.setModel(matrix_damage); + Models.UI_PIXEL_WHITE.render(); + + GL33.glUniform4f(Main.window.glsl_color, 1, 1, 1, 1); + } + if(holding.count > 1) { Matrix4 text_matrix = Matrix4.multiply(holding_matrix, Matrix4.translate(-0.75 / 4, -0.75 / 4, 0)); diff --git a/src/projectzombie/menu/gui/GUIItemSlot.java b/src/projectzombie/menu/gui/GUIItemSlot.java index 7e51049..6651a07 100644 --- a/src/projectzombie/menu/gui/GUIItemSlot.java +++ b/src/projectzombie/menu/gui/GUIItemSlot.java @@ -1,8 +1,12 @@ package projectzombie.menu.gui; +import org.lwjgl.opengl.GL33; + +import gl_engine.MathHelpers; import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; +import projectzombie.Main; import projectzombie.init.Models; import projectzombie.model.Model; import projectzombie.model.ModelItem; @@ -56,6 +60,12 @@ public class GUIItemSlot implements GUIComponent matrix = Matrix4.multiply(Matrix4.translate(pos.x, pos.y, 0), matrix); Model model = stack.item.getModel(stack).getGuiModel(); + if(getter.renderSlot()) + { + Models.UI_ITEM_SLOT_STORAGE.setModel(Matrix4.multiply(matrix, Matrix4.translate(-0.325, -0.325, 0))); + Models.UI_ITEM_SLOT_STORAGE.render(); + } + if(stack.isEmpty()) { model = model_empty; } @@ -78,6 +88,23 @@ public class GUIItemSlot implements GUIComponent if(renderItem && !stack.isEmpty()) { + double damage = stack.item.getDamage(stack); + + if(damage > 0) + { + Matrix4 matrix_damage = Matrix4.multiply(matrix, Matrix4.translate(0, -0.85 / 16, 0)); + matrix_damage = Matrix4.multiply(Matrix4.scale(new Vec3d(damage * 0.85, 0.85 / 16, 0)), matrix_damage); + + GL33.glUniform4f(Main.window.glsl_color, + 1 - (float)MathHelpers.squared(1 - damage), + 1 - (float)MathHelpers.squared(damage), 0, 1); + + Models.UI_PIXEL_WHITE.setModel(matrix_damage); + Models.UI_PIXEL_WHITE.render(); + + GL33.glUniform4f(Main.window.glsl_color, 1, 1, 1, 1); + } + if(stack.count > 1) { Matrix4 text_matrix = Matrix4.multiply(matrix, Matrix4.translate(-0.75 / 4, -0.75 / 4, 0)); diff --git a/src/projectzombie/menu/gui/GUIItemSlotGetter.java b/src/projectzombie/menu/gui/GUIItemSlotGetter.java index 76ac25f..be40de6 100644 --- a/src/projectzombie/menu/gui/GUIItemSlotGetter.java +++ b/src/projectzombie/menu/gui/GUIItemSlotGetter.java @@ -18,4 +18,8 @@ public interface GUIItemSlotGetter { public default boolean isReadOnly() { return false; } + + public default boolean renderSlot() { + return false; + } } diff --git a/src/projectzombie/model/ModelEmpty.java b/src/projectzombie/model/ModelEmpty.java index a9b52d1..14b0484 100644 --- a/src/projectzombie/model/ModelEmpty.java +++ b/src/projectzombie/model/ModelEmpty.java @@ -1,5 +1,6 @@ package projectzombie.model; +import gl_engine.matrix.Matrix4; import gl_engine.texture.TextureRef3D; public class ModelEmpty extends Model @@ -32,6 +33,10 @@ public class ModelEmpty extends Model return new int[0]; } + @Override + public void setModel(Matrix4 model) { + } + @Override public void render() {} diff --git a/src/projectzombie/tiles/Tile.java b/src/projectzombie/tiles/Tile.java index c8bec60..7c3e17b 100755 --- a/src/projectzombie/tiles/Tile.java +++ b/src/projectzombie/tiles/Tile.java @@ -61,4 +61,12 @@ public abstract class Tile } public abstract Model getModel(byte meta); + + public void onGenerate(Layer layer, Chunk chunk, TileState state, Vec2i pos) { + + } + + public void onDestroy(Layer layer, Chunk chunk, TileState state, Vec2i pos) { + + } } diff --git a/src/projectzombie/tiles/TileCampfire.java b/src/projectzombie/tiles/TileCampfire.java new file mode 100644 index 0000000..1a21396 --- /dev/null +++ b/src/projectzombie/tiles/TileCampfire.java @@ -0,0 +1,44 @@ +package projectzombie.tiles; + +import gl_engine.vec.Vec2i; +import projectzombie.entity.tileentity.TileEntityCampfire; +import projectzombie.init.Models; +import projectzombie.model.Model; +import projectzombie.util.math.TileState; +import projectzombie.world.chunk.Chunk; +import projectzombie.world.layer.Layer; + +public class TileCampfire extends Tile +{ + + public TileCampfire() { + this.emitsLight = true; + this.tileSolid = true; + this.tileHitbox = 0.5; + } + + @Override + public double getLightLevel(TileState state, Vec2i pos) { + return 1; + } + + @Override + public Model getModel(byte meta) { + return Models.TILE_CAMPFIRE; + } + + @Override + public void onGenerate(Layer layer, Chunk chunk, TileState state, Vec2i pos) { + super.onGenerate(layer, chunk, state, pos); + + chunk.createTileEntity(pos, new TileEntityCampfire(pos)); + } + + @Override + public void onDestroy(Layer layer, Chunk chunk, TileState state, Vec2i pos) { + super.onDestroy(layer, chunk, state, pos); + + chunk.destroyTileEntity(pos); + } + +} diff --git a/src/projectzombie/world/World.java b/src/projectzombie/world/World.java index f5f01fa..353d12a 100755 --- a/src/projectzombie/world/World.java +++ b/src/projectzombie/world/World.java @@ -1,7 +1,7 @@ package projectzombie.world; import java.io.File; -import java.nio.ByteBuffer; +import java.nio.FloatBuffer; import java.util.ArrayList; import java.util.Random; @@ -102,15 +102,8 @@ public class World implements IBdfClassManager public void render(Camera camera) { // Render the world and the player - if(!Main.player.dead) - { - Vec3d ppos = Main.player.getPos(); - Model model = Main.player.getModel(); - - model.setModel(Matrix4.translate( - ppos.x - Camera.camera.x - 0.5, ppos.y, - ppos.z - Camera.camera.y - 0.5)); - model.render(); + if(!Main.player.dead) { + Main.player.render(); } // Re-generate the particle pool if the pool has changed @@ -130,9 +123,9 @@ public class World implements IBdfClassManager if(changed) { - ByteBuffer pool = BufferUtils.createByteBuffer(pool_size * Model.SIZE * 16); + FloatBuffer pool = BufferUtils.createFloatBuffer(pool_size * Model.SIZE * 16); - loaded.render(camera, pool.asFloatBuffer(), 0); + loaded.render(camera, pool, 0); if(pool_vao != 0) { GL33.glDeleteVertexArrays(pool_vao); @@ -169,9 +162,9 @@ public class World implements IBdfClassManager else { - ByteBuffer pool = BufferUtils.createByteBuffer(pool_particle_count * Model.SIZE * 16); + FloatBuffer pool = BufferUtils.createFloatBuffer(pool_particle_count * Model.SIZE * 16); - loaded.render(camera, pool.asFloatBuffer(), 0); + loaded.render(camera, pool, 0); GL33.glBindVertexArray(pool_vao); diff --git a/src/projectzombie/world/chunk/Chunk.java b/src/projectzombie/world/chunk/Chunk.java index 1532004..c8d0b0f 100755 --- a/src/projectzombie/world/chunk/Chunk.java +++ b/src/projectzombie/world/chunk/Chunk.java @@ -24,6 +24,7 @@ import projectzombie.entity.EntityKillWithParticles; import projectzombie.entity.EntityParticle; import projectzombie.entity.EntityParticlePart; import projectzombie.entity.particle.ParticleBreak; +import projectzombie.entity.tileentity.TileEntity; import projectzombie.init.Tiles; import projectzombie.model.IModel; import projectzombie.model.Model; @@ -473,6 +474,40 @@ public class Chunk implements IBdfClassManager } } + public void createTileEntity(Vec2i pos, TileEntity te) + { + TileEntity te_old = getTileEntity(pos); + + // Kill the old tile entity if it exists + if(te_old != null) { + te_old.kill(); + } + + te.setPos(new Vec3d(pos.x, 0, pos.y)); + spawnEntity(te); + } + + public void destroyTileEntity(Vec2i pos) + { + TileEntity te = getTileEntity(pos); + + if(te != null) { + te.kill(); + } + } + + public TileEntity getTileEntity(Vec2i pos) + { + for(Entity e : entities) + { + if(e instanceof TileEntity && e.getPos().xz().toInt().equal(pos)) { + return (TileEntity)e; + } + } + + return null; + } + public void setBackTile(TileState tile, Vec2i pos) { // Get the id @@ -491,6 +526,8 @@ public class Chunk implements IBdfClassManager this.tiles_back_meta[id] = tile.meta; setDirty(); + + tile.tile.onGenerate(layer, this, tile, Vec2i.fromId(CHUNK_SIZE, id)); } public void setFrontTile(TileState tile, Vec2i pos) @@ -511,6 +548,8 @@ public class Chunk implements IBdfClassManager this.tiles_front_meta[id] = tile.meta; setDirty(); + + tile.tile.onGenerate(layer, this, tile, Vec2i.fromId(CHUNK_SIZE, id)); } public TileState getBackTile(Vec2i pos) diff --git a/src/projectzombie/world/layer/Layer.java b/src/projectzombie/world/layer/Layer.java index 93af066..b9a4d3b 100755 --- a/src/projectzombie/world/layer/Layer.java +++ b/src/projectzombie/world/layer/Layer.java @@ -11,9 +11,11 @@ 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.display.Camera; import projectzombie.entity.Entity; +import projectzombie.entity.tileentity.TileEntity; import projectzombie.init.LayerGenerators; import projectzombie.util.math.TileState; import projectzombie.util.math.map.Map2D; @@ -120,6 +122,33 @@ public class Layer implements IBdfClassManager return chunks.get(getChunkPosFromPos(pos)); } + public void createTileEntity(Vec2i pos, TileEntity te) + { + // Get the chunk pos + Vec2i c_pos = getChunkPosFromPos(pos); + + // Add the tile entity to that chunk + chunks.get(c_pos).createTileEntity(pos, te); + } + + public TileEntity getTileEntity(Vec2i pos) + { + // Get the chunk pos + Vec2i c_pos = getChunkPosFromPos(pos); + + // Get the tile entity from that chunk + return chunks.get(c_pos).getTileEntity(pos); + } + + public void destroyTileEntity(Vec2i pos) + { + // Get the chunk pos + Vec2i c_pos = getChunkPosFromPos(pos); + + // Destroy the tile entity from that chunk + chunks.get(c_pos).destroyTileEntity(pos); + } + public void setBackTile(TileState tile, Vec2i pos) { // Get the chunk pos diff --git a/src/resources/shader/environmentRenderer.fsh b/src/resources/shader/environmentRenderer.fsh index 7872ca1..4fca704 100644 --- a/src/resources/shader/environmentRenderer.fsh +++ b/src/resources/shader/environmentRenderer.fsh @@ -81,7 +81,7 @@ void main() vec3 light_day = max(vec3(0), pSunDepth.z < (texture(depthmap, sunDepthTexPos).r * 2 - 1 + depth_c ) ? lighting_day_high : lighting_day_low); - vec3 light_src = vec3(1, 1, 1) * (scaleLight(max(0, light.r)) - abs(pLightMapPos.y) * 0.1); + float light_src = scaleLight(max(0, light.r)) - abs(pLightMapPos.y) * 0.1; vec4 rgb = vec4((pRGB % 64) / 64.0, ((pRGB >> 6) % 64) / 64.0, ((pRGB >> 12) % 64) / 64.0, 1); vec4 color_grass = vec4(interpolate2RGB( @@ -93,7 +93,7 @@ void main() float fog = pCameraDepth; FragColor = (fog + (1 - fog) * textureRGB * (mod(int(pFlags / 4), 2) == 1 ? color_grass : vec4(1,1,1,1)) * color) - * vec4(biggest(light_day, light_src), pFade) * (mod(int(pFlags / 2), 2) == 1 ? rgb : vec4(1, 1, 1, 1)) + * vec4(light_day + max(0, light_src), pFade) * (mod(int(pFlags / 2), 2) == 1 ? rgb : vec4(1, 1, 1, 1)) * saturation + contrast; } diff --git a/src/resources/texture/gui/item_slot_storage.png b/src/resources/texture/gui/item_slot_storage.png new file mode 100644 index 0000000..ad2310f Binary files /dev/null and b/src/resources/texture/gui/item_slot_storage.png differ diff --git a/src/resources/texture/gui/selection_box_big.png b/src/resources/texture/gui/selection_box_crafting.png similarity index 100% rename from src/resources/texture/gui/selection_box_big.png rename to src/resources/texture/gui/selection_box_crafting.png diff --git a/src/resources/texture/gui/selection_box_storage.png b/src/resources/texture/gui/selection_box_storage.png new file mode 100644 index 0000000..86d81ed Binary files /dev/null and b/src/resources/texture/gui/selection_box_storage.png differ diff --git a/src/resources/texture/list.txt b/src/resources/texture/list.txt index 90b216d..2599da7 100644 --- a/src/resources/texture/list.txt +++ b/src/resources/texture/list.txt @@ -1,234 +1,237 @@ -./tile/hemp6.png -./tile/hemp7.png -./tile/hemp1.png -./tile/rock.png -./tile/rock_ice.png -./tile/sapling3.png -./tile/ladder.png -./tile/tree_leaves_snow.png -./tile/ice_wall.png -./tile/water.png -./tile/sandstone_wall.png -./tile/ladder_up.png -./tile/cactus4.png -./tile/tall_grass.png -./tile/cactus2.png -./tile/grass_infested.png -./tile/tree_branch_leaves.png -./tile/dirt.png -./tile/wall.png -./tile/tree_base.png -./tile/cactus1.png -./tile/sapling4.png -./tile/hemp3.png -./tile/cactus_top.png -./tile/tunnel_down.png -./tile/stone.png -./tile/snow.png -./tile/boss_portal.png -./tile/hemp4.png -./tile/sand.png -./tile/lantern.png -./tile/ice.png -./tile/sapling1.png -./tile/chest.png -./tile/hemp2.png -./tile/hemp8.png -./tile/cactus3.png -./tile/lava.png -./tile/tree_leaves.png -./tile/hemp5.png -./tile/lava_flow.png -./tile/grass.png -./tile/tree_branch.png -./tile/sandstone.png -./tile/tree_branch_leaves_snow.png -./tile/rock_sandstone.png -./tile/sapling2.png +./text/char_question.png +./text/char_l_a.png +./text/char_u_j.png +./text/char_l_u.png +./text/char_u_s.png +./text/char_l_s.png +./text/char_apostrophe.png +./text/char_plus.png +./text/char_l_e.png +./text/char_7.png +./text/char_minus.png +./text/char_u_r.png +./text/char_u_l.png +./text/char_obracket.png +./text/char_pow.png +./text/char_u_m.png +./text/char_l_t.png +./text/char_percent.png +./text/char_l_y.png +./text/char_0.png +./text/char_4.png +./text/char_l_r.png +./text/char_l_m.png +./text/char_cbracket.png +./text/char_u_g.png +./text/char_u_q.png +./text/char_u_i.png +./text/char_tilde.png +./text/char_l_w.png +./text/char_l_v.png +./text/char_fslash.png +./text/char_u_p.png +./text/char_gthan.png +./text/char_8.png +./text/char_unknown.png +./text/char_and.png +./text/char_osbracket.png +./text/char_u_n.png +./text/char_l_i.png +./text/char_u_y.png +./text/char_l_p.png +./text/char_lthan.png +./text/char_l_g.png +./text/char_bslash.png +./text/char_1.png +./text/char_u_z.png +./text/char_l_f.png +./text/char_u_w.png +./text/char_9.png +./text/char_l_x.png +./text/char_ccbracket.png +./text/char_l_o.png +./text/char_equals.png +./text/char_l_d.png +./text/char_dollar.png +./text/char_hashtag.png +./text/char_l_q.png +./text/char_u_o.png +./text/char_6.png +./text/char_u_d.png +./text/char_u_e.png +./text/char_exclamation.png +./text/char_vertical.png +./text/char_ocbracket.png +./text/char_u_k.png +./text/char_u_c.png +./text/char_l_n.png +./text/char_semicolon.png +./text/char_u_b.png +./text/char_u_f.png +./text/char_l_h.png +./text/char_l_k.png +./text/char_u_t.png +./text/char_3.png +./text/char_u_v.png +./text/char_u_h.png +./text/char_quotation.png +./text/char_u_a.png +./text/char_l_b.png +./text/char_underscore.png +./text/char_u_x.png +./text/char_comma.png +./text/char_csbracket.png +./text/char_l_l.png +./text/char_5.png +./text/char_star.png +./text/char_colon.png +./text/char_l_z.png +./text/char_space.png +./text/char_2.png +./text/char_at.png +./text/char_grave.png +./text/char_l_j.png +./text/char_fullstop.png +./text/char_l_c.png +./text/char_u_u.png ./list.txt -./item/log.png -./item/rock.png -./item/acorn.png -./item/ammo_box.png -./item/plant_fibre.png -./item/flint_hatchet.png -./item/hemp_seed.png -./item/shield_upgrade.png -./item/grappling_hook.png -./item/log_snow.png -./item/health_potion.png -./item/snow_pile.png -./item/gun_upgrade.png -./item/sandstone.png -./item/flint.png +./player/player_white_front_moving.png +./player/player_white_back_moving.png +./player/player_black_back_moving.png +./player/player_black_back_still.png ./player/player_white_back_still.png ./player/player_white_front_still.png ./player/player_black_front_moving.png ./player/player_black_front_still.png -./player/player_black_back_moving.png -./player/player_black_back_still.png -./player/player_white_back_moving.png -./player/player_white_front_moving.png -./gui/selection_box_wide.png -./gui/text_box.png -./gui/pixel_white.png -./gui/water.png -./gui/gun.png -./gui/button_delete.png -./gui/button_delete_hover.png -./gui/slot_armor_chest.png -./gui/pixel_black.png -./gui/slot_clothing_shirt.png -./gui/button_play.png -./gui/slot_armor_legs.png -./gui/selection_box_big.png -./gui/inventory.png -./gui/label.png -./gui/slot_clothing_pants.png -./gui/health_empty.png -./gui/label_recipe.png -./gui/hotbar_selected.png -./gui/health_full.png +./particle/smoke_trail.png +./particle/water.png +./particle/smoke_0.png +./particle/smoke_1.png +./particle/blood.png +./particle/lava.png +./particle/bullet.png +./particle/smoke_2.png +./particle/snow.png +./particle/rain.png +./particle/smoke_4.png +./particle/smoke_3.png +./particle/smoke_5.png ./gui/temperature.png -./gui/button_play_hover.png -./gui/text_cursor.png -./gui/slot_armor_helmet.png -./gui/slot_clothing_boots.png -./gui/hotbar.png -./gui/button_normal.png -./gui/shield.png +./gui/slot_armor_chest.png +./gui/health_empty.png ./gui/button_hover.png -./text/char_bslash.png -./text/char_dollar.png -./text/char_l_w.png -./text/char_u_d.png -./text/char_u_t.png -./text/char_space.png -./text/char_l_x.png -./text/char_l_k.png -./text/char_6.png -./text/char_unknown.png -./text/char_comma.png -./text/char_obracket.png -./text/char_u_w.png -./text/char_7.png -./text/char_l_f.png -./text/char_vertical.png -./text/char_plus.png -./text/char_u_a.png -./text/char_star.png -./text/char_9.png -./text/char_u_k.png -./text/char_grave.png -./text/char_u_n.png -./text/char_percent.png -./text/char_u_m.png -./text/char_exclamation.png -./text/char_1.png -./text/char_l_q.png -./text/char_l_z.png -./text/char_l_h.png -./text/char_u_c.png -./text/char_l_g.png -./text/char_l_s.png -./text/char_fullstop.png -./text/char_u_j.png -./text/char_l_m.png -./text/char_l_t.png -./text/char_u_v.png -./text/char_colon.png -./text/char_l_i.png -./text/char_l_y.png -./text/char_semicolon.png -./text/char_u_l.png -./text/char_apostrophe.png -./text/char_u_e.png -./text/char_5.png -./text/char_2.png -./text/char_3.png -./text/char_l_p.png -./text/char_and.png -./text/char_fslash.png -./text/char_l_u.png -./text/char_u_f.png -./text/char_u_u.png -./text/char_at.png -./text/char_l_e.png -./text/char_l_l.png -./text/char_u_g.png -./text/char_u_q.png -./text/char_u_b.png -./text/char_l_o.png -./text/char_csbracket.png -./text/char_osbracket.png -./text/char_minus.png -./text/char_l_v.png -./text/char_lthan.png -./text/char_u_s.png -./text/char_equals.png -./text/char_8.png -./text/char_ccbracket.png -./text/char_underscore.png -./text/char_u_x.png -./text/char_0.png -./text/char_l_d.png -./text/char_l_c.png -./text/char_l_j.png -./text/char_u_z.png -./text/char_u_h.png -./text/char_pow.png -./text/char_hashtag.png -./text/char_gthan.png -./text/char_cbracket.png -./text/char_u_i.png -./text/char_question.png -./text/char_u_o.png -./text/char_u_y.png -./text/char_l_r.png -./text/char_l_b.png -./text/char_ocbracket.png -./text/char_l_a.png -./text/char_quotation.png -./text/char_l_n.png -./text/char_u_p.png -./text/char_tilde.png -./text/char_u_r.png -./text/char_4.png -./entity/armored_zombie_back_moving.png -./entity/zombie_front_still.png -./entity/tnt.png +./gui/item_slot_storage.png +./gui/water.png +./gui/slot_armor_legs.png +./gui/button_normal.png +./gui/label.png +./gui/hotbar.png +./gui/slot_armor_helmet.png +./gui/selection_box_crafting.png +./gui/button_delete.png +./gui/text_cursor.png +./gui/inventory.png +./gui/button_delete_hover.png +./gui/button_play_hover.png +./gui/health_full.png +./gui/hotbar_selected.png +./gui/slot_clothing_shirt.png +./gui/selection_box_storage.png +./gui/pixel_white.png +./gui/pixel_black.png +./gui/slot_clothing_pants.png +./gui/text_box.png +./gui/shield.png +./gui/label_recipe.png +./gui/slot_clothing_boots.png +./gui/selection_box_wide.png +./gui/gun.png +./gui/button_play.png +./tile/cactus4.png +./tile/hemp1.png +./tile/dirt.png +./tile/lantern.png +./tile/hemp8.png +./tile/wall.png +./tile/cactus_top.png +./tile/cactus2.png +./tile/rock.png +./tile/water.png +./tile/hemp4.png +./tile/stone.png +./tile/tree_leaves.png +./tile/sapling2.png +./tile/ladder_up.png +./tile/sapling3.png +./tile/lava_flow.png +./tile/ice_wall.png +./tile/grass.png +./tile/chest.png +./tile/sapling4.png +./tile/lava.png +./tile/tall_grass.png +./tile/hemp5.png +./tile/sapling1.png +./tile/snow.png +./tile/sandstone_wall.png +./tile/rock_sandstone.png +./tile/hemp6.png +./tile/cactus1.png +./tile/campfire.png +./tile/tree_branch_leaves.png +./tile/tunnel_down.png +./tile/tree_branch_leaves_snow.png +./tile/tree_leaves_snow.png +./tile/rock_ice.png +./tile/boss_portal.png +./tile/ladder.png +./tile/hemp7.png +./tile/grass_infested.png +./tile/tree_branch.png +./tile/sand.png +./tile/tree_base.png +./tile/cactus3.png +./tile/sandstone.png +./tile/hemp3.png +./tile/hemp2.png +./tile/ice.png ./entity/flare.png -./entity/boss1/boss_walking.png +./entity/grappling_hook.png +./entity/zombie_back_moving.png +./entity/tnt.png +./entity/armored_zombie_back_moving.png +./entity/armored_zombie_front_moving.png +./entity/player/hair_side.png +./entity/player/head_top.png +./entity/player/head_side.png +./entity/player/head_back.png +./entity/player/head_bottom.png +./entity/player/hair_front.png +./entity/player/head_front.png +./entity/player/hair_back.png +./entity/player/hair_top.png +./entity/dummy.png +./entity/armored_zombie_front_still.png +./entity/armored_zombie_back_still.png +./entity/zombie_front_moving.png +./entity/boss1/boss_walking_firing.png ./entity/boss1/boss_firing.png ./entity/boss1/boss_still.png -./entity/boss1/boss_walking_firing.png -./entity/armored_zombie_back_still.png -./entity/armored_zombie_front_moving.png -./entity/player/head_back.png -./entity/player/hair_top.png -./entity/player/head_front.png -./entity/player/head_top.png -./entity/player/hair_side.png -./entity/player/head_side.png -./entity/player/hair_back.png -./entity/player/hair_front.png -./entity/player/head_bottom.png -./entity/grappling_hook.png +./entity/boss1/boss_walking.png ./entity/zombie_back_still.png -./entity/dummy.png -./entity/zombie_back_moving.png -./entity/armored_zombie_front_still.png -./entity/zombie_front_moving.png -./particle/smoke_1.png -./particle/water.png -./particle/rain.png -./particle/blood.png -./particle/snow.png -./particle/smoke_3.png -./particle/smoke_4.png -./particle/smoke_2.png -./particle/smoke_0.png -./particle/bullet.png -./particle/lava.png -./particle/smoke_trail.png -./particle/smoke_5.png +./entity/zombie_front_still.png +./item/acorn.png +./item/grappling_hook.png +./item/gun_upgrade.png +./item/shield_upgrade.png +./item/rock.png +./item/flint_hatchet.png +./item/log.png +./item/log_snow.png +./item/hemp_seed.png +./item/ammo_box.png +./item/plant_fibre.png +./item/health_potion.png +./item/snow_pile.png +./item/flint.png +./item/sandstone.png diff --git a/src/resources/texture/tile/campfire.png b/src/resources/texture/tile/campfire.png new file mode 100644 index 0000000..3d82566 Binary files /dev/null and b/src/resources/texture/tile/campfire.png differ