diff --git a/src/projectzombie/Main.java b/src/projectzombie/Main.java index f0e2155..7321c15 100755 --- a/src/projectzombie/Main.java +++ b/src/projectzombie/Main.java @@ -16,6 +16,7 @@ import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Entities; import projectzombie.init.Items; import projectzombie.init.LayerGenerators; +import projectzombie.init.Recipies; import projectzombie.init.Resources; import projectzombie.init.Sounds; import projectzombie.init.Tasks; @@ -68,6 +69,7 @@ public class Main Tasks.init(); Tiles.init(); LayerGenerators.init(); + Recipies.init(); // Create the display window = new DisplayWindow(); diff --git a/src/projectzombie/init/Recipies.java b/src/projectzombie/init/Recipies.java index 61507f7..cc0ccf0 100644 --- a/src/projectzombie/init/Recipies.java +++ b/src/projectzombie/init/Recipies.java @@ -11,6 +11,19 @@ public class Recipies { public static ArrayList recipies; + public static void init() + { + recipies = new ArrayList(); + + recipies.add(new RecipeBasic( + new ItemStack[] { + new ItemStack(Items.FLINT, 2, (short)0), + new ItemStack(Items.PLANT_FIBRE, 5, (short)0), + }, new Crafting[] { + Crafting.BASIC, + }, new ItemStack(Items.AMMO, 99, (short)0))); + } + public static Recipe[] getCraftableRecipies(Crafting tool) { int size = 0; @@ -32,17 +45,4 @@ public class Recipies return craftable_recipies; } - - public static void init() - { - recipies = new ArrayList(); - - recipies.add(new RecipeBasic( - new ItemStack[] { - new ItemStack(Items.FLINT, 2, (short)0), - new ItemStack(Items.PLANT_FIBRE, 5, (short)0), - }, new Crafting[] { - Crafting.BASIC, - }, new ItemStack(Items.AMMO, 99, (short)0))); - } } diff --git a/src/projectzombie/input/types/InputGame.java b/src/projectzombie/input/types/InputGame.java index 0ffd613..962d50d 100755 --- a/src/projectzombie/input/types/InputGame.java +++ b/src/projectzombie/input/types/InputGame.java @@ -3,6 +3,7 @@ package projectzombie.input.types; import gl_engine.MathHelpers; import gl_engine.vec.Vec2d; import projectzombie.Main; +import projectzombie.inventory.Crafting; import projectzombie.menu.MenuGamePause; import projectzombie.menu.MenuInventory; import projectzombie.menu.MenuInventoryBasic; @@ -77,7 +78,7 @@ public class InputGame implements Input @Override public void openInventory() { - Main.menu = new MenuInventoryBasic(Main.menu); + Main.menu = new MenuInventoryBasic(Main.menu, Crafting.BASIC); } @Override diff --git a/src/projectzombie/menu/MenuInventory.java b/src/projectzombie/menu/MenuInventory.java index 694272c..878d806 100644 --- a/src/projectzombie/menu/MenuInventory.java +++ b/src/projectzombie/menu/MenuInventory.java @@ -48,7 +48,7 @@ public abstract class MenuInventory extends Menu Inventory inventory = Main.player.getInventory(); - itemHolder = new GUIItemHolder(); + itemHolder = new GUIItemHolder(top_gui); item_slots = new GUIItemSlot[42]; armor_slots = new GUIItemSlot[6]; @@ -235,7 +235,7 @@ public abstract class MenuInventory extends Menu public void update() { super.update(); - top_gui.update(new Vec2d(CursorPosCallback.mx, CursorPosCallback.my)); + top_gui.update(CursorPosCallback.getCursorPos()); } } diff --git a/src/projectzombie/menu/MenuInventoryBasic.java b/src/projectzombie/menu/MenuInventoryBasic.java index b6226df..752f907 100644 --- a/src/projectzombie/menu/MenuInventoryBasic.java +++ b/src/projectzombie/menu/MenuInventoryBasic.java @@ -2,22 +2,55 @@ package projectzombie.menu; import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec2d; +import projectzombie.init.Items; import projectzombie.init.Models; +import projectzombie.init.Recipies; +import projectzombie.inventory.Crafting; +import projectzombie.inventory.recipe.Recipe; import projectzombie.menu.gui.GUIContainerSlider; +import projectzombie.menu.gui.GUIItemSlot; +import projectzombie.menu.gui.GUIItemSlotGetter; +import projectzombie.util.math.ItemStack; public class MenuInventoryBasic extends MenuInventory { private GUIContainerSlider slider; - public MenuInventoryBasic(Menu parent) { + public MenuInventoryBasic(Menu parent, Crafting tool) { super(parent); + Recipe[] recipies = Recipies.getCraftableRecipies(tool); + slider = new GUIContainerSlider(new Vec2d( - Models.UI_INVENTORY.getWidth() * 1 / 256.0, + Models.UI_INVENTORY.getWidth() * 21 / 256.0, -Models.UI_INVENTORY.getHeight() * 127 / 256.0), new Vec2d( - Models.UI_INVENTORY.getWidth() * 254 / 256.0, + Models.UI_INVENTORY.getWidth() * 234 / 256.0, Models.UI_INVENTORY.getHeight() * 254 / 256.0), 100); + for(int i=0;i pos.y + size.y) { + return null; + } + + mousePos = mousePos.add(new Vec2d(0, -scroll)); + + for(GUIComponent c : components) + { + if(c.checkMouseHover(mousePos)) + { + if(c instanceof GUIItemSlot) { + return (GUIItemSlot)c; + } + + if(c instanceof GUIContainer) + { + GUIItemSlot slot = ((GUIContainer)c).getHoveringItemSlot(mousePos); + + if(slot != null) { + return slot; + } + } + } + } + + return null; + } } diff --git a/src/projectzombie/menu/gui/GUIItemHolder.java b/src/projectzombie/menu/gui/GUIItemHolder.java index 15e77e6..ee26902 100644 --- a/src/projectzombie/menu/gui/GUIItemHolder.java +++ b/src/projectzombie/menu/gui/GUIItemHolder.java @@ -14,9 +14,10 @@ public class GUIItemHolder implements GUIComponent { private GUIItemSlot hover = null; private ItemStack holding = ItemStack.getEmpty(); + private GUIContainer gui; - public void setHover(GUIItemSlot slot) { - this.hover = slot; + public GUIItemHolder(GUIContainer gui) { + this.gui = gui; } @Override @@ -38,14 +39,11 @@ public class GUIItemHolder implements GUIComponent Text.render("" + holding.count, text_matrix); } } - - hover = null; } @Override public void update(Vec2d mousePos) { - // TODO Auto-generated method stub - + hover = gui.getHoveringItemSlot(mousePos); } @Override @@ -89,18 +87,29 @@ public class GUIItemHolder implements GUIComponent } // Put 1 item into the slot if the hovered slot is empty or equal to the holding slot - else if((hover.isEmpty() && this.hover.isItemAllowed(holding)) || hover.stackEquals(holding)) + else { - hover.count += 1; - holding.count -= 1; + ItemStack stack_from = hover; + ItemStack stack_to = holding; - hover.item = holding.item; - hover.meta = holding.meta; + if(!this.hover.isItemAllowed(stack_to)) { + stack_from = holding; + stack_to = hover; + } - this.hover.setItemStack(hover); + if( + stack_from.count + 1 <= stack_from.item.max && stack_to.count - 1 <= stack_to.item.max && + (stack_from.isEmpty() || stack_from.stackEquals(stack_to)) + ) { + stack_from.count += 1; + stack_to.count -= 1; + + stack_from.item = stack_to.item; + stack_from.meta = stack_to.meta; + + this.hover.setItemStack(hover); + } } - - this.hover = null; } @Override @@ -128,22 +137,27 @@ public class GUIItemHolder implements GUIComponent // Are these the same item if(holding.stackEquals(hover) && !holding.isEmpty() && !hover.isEmpty()) { - if(this.hover.isItemAllowed(holding)) - { - // Merge the hover stack into the holding stack - if(holding.count + hover.count > holding.item.max) { - int overflow = holding.count + hover.count - holding.item.max; - hover.count = holding.item.max; - holding.count = overflow; - } - - else { - hover.count += holding.count; - holding.count = 0; - } - - this.hover.setItemStack(hover); + ItemStack stack_from = hover; + ItemStack stack_to = holding; + + if(!this.hover.isItemAllowed(stack_to)) { + stack_from = holding; + stack_to = hover; } + + // Merge the hover stack into the holding stack + if(stack_to.count + stack_from.count > stack_to.item.max) { + int overflow = stack_to.count + stack_from.count - stack_to.item.max; + stack_from.count = stack_to.item.max; + stack_to.count = overflow; + } + + else { + stack_from.count += stack_to.count; + stack_to.count = 0; + } + + this.hover.setItemStack(hover); } else if(holding.isEmpty() || this.hover.isItemAllowed(holding)) @@ -161,8 +175,6 @@ public class GUIItemHolder implements GUIComponent this.hover.setItemStack(hover); } - - this.hover = null; } @Override diff --git a/src/projectzombie/menu/gui/GUIItemSlot.java b/src/projectzombie/menu/gui/GUIItemSlot.java index ece97d9..bfd6fd6 100644 --- a/src/projectzombie/menu/gui/GUIItemSlot.java +++ b/src/projectzombie/menu/gui/GUIItemSlot.java @@ -71,8 +71,6 @@ public class GUIItemSlot implements GUIComponent Models.UI_ITEM_HOVER.setModel(hover_matrix); Models.UI_ITEM_HOVER.render(); - - itemHolder.setHover(this); } if(renderItem && !stack.isEmpty()) @@ -98,16 +96,6 @@ public class GUIItemSlot implements GUIComponent return pos.x > px && pos.x < px + hitboxSize && pos.y > py && pos.y < py + hitboxSize; } - @Override - public void onMouseClick(Vec2d pos) { - itemHolder.setHover(this); - } - - @Override - public void onRightClick(Vec2d pos) { - itemHolder.setHover(this); - } - @Override public void onActivate() { } @@ -123,5 +111,13 @@ public class GUIItemSlot implements GUIComponent @Override public void onScroll(Vec2d mousePos, double amount) { } + + @Override + public void onRightClick(Vec2d mousePos) { + } + + @Override + public void onMouseClick(Vec2d mousePos) { + } } diff --git a/src/projectzombie/util/math/ItemStack.java b/src/projectzombie/util/math/ItemStack.java index b4366c3..1756b22 100755 --- a/src/projectzombie/util/math/ItemStack.java +++ b/src/projectzombie/util/math/ItemStack.java @@ -29,10 +29,14 @@ public class ItemStack implements IBdfClassManager return false; } - public boolean stackEquals(ItemStack other) { - if(other.item != item) return false; - if(other.meta != meta) return false; - return true; + public boolean stackEquals(ItemStack other) + { + if(other.item != item) + return false; + if(other.meta == -1 || meta == -1) + return true; + + return (other.meta == meta); } @Override