From 9fc52918a31648fabdd6687b6563499b5fea55fe Mon Sep 17 00:00:00 2001 From: austin Date: Tue, 17 May 2022 16:11:13 -0400 Subject: [PATCH] Some menu audio --- assets/Audio/closeMenu.ogg | Bin 0 -> 11671 bytes assets/Audio/inventoryGrabItem.ogg | Bin 0 -> 7349 bytes assets/Audio/inventorySlotItem.ogg | Bin 0 -> 5983 bytes assets/Audio/openMenu.ogg | Bin 0 -> 29057 bytes .../java/electrosphere/audio/AudioUtils.java | 17 + .../controls/ControlHandler.java | 16 +- src/main/java/electrosphere/main/Globals.java | 4 + src/main/java/electrosphere/main/Main.java | 2 +- .../electrosphere/menu/MenuGenerators.java | 333 +--------------- .../menu/MenuGeneratorsInventory.java | 373 ++++++++++++++++++ 10 files changed, 408 insertions(+), 337 deletions(-) create mode 100644 assets/Audio/closeMenu.ogg create mode 100644 assets/Audio/inventoryGrabItem.ogg create mode 100644 assets/Audio/inventorySlotItem.ogg create mode 100644 assets/Audio/openMenu.ogg create mode 100644 src/main/java/electrosphere/menu/MenuGeneratorsInventory.java diff --git a/assets/Audio/closeMenu.ogg b/assets/Audio/closeMenu.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0851068acdf13a4202e52df6a0add029593a2b2d GIT binary patch literal 11671 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 literal 0 HcmV?d00001 diff --git a/assets/Audio/inventorySlotItem.ogg b/assets/Audio/inventorySlotItem.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5253aa28301964a8f7e5ef404601fa607fc5cb13 GIT binary patch literal 5983 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 IA!$ng10z5J1^@s6 literal 0 HcmV?d00001 diff --git a/assets/Audio/openMenu.ogg b/assets/Audio/openMenu.ogg new file mode 100644 index 0000000000000000000000000000000000000000..08783f59a06ae1b2d359a1a8926a1a6cf329c613 GIT binary patch literal 29057 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 literal 0 HcmV?d00001 diff --git a/src/main/java/electrosphere/audio/AudioUtils.java b/src/main/java/electrosphere/audio/AudioUtils.java index f6fb9843..904142ab 100644 --- a/src/main/java/electrosphere/audio/AudioUtils.java +++ b/src/main/java/electrosphere/audio/AudioUtils.java @@ -2,6 +2,8 @@ package electrosphere.audio; import electrosphere.logger.LoggerInterface; import electrosphere.main.Globals; +import electrosphere.util.FileUtils; + import org.joml.Vector3f; /** @@ -25,5 +27,20 @@ public class AudioUtils { } return rVal; } + + public static AudioSource playAudio(String audioFile){ + AudioSource rVal = null; + AudioBuffer buffer = Globals.assetManager.fetchAudio(FileUtils.sanitizeFilePath(audioFile)); + if(buffer != null){ + rVal = new AudioSource(false,false); + rVal.setBuffer(buffer.getBufferId()); + rVal.setGain(Globals.audioEngine.getGain()); + rVal.setPosition(new Vector3f()); + rVal.play(); + } else { + LoggerInterface.loggerEngine.WARNING("Failed to start audio in playAudioAtLocation"); + } + return rVal; + } } diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index 49080ce2..7526e097 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -1,5 +1,6 @@ package electrosphere.controls; +import electrosphere.audio.AudioUtils; import electrosphere.controls.Control.ControlMethod; import electrosphere.controls.Control.ControlType; import electrosphere.entity.Entity; @@ -22,6 +23,7 @@ import electrosphere.main.Main; import electrosphere.menu.WindowStrings; import electrosphere.menu.WindowUtils; import electrosphere.menu.MenuGenerators; +import electrosphere.menu.MenuGeneratorsInventory; import electrosphere.renderer.ui.Window; import electrosphere.renderer.ui.events.ClickEvent; import electrosphere.renderer.ui.events.KeyboardEvent; @@ -735,10 +737,8 @@ public class ControlHandler { Globals.elementManager.focusFirstElement(); Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU); Globals.controlHandler.showMouse(); - // Element mainMenu = MenuGenerators.createInGameMainMenu(); - // Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, mainMenu); - // MenuGenerators.makeMenuDrawable(mainMenu); - // Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU); + //play sound effect + AudioUtils.playAudio("/Audio/openMenu.ogg"); }}); controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).setRepeatTimeout(0.5f * Main.targetFrameRate); @@ -751,7 +751,7 @@ public class ControlHandler { if(InventoryUtils.hasNaturalInventory(Globals.playerEntity) && Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(InventoryUtils.getNaturalInventory(Globals.playerEntity).getId())) == null){ //create window UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerEntity); - Window mainMenuWindow = MenuGenerators.createNaturalInventoryMenu(inventory); + Window mainMenuWindow = MenuGeneratorsInventory.createNaturalInventoryMenu(inventory); //register Globals.elementManager.registerWindow(WindowUtils.getInventoryWindowID(inventory.getId()), mainMenuWindow); //make visible @@ -759,6 +759,8 @@ public class ControlHandler { //controls Globals.controlHandler.setHandlerState(ControlsState.INVENTORY); Globals.controlHandler.showMouse(); + //play sound effect + AudioUtils.playAudio("/Audio/openMenu.ogg"); // Globals.openInventoriesCount++; } @@ -773,7 +775,7 @@ public class ControlHandler { controls.get(INPUT_CODE_CHARACTER_OPEN).setOnClick(new ControlMethod(){public void execute(){ if(InventoryUtils.hasEquipInventory(Globals.playerEntity) && Globals.elementManager.getWindow(WindowStrings.WINDOW_CHARACTER) == null){ //create window - Window mainMenuWindow = MenuGenerators.createCharacterInventoryMenu(InventoryUtils.getEquipInventory(Globals.playerEntity)); + Window mainMenuWindow = MenuGeneratorsInventory.createCharacterInventoryMenu(InventoryUtils.getEquipInventory(Globals.playerEntity)); //register Globals.elementManager.registerWindow(WindowStrings.WINDOW_CHARACTER, mainMenuWindow); //make visible @@ -781,6 +783,8 @@ public class ControlHandler { //controls Globals.controlHandler.setHandlerState(ControlsState.INVENTORY); Globals.controlHandler.showMouse(); + //play sound effect + AudioUtils.playAudio("/Audio/openMenu.ogg"); // Globals.openInventoriesCount++; } diff --git a/src/main/java/electrosphere/main/Globals.java b/src/main/java/electrosphere/main/Globals.java index 5bbea10a..cfeae8b7 100644 --- a/src/main/java/electrosphere/main/Globals.java +++ b/src/main/java/electrosphere/main/Globals.java @@ -373,6 +373,10 @@ public class Globals { Globals.assetManager.addAudioPathToQueue("/Audio/MenuBadOption.ogg"); Globals.assetManager.addAudioPathToQueue("/Audio/MenuChangeOption.ogg"); Globals.assetManager.addAudioPathToQueue("/Audio/MenuType.ogg"); + Globals.assetManager.addAudioPathToQueue("/Audio/inventoryGrabItem.ogg"); + Globals.assetManager.addAudioPathToQueue("/Audio/inventorySlotItem.ogg"); + Globals.assetManager.addAudioPathToQueue("/Audio/openMenu.ogg"); + Globals.assetManager.addAudioPathToQueue("/Audio/closeMenu.ogg"); } public static void initDefaultGraphicalResources(){ diff --git a/src/main/java/electrosphere/main/Main.java b/src/main/java/electrosphere/main/Main.java index 675f0561..ad6d13ad 100644 --- a/src/main/java/electrosphere/main/Main.java +++ b/src/main/java/electrosphere/main/Main.java @@ -197,7 +197,7 @@ public class Main { if(Globals.RUN_CLIENT){ Globals.audioEngine = new AudioEngine(); Globals.audioEngine.init(); - Globals.audioEngine.setGain(0.1f); + // Globals.audioEngine.setGain(0.1f); } //init default resources diff --git a/src/main/java/electrosphere/menu/MenuGenerators.java b/src/main/java/electrosphere/menu/MenuGenerators.java index d7462e4c..9f1e3d6c 100644 --- a/src/main/java/electrosphere/menu/MenuGenerators.java +++ b/src/main/java/electrosphere/menu/MenuGenerators.java @@ -491,7 +491,7 @@ public class MenuGenerators { //clear ui WindowUtils.cleanItemDraggingWindow(); String sourceWindowId = WindowUtils.getInventoryWindowID(inventory.getId()); - WindowUtils.replaceWindow(sourceWindowId,MenuGenerators.createNaturalInventoryMenu(inventory)); + WindowUtils.replaceWindow(sourceWindowId,MenuGeneratorsInventory.createNaturalInventoryMenu(inventory)); //null globals Globals.dragSourceInventory = null; Globals.draggedItem = null; @@ -503,7 +503,7 @@ public class MenuGenerators { //clear ui WindowUtils.cleanItemDraggingWindow(); String sourceWindowId = WindowStrings.WINDOW_CHARACTER; - WindowUtils.replaceWindow(sourceWindowId,MenuGenerators.createCharacterInventoryMenu(inventory)); + WindowUtils.replaceWindow(sourceWindowId,MenuGeneratorsInventory.createCharacterInventoryMenu(inventory)); //null globals Globals.dragSourceInventory = null; Globals.draggedItem = null; @@ -845,333 +845,6 @@ public class MenuGenerators { return rVal; } - public static Window createNaturalInventoryMenu(UnrelationalInventoryState inventory){ - int width = 500; - int height = 500; - - Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT); - - Div div = new Div(); - rVal.addChild(div); - - rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){ - WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(inventory.getId())), false); - Globals.elementManager.unregisterWindow(WindowUtils.getInventoryWindowID(inventory.getId())); - // - Globals.openInventoriesCount--; - if(Globals.openInventoriesCount == 0){ - Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME); - Globals.controlHandler.hideMouse(); - } - return false; - }}); - - div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){ - if(Globals.draggedItem != null){ - if(Globals.dragSourceInventory != inventory){ - if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){ - UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory; - //transfer item - sourceInventory.removeItem(Globals.draggedItem); - inventory.addItem(Globals.draggedItem); - //null out global state - Globals.dragSourceInventory = null; - Globals.draggedItem = null; - //clear item container ui - WindowUtils.cleanItemDraggingWindow(); - //rerender both inventories - //re-render inventory - WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory)); - //re-render inventory - WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGenerators.createNaturalInventoryMenu(sourceInventory)); - } - } else { - //clear ui - WindowUtils.cleanItemDraggingWindow(); - //re-render inventory - WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory)); - } - return false; - } - return true; - }}); - - div.setOnClick(new ClickEventCallback() {public boolean execute(ClickEvent event){ - WindowUtils.focusWindow(WindowStrings.WINDOW_MENU_INVENTORY); - return false; - }}); - - //black texture background - ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture); - // imagePanel.setWidth(width); - // imagePanel.setHeight(height); - // imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture)); - div.addChild(imagePanel); - - //label 1 (inventory) - Label inventoryLabel = new Label(10,10,1.0f); - inventoryLabel.setText("INVENTORY"); - div.addChild(inventoryLabel); - - int columns = 8; - int columnWidth = 60; - int rowHeight = 60; - for(int i = 0; i < inventory.getCapacity(); i++){ - String texturePath = "Textures/icons/itemIconEmpty.png"; - boolean hasItem = false; - if(i < inventory.getItems().size()){ - Entity currentItem = inventory.getItems().get(i); - //get texture path from item - texturePath = ItemUtils.getItemIcon(currentItem); - //flag that this isn't an empty slot - hasItem = true; - } - if(!Globals.assetManager.hasLoadedTexture(texturePath)){ - Globals.assetManager.addTexturePathtoQueue(texturePath); - } - int posX = (10 + i % columns * columnWidth); - int posY = 60 + (i / columns * rowHeight); - int panelWidth = 50; - int panelHeight = 50; - ImagePanel panel = new ImagePanel(posX,posY,panelWidth,panelHeight,texturePath); - if(hasItem == true){ - int itemId = i; - panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){ - // System.out.println("Drag start"); - Globals.dragSourceInventory = inventory; - Globals.draggedItem = inventory.getItems().get(itemId); - div.removeChild(panel); - WindowUtils.pushItemIconToItemWindow(panel); - return false; - }}); - panel.setOnDrag(new DragEventCallback() {public boolean execute(DragEvent event){ - // System.out.println("Drag"); - panel.setPositionX(event.getCurrentX() - panelWidth / 2); - panel.setPositionY(event.getCurrentY() - panelHeight / 2); - return false; - }}); - } else { - panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){ - if(Globals.dragSourceInventory instanceof RelationalInventoryState){ - RelationalInventoryState sourceInventory = (RelationalInventoryState) Globals.dragSourceInventory; - Entity item = Globals.draggedItem; - //destroy real world item - if(ItemUtils.getRealWorldEntity(item) != null){ - System.out.println("Destroy real world item"); - ItemUtils.destroyInWorldItem(ItemUtils.getRealWorldEntity(item)); - } - //eject from equip state - InventoryUtils.attemptDestroyItem(Globals.playerEntity,item); - //add to unrelational - sourceInventory.tryRemoveItem(item); - inventory.addItem(item); - //update ui - Globals.dragSourceInventory = null; - Globals.draggedItem = null; - //clear item container ui - WindowUtils.cleanItemDraggingWindow(); - //rerender both inventories - //re-render inventory - WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGenerators.createCharacterInventoryMenu(sourceInventory)); - //re-render inventory - WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory)); - } - //now the fun begins :) - //if transfer item - // remove item from current inventory - // place item in new inventory - // trigger recreation of the menu - //if drop item - // remove item from current inventory - // create item in world in front of character - // trigger recreation of the menu - //if neither of above - // replace item icon position to origin - // System.out.println("Release drag"); - return false; - }}); - } - // imagePanel.setWidth(width); - // imagePanel.setHeight(height); - // imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture)); - div.addChild(panel); - } - - return rVal; - } - - - public static Window createCharacterInventoryMenu(RelationalInventoryState inventory){ - // int screenTop = Globals.WINDOW_HEIGHT - 150; - int width = 500; - int height = 500; - // int screenLeft = (Globals.WINDOW_WIDTH - width)/2; - Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT); - - Div div = new Div(); - div.setPositionX(1000); - rVal.addChild(div); - - rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){ - WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_CHARACTER), false); - Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_CHARACTER); - // - Globals.openInventoriesCount--; - if(Globals.openInventoriesCount == 0){ - Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME); - Globals.controlHandler.hideMouse(); - } - return false; - }}); - - div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){ - if(Globals.draggedItem != null){ - if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){ - UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory; - //null out global state - Globals.dragSourceInventory = null; - Globals.draggedItem = null; - //clear item container ui - WindowUtils.cleanItemDraggingWindow(); - //rerender both inventories - //re-render inventory - WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGenerators.createCharacterInventoryMenu(inventory)); - //re-render inventory - WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGenerators.createNaturalInventoryMenu(sourceInventory)); - } - return false; - } - return true; - }}); - - div.setOnClick(new ClickEventCallback() {public boolean execute(ClickEvent event){ - WindowUtils.focusWindow(WindowStrings.WINDOW_CHARACTER); - return false; - }}); - - //black texture background - ImagePanel imagePanel = new ImagePanel(1000,0,width,height,Globals.blackTexture); - // imagePanel.setWidth(width); - // imagePanel.setHeight(height); - // imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture)); - div.addChild(imagePanel); - - //label 1 (inventory) - Label inventoryLabel = new Label(1010,10,1.0f); - inventoryLabel.setText("CHARACTER"); - div.addChild(inventoryLabel); - - // int columns = 8; - // int columnWidth = 60; - // int rowHeight = 60; - int slotSpacing = 30; - - List slots = inventory.getSlots(); - int numSlots = slots.size(); - // int numRows = (numSlots / 2) + (numSlots % 2 == 1 ? 1 : 0); - - int incrementer = 0; - for(int i = 0; i < numSlots; i++){ - String texturePath = "Textures/icons/itemIconEmpty.png"; - boolean hasItem = false; - if(inventory.getItemSlot(slots.get(i)) != null){ - Entity currentItem = inventory.getItemSlot(slots.get(i)); - //get texture path from item - texturePath = ItemUtils.getItemIcon(currentItem); - //flag that this isn't an empty slot - hasItem = true; - } - if(!Globals.assetManager.hasLoadedTexture(texturePath)){ - Globals.assetManager.addTexturePathtoQueue(texturePath); - } - int panelWidth = 50; - int panelHeight = 50; - int posX = 1000 + 20; - if((incrementer % 2) == 1){ - posX = posX + 400; - } - int posY = 60 + (i / 2 * (panelHeight + slotSpacing)); - ImagePanel panel = new ImagePanel(posX,posY,panelWidth,panelHeight,texturePath); - if(hasItem == true){ - int itemId = i; - panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){ - // System.out.println("Drag start"); - Globals.dragSourceInventory = inventory; - Globals.draggedItem = inventory.getItemSlot(slots.get(itemId)); - div.removeChild(panel); - WindowUtils.pushItemIconToItemWindow(panel); - return false; - }}); - panel.setOnDrag(new DragEventCallback() {public boolean execute(DragEvent event){ - // System.out.println("Drag"); - panel.setPositionX(event.getCurrentX() - panelWidth / 2); - panel.setPositionY(event.getCurrentY() - panelHeight / 2); - return false; - }}); - } else { - int itemId = i; - panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){ - // panel.setPositionX(posX); - // panel.setPositionY(posY); - if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){ - UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState) Globals.dragSourceInventory; - Entity item = Globals.draggedItem; - if(inventory.canEquipItemToSlot(item, slots.get(itemId))){ - //transfer item - sourceInventory.removeItem(item); - inventory.addItem(slots.get(itemId), item); - //hydrate inventory item - Entity inWorldItem = ItemUtils.spawnBasicItem(ItemUtils.getType(item)); - //bind in world with in inventory - ItemUtils.setRealWorldEntity(item, inWorldItem); - //fire equip event to equip state - EquipState equipState = (EquipState)Globals.playerEntity.getData(EntityDataStrings.EQUIP_STATE); - equipState.attemptEquip(inWorldItem,inventory.getEquipPointFromSlot(slots.get(itemId))); - GravityUtils.attemptDeactivateGravity(inWorldItem); - } - //update ui - Globals.dragSourceInventory = null; - Globals.draggedItem = null; - //clear item container ui - WindowUtils.cleanItemDraggingWindow(); - //rerender both inventories - //re-render inventory - WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGenerators.createCharacterInventoryMenu(inventory)); - //re-render inventory - WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGenerators.createNaturalInventoryMenu(sourceInventory)); - } - //now the fun begins :) - //if transfer item - // remove item from current inventory - // place item in new inventory - // trigger recreation of the menu - //if drop item - // remove item from current inventory - // create item in world in front of character - // trigger recreation of the menu - //if neither of above - // replace item icon position to origin - // System.out.println("Release drag"); - //rebuild inventory windows - return false; - }}); - } - div.addChild(panel); - - //create the slot text - posX = 1000 + 80; - if((incrementer % 2) == 1){ - posX = posX + 190; - } - posY = posY + 15; - Label slotText = new Label(posX, posY, 0.4f); - slotText.setText(slots.get(i)); - div.addChild(slotText); - - incrementer++; - } - - return rVal; - } + } diff --git a/src/main/java/electrosphere/menu/MenuGeneratorsInventory.java b/src/main/java/electrosphere/menu/MenuGeneratorsInventory.java new file mode 100644 index 00000000..8aa65085 --- /dev/null +++ b/src/main/java/electrosphere/menu/MenuGeneratorsInventory.java @@ -0,0 +1,373 @@ +package electrosphere.menu; + +import java.util.List; + +import electrosphere.audio.AudioUtils; +import electrosphere.controls.ControlHandler.ControlsState; +import electrosphere.entity.Entity; +import electrosphere.entity.EntityDataStrings; +import electrosphere.entity.state.equip.EquipState; +import electrosphere.entity.state.gravity.GravityUtils; +import electrosphere.entity.state.inventory.InventoryUtils; +import electrosphere.entity.state.inventory.RelationalInventoryState; +import electrosphere.entity.state.inventory.UnrelationalInventoryState; +import electrosphere.entity.types.item.ItemUtils; +import electrosphere.main.Globals; +import electrosphere.renderer.ui.DraggableElement.DragEventCallback; +import electrosphere.renderer.ui.elements.Div; +import electrosphere.renderer.ui.elements.ImagePanel; +import electrosphere.renderer.ui.elements.Label; +import electrosphere.renderer.ui.events.ClickEvent; +import electrosphere.renderer.ui.events.DragEvent; +import electrosphere.renderer.ui.events.NavigationEvent; +import electrosphere.renderer.ui.Window; +import electrosphere.renderer.ui.ClickableElement.ClickEventCallback; +import electrosphere.renderer.ui.DraggableElement.DragEventCallback; +import electrosphere.renderer.ui.FocusableElement.FocusEventCallback; +import electrosphere.renderer.ui.NavigableElement.NavigationEventCallback; +import electrosphere.renderer.ui.ValueElement.ValueChangeEventCallback; + +public class MenuGeneratorsInventory { + + public static Window createNaturalInventoryMenu(UnrelationalInventoryState inventory){ + int width = 500; + int height = 500; + + Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT); + + Div div = new Div(); + rVal.addChild(div); + + rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){ + WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(inventory.getId())), false); + Globals.elementManager.unregisterWindow(WindowUtils.getInventoryWindowID(inventory.getId())); + // + Globals.openInventoriesCount--; + if(Globals.openInventoriesCount == 0){ + Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME); + Globals.controlHandler.hideMouse(); + } + //play sound effect + AudioUtils.playAudio("/Audio/closeMenu.ogg"); + return false; + }}); + + div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){ + if(Globals.draggedItem != null){ + if(Globals.dragSourceInventory != inventory){ + if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){ + UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory; + //transfer item + sourceInventory.removeItem(Globals.draggedItem); + inventory.addItem(Globals.draggedItem); + //null out global state + Globals.dragSourceInventory = null; + Globals.draggedItem = null; + //clear item container ui + WindowUtils.cleanItemDraggingWindow(); + //rerender both inventories + //re-render inventory + WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(inventory)); + //re-render inventory + WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(sourceInventory)); + } + } else { + //clear ui + WindowUtils.cleanItemDraggingWindow(); + //re-render inventory + WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(inventory)); + } + return false; + } + return true; + }}); + + div.setOnClick(new ClickEventCallback() {public boolean execute(ClickEvent event){ + WindowUtils.focusWindow(WindowStrings.WINDOW_MENU_INVENTORY); + return false; + }}); + + //black texture background + ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture); + // imagePanel.setWidth(width); + // imagePanel.setHeight(height); + // imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture)); + div.addChild(imagePanel); + + //label 1 (inventory) + Label inventoryLabel = new Label(10,10,1.0f); + inventoryLabel.setText("INVENTORY"); + div.addChild(inventoryLabel); + + int columns = 8; + int columnWidth = 60; + int rowHeight = 60; + for(int i = 0; i < inventory.getCapacity(); i++){ + String texturePath = "Textures/icons/itemIconEmpty.png"; + boolean hasItem = false; + if(i < inventory.getItems().size()){ + Entity currentItem = inventory.getItems().get(i); + //get texture path from item + texturePath = ItemUtils.getItemIcon(currentItem); + //flag that this isn't an empty slot + hasItem = true; + } + if(!Globals.assetManager.hasLoadedTexture(texturePath)){ + Globals.assetManager.addTexturePathtoQueue(texturePath); + } + int posX = (10 + i % columns * columnWidth); + int posY = 60 + (i / columns * rowHeight); + int panelWidth = 50; + int panelHeight = 50; + ImagePanel panel = new ImagePanel(posX,posY,panelWidth,panelHeight,texturePath); + if(hasItem == true){ + int itemId = i; + panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){ + // System.out.println("Drag start"); + Globals.dragSourceInventory = inventory; + Globals.draggedItem = inventory.getItems().get(itemId); + div.removeChild(panel); + WindowUtils.pushItemIconToItemWindow(panel); + //play sound effect + AudioUtils.playAudio("/Audio/inventoryGrabItem.ogg"); + return false; + }}); + panel.setOnDrag(new DragEventCallback() {public boolean execute(DragEvent event){ + // System.out.println("Drag"); + panel.setPositionX(event.getCurrentX() - panelWidth / 2); + panel.setPositionY(event.getCurrentY() - panelHeight / 2); + return false; + }}); + } else { + panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){ + if(Globals.dragSourceInventory instanceof RelationalInventoryState){ + RelationalInventoryState sourceInventory = (RelationalInventoryState) Globals.dragSourceInventory; + Entity item = Globals.draggedItem; + //destroy real world item + if(ItemUtils.getRealWorldEntity(item) != null){ + System.out.println("Destroy real world item"); + ItemUtils.destroyInWorldItem(ItemUtils.getRealWorldEntity(item)); + } + //eject from equip state + InventoryUtils.attemptDestroyItem(Globals.playerEntity,item); + //add to unrelational + sourceInventory.tryRemoveItem(item); + inventory.addItem(item); + //update ui + Globals.dragSourceInventory = null; + Globals.draggedItem = null; + //clear item container ui + WindowUtils.cleanItemDraggingWindow(); + //rerender both inventories + //re-render inventory + WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(sourceInventory)); + //re-render inventory + WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(inventory)); + //play sound effect + AudioUtils.playAudio("Audio/inventorySlotItem.ogg"); + } + //now the fun begins :) + //if transfer item + // remove item from current inventory + // place item in new inventory + // trigger recreation of the menu + //if drop item + // remove item from current inventory + // create item in world in front of character + // trigger recreation of the menu + //if neither of above + // replace item icon position to origin + // System.out.println("Release drag"); + return false; + }}); + } + // imagePanel.setWidth(width); + // imagePanel.setHeight(height); + // imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture)); + div.addChild(panel); + } + + return rVal; + } + + + public static Window createCharacterInventoryMenu(RelationalInventoryState inventory){ + // int screenTop = Globals.WINDOW_HEIGHT - 150; + int width = 500; + int height = 500; + // int screenLeft = (Globals.WINDOW_WIDTH - width)/2; + Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT); + + Div div = new Div(); + div.setPositionX(1000); + rVal.addChild(div); + + rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){ + WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_CHARACTER), false); + Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_CHARACTER); + // + Globals.openInventoriesCount--; + if(Globals.openInventoriesCount == 0){ + Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME); + Globals.controlHandler.hideMouse(); + } + //play sound effect + AudioUtils.playAudio("/Audio/closeMenu.ogg"); + return false; + }}); + + div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){ + if(Globals.draggedItem != null){ + if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){ + UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory; + //null out global state + Globals.dragSourceInventory = null; + Globals.draggedItem = null; + //clear item container ui + WindowUtils.cleanItemDraggingWindow(); + //rerender both inventories + //re-render inventory + WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(inventory)); + //re-render inventory + WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(sourceInventory)); + } + return false; + } + return true; + }}); + + div.setOnClick(new ClickEventCallback() {public boolean execute(ClickEvent event){ + WindowUtils.focusWindow(WindowStrings.WINDOW_CHARACTER); + return false; + }}); + + //black texture background + ImagePanel imagePanel = new ImagePanel(1000,0,width,height,Globals.blackTexture); + // imagePanel.setWidth(width); + // imagePanel.setHeight(height); + // imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture)); + div.addChild(imagePanel); + + //label 1 (inventory) + Label inventoryLabel = new Label(1010,10,1.0f); + inventoryLabel.setText("CHARACTER"); + div.addChild(inventoryLabel); + + // int columns = 8; + // int columnWidth = 60; + // int rowHeight = 60; + int slotSpacing = 30; + + List slots = inventory.getSlots(); + int numSlots = slots.size(); + // int numRows = (numSlots / 2) + (numSlots % 2 == 1 ? 1 : 0); + + int incrementer = 0; + for(int i = 0; i < numSlots; i++){ + String texturePath = "Textures/icons/itemIconEmpty.png"; + boolean hasItem = false; + if(inventory.getItemSlot(slots.get(i)) != null){ + Entity currentItem = inventory.getItemSlot(slots.get(i)); + //get texture path from item + texturePath = ItemUtils.getItemIcon(currentItem); + //flag that this isn't an empty slot + hasItem = true; + } + if(!Globals.assetManager.hasLoadedTexture(texturePath)){ + Globals.assetManager.addTexturePathtoQueue(texturePath); + } + int panelWidth = 50; + int panelHeight = 50; + int posX = 1000 + 20; + if((incrementer % 2) == 1){ + posX = posX + 400; + } + int posY = 60 + (i / 2 * (panelHeight + slotSpacing)); + ImagePanel panel = new ImagePanel(posX,posY,panelWidth,panelHeight,texturePath); + if(hasItem == true){ + int itemId = i; + panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){ + // System.out.println("Drag start"); + Globals.dragSourceInventory = inventory; + Globals.draggedItem = inventory.getItemSlot(slots.get(itemId)); + div.removeChild(panel); + WindowUtils.pushItemIconToItemWindow(panel); + //play sound effect + AudioUtils.playAudio("Audio/inventoryGrabItem.ogg"); + return false; + }}); + panel.setOnDrag(new DragEventCallback() {public boolean execute(DragEvent event){ + // System.out.println("Drag"); + panel.setPositionX(event.getCurrentX() - panelWidth / 2); + panel.setPositionY(event.getCurrentY() - panelHeight / 2); + return false; + }}); + } else { + int itemId = i; + panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){ + // panel.setPositionX(posX); + // panel.setPositionY(posY); + if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){ + UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState) Globals.dragSourceInventory; + Entity item = Globals.draggedItem; + if(inventory.canEquipItemToSlot(item, slots.get(itemId))){ + //transfer item + sourceInventory.removeItem(item); + inventory.addItem(slots.get(itemId), item); + //hydrate inventory item + Entity inWorldItem = ItemUtils.spawnBasicItem(ItemUtils.getType(item)); + //bind in world with in inventory + ItemUtils.setRealWorldEntity(item, inWorldItem); + //fire equip event to equip state + EquipState equipState = (EquipState)Globals.playerEntity.getData(EntityDataStrings.EQUIP_STATE); + equipState.attemptEquip(inWorldItem,inventory.getEquipPointFromSlot(slots.get(itemId))); + GravityUtils.attemptDeactivateGravity(inWorldItem); + //play sound effect + AudioUtils.playAudio("Audio/inventorySlotItem.ogg"); + } + //update ui + Globals.dragSourceInventory = null; + Globals.draggedItem = null; + //clear item container ui + WindowUtils.cleanItemDraggingWindow(); + //rerender both inventories + //re-render inventory + WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(inventory)); + //re-render inventory + WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(sourceInventory)); + } + //now the fun begins :) + //if transfer item + // remove item from current inventory + // place item in new inventory + // trigger recreation of the menu + //if drop item + // remove item from current inventory + // create item in world in front of character + // trigger recreation of the menu + //if neither of above + // replace item icon position to origin + // System.out.println("Release drag"); + //rebuild inventory windows + return false; + }}); + } + div.addChild(panel); + + //create the slot text + posX = 1000 + 80; + if((incrementer % 2) == 1){ + posX = posX + 190; + } + posY = posY + 15; + Label slotText = new Label(posX, posY, 0.4f); + slotText.setText(slots.get(i)); + div.addChild(slotText); + + incrementer++; + } + + return rVal; + } + +}