Compare commits
No commits in common. "e6a30cb09bb7ec917a7f2be701e9a36df1c99f4b" and "e6d946db53893d2b3e3b39dbe1bf268f3e398b5f" have entirely different histories.
e6a30cb09b
...
e6d946db53
@ -779,7 +779,6 @@ Fix equipped item packet not being sent to creature's player
|
|||||||
Component-ify natural and equip inventory menus
|
Component-ify natural and equip inventory menus
|
||||||
Post Processing Pipeline w/ blur
|
Post Processing Pipeline w/ blur
|
||||||
Blur on open inventory/main menu in game
|
Blur on open inventory/main menu in game
|
||||||
Remove legacy UI handling of positioning -- entirely reliant on yoga now
|
|
||||||
|
|
||||||
(09/17/2024)
|
(09/17/2024)
|
||||||
Framebuffer position drilling
|
Framebuffer position drilling
|
||||||
|
|||||||
@ -101,6 +101,7 @@ import electrosphere.menu.WindowStrings;
|
|||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
import electrosphere.menu.debug.ImGuiWindowMacros;
|
import electrosphere.menu.debug.ImGuiWindowMacros;
|
||||||
import electrosphere.menu.ingame.MenuGeneratorsInGame;
|
import electrosphere.menu.ingame.MenuGeneratorsInGame;
|
||||||
|
import electrosphere.menu.ingame.MenuGeneratorsInventory;
|
||||||
import electrosphere.renderer.ui.components.PlayerInventoryWindow;
|
import electrosphere.renderer.ui.components.PlayerInventoryWindow;
|
||||||
import electrosphere.renderer.ui.elements.Window;
|
import electrosphere.renderer.ui.elements.Window;
|
||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
@ -135,6 +136,7 @@ public class ControlHandler {
|
|||||||
public static final String INPUT_CODE_INTERACT = "interact";
|
public static final String INPUT_CODE_INTERACT = "interact";
|
||||||
public static final String INPUT_CODE_DROP = "drop";
|
public static final String INPUT_CODE_DROP = "drop";
|
||||||
public static final String INPUT_CODE_INVENTORY_OPEN = "inventoryOpen";
|
public static final String INPUT_CODE_INVENTORY_OPEN = "inventoryOpen";
|
||||||
|
public static final String INPUT_CODE_CHARACTER_OPEN = "characterOpen";
|
||||||
public static final String ITEM_SECONDARY = "actionItemSecondary";
|
public static final String ITEM_SECONDARY = "actionItemSecondary";
|
||||||
public static final String INPUT_CODE_PLACE_TERRAIN = "placeTerrain";
|
public static final String INPUT_CODE_PLACE_TERRAIN = "placeTerrain";
|
||||||
public static final String INPUT_CODE_REMOVE_TERRAIN = "removeTerrain";
|
public static final String INPUT_CODE_REMOVE_TERRAIN = "removeTerrain";
|
||||||
@ -324,6 +326,7 @@ public class ControlHandler {
|
|||||||
handler.addControl(INPUT_CODE_INTERACT, new Control(ControlType.KEY,GLFW_KEY_E,false,"Interact","Interacts with whatever is targeted currently"));
|
handler.addControl(INPUT_CODE_INTERACT, new Control(ControlType.KEY,GLFW_KEY_E,false,"Interact","Interacts with whatever is targeted currently"));
|
||||||
handler.addControl(INPUT_CODE_DROP, new Control(ControlType.KEY,GLFW_KEY_Y,false,"Drop","Drops the currently equipped item"));
|
handler.addControl(INPUT_CODE_DROP, new Control(ControlType.KEY,GLFW_KEY_Y,false,"Drop","Drops the currently equipped item"));
|
||||||
handler.addControl(INPUT_CODE_INVENTORY_OPEN, new Control(ControlType.KEY,GLFW_KEY_I,false,"Inventory","Opens the player's inventory"));
|
handler.addControl(INPUT_CODE_INVENTORY_OPEN, new Control(ControlType.KEY,GLFW_KEY_I,false,"Inventory","Opens the player's inventory"));
|
||||||
|
handler.addControl(INPUT_CODE_CHARACTER_OPEN, new Control(ControlType.KEY,GLFW_KEY_C,false,"Equip Menu","Opens the player's equipment menu"));
|
||||||
handler.addControl(ITEM_SECONDARY, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_RIGHT,false,"Secondary","Uses the secondary equipped item"));
|
handler.addControl(ITEM_SECONDARY, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_RIGHT,false,"Secondary","Uses the secondary equipped item"));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -977,13 +980,14 @@ public class ControlHandler {
|
|||||||
mainGameControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN));
|
mainGameControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN));
|
||||||
inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN));
|
inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN));
|
||||||
controls.get(INPUT_CODE_INVENTORY_OPEN).setOnClick(new ControlMethod(){public void execute(){
|
controls.get(INPUT_CODE_INVENTORY_OPEN).setOnClick(new ControlMethod(){public void execute(){
|
||||||
if(Globals.elementService.getWindow(WindowStrings.WINDOW_CHARACTER) == null){
|
if(InventoryUtils.hasNaturalInventory(Globals.playerEntity) && Globals.elementService.getWindow(WindowUtils.getInventoryWindowID(InventoryUtils.getNaturalInventory(Globals.playerEntity).getId())) == null){
|
||||||
//create window
|
//create window
|
||||||
|
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerEntity);
|
||||||
Window mainMenuWindow = PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity);
|
Window mainMenuWindow = PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity);
|
||||||
//register
|
//register
|
||||||
Globals.elementService.registerWindow(WindowStrings.WINDOW_CHARACTER, mainMenuWindow);
|
Globals.elementService.registerWindow(WindowUtils.getInventoryWindowID(inventory.getId()), mainMenuWindow);
|
||||||
//make visible
|
//make visible
|
||||||
WindowUtils.recursiveSetVisible(WindowStrings.WINDOW_CHARACTER, true);
|
WindowUtils.recursiveSetVisible(Globals.elementService.getWindow(WindowUtils.getInventoryWindowID(inventory.getId())), true);
|
||||||
//controls
|
//controls
|
||||||
Globals.controlHandler.hintUpdateControlState(ControlsState.INVENTORY);
|
Globals.controlHandler.hintUpdateControlState(ControlsState.INVENTORY);
|
||||||
//play sound effect
|
//play sound effect
|
||||||
@ -993,16 +997,42 @@ public class ControlHandler {
|
|||||||
Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(true);
|
Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(true);
|
||||||
//
|
//
|
||||||
Globals.openInventoriesCount++;
|
Globals.openInventoriesCount++;
|
||||||
} else if(InventoryUtils.hasNaturalInventory(Globals.playerEntity) && Globals.elementService.getWindow(WindowStrings.WINDOW_CHARACTER) != null){
|
} else if(InventoryUtils.hasNaturalInventory(Globals.playerEntity) && Globals.elementService.getWindow(WindowUtils.getInventoryWindowID(InventoryUtils.getNaturalInventory(Globals.playerEntity).getId())) != null){
|
||||||
Globals.elementService.closeWindow(WindowStrings.WINDOW_CHARACTER);
|
Globals.elementService.closeWindow(WindowUtils.getInventoryWindowID(InventoryUtils.getNaturalInventory(Globals.playerEntity).getId()));
|
||||||
Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(false);
|
Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(false);
|
||||||
}
|
}
|
||||||
}});
|
}});
|
||||||
controls.get(INPUT_CODE_INVENTORY_OPEN).setRepeatTimeout(0.5f * Main.targetFrameRate);
|
controls.get(INPUT_CODE_INVENTORY_OPEN).setRepeatTimeout(0.5f * Main.targetFrameRate);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Places terrain
|
Open character
|
||||||
*/
|
*/
|
||||||
|
mainGameControlList.add(controls.get(INPUT_CODE_CHARACTER_OPEN));
|
||||||
|
inventoryControlList.add(controls.get(INPUT_CODE_CHARACTER_OPEN));
|
||||||
|
controls.get(INPUT_CODE_CHARACTER_OPEN).setOnClick(new ControlMethod(){public void execute(){
|
||||||
|
if(InventoryUtils.hasEquipInventory(Globals.playerEntity) && Globals.elementService.getWindow(WindowStrings.WINDOW_CHARACTER) == null){
|
||||||
|
//create window
|
||||||
|
Window characterInventoryMenu = MenuGeneratorsInventory.createCharacterInventoryMenu(InventoryUtils.getEquipInventory(Globals.playerEntity));
|
||||||
|
//register
|
||||||
|
Globals.elementService.registerWindow(WindowStrings.WINDOW_CHARACTER, characterInventoryMenu);
|
||||||
|
//make visible
|
||||||
|
WindowUtils.recursiveSetVisible(Globals.elementService.getWindow(WindowStrings.WINDOW_CHARACTER), true);
|
||||||
|
//controls
|
||||||
|
Globals.controlHandler.hintUpdateControlState(ControlsState.INVENTORY);
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/openMenu.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(true);
|
||||||
|
//
|
||||||
|
Globals.openInventoriesCount++;
|
||||||
|
} else if(InventoryUtils.hasEquipInventory(Globals.playerEntity) && Globals.elementService.getWindow(WindowStrings.WINDOW_CHARACTER) != null){
|
||||||
|
Globals.elementService.closeWindow(WindowStrings.WINDOW_CHARACTER);
|
||||||
|
Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(false);
|
||||||
|
}
|
||||||
|
}});
|
||||||
|
controls.get(INPUT_CODE_CHARACTER_OPEN).setRepeatTimeout(0.5f * Main.targetFrameRate);
|
||||||
|
|
||||||
mainGameControlList.add(controls.get(INPUT_CODE_PLACE_TERRAIN));
|
mainGameControlList.add(controls.get(INPUT_CODE_PLACE_TERRAIN));
|
||||||
controls.get(INPUT_CODE_PLACE_TERRAIN).setOnPress(new ControlMethod(){public void execute(){
|
controls.get(INPUT_CODE_PLACE_TERRAIN).setOnPress(new ControlMethod(){public void execute(){
|
||||||
CollisionEngine collisionEngine = Globals.clientSceneWrapper.getCollisionEngine();
|
CollisionEngine collisionEngine = Globals.clientSceneWrapper.getCollisionEngine();
|
||||||
@ -1393,6 +1423,19 @@ public class ControlHandler {
|
|||||||
* Sets the inventory control callbacks
|
* Sets the inventory control callbacks
|
||||||
*/
|
*/
|
||||||
void setInventoryControls(){
|
void setInventoryControls(){
|
||||||
|
/*
|
||||||
|
Close inventory
|
||||||
|
*/
|
||||||
|
// inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_CLOSE));
|
||||||
|
// controls.get(INPUT_CODE_INVENTORY_CLOSE).setOnPress(new ControlMethod(){public void execute(){
|
||||||
|
// // MenuCallbacks.backout(Globals.currentMenu);
|
||||||
|
// UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerCharacter);
|
||||||
|
// Element inventoryWindow = Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(inventory.getId()));
|
||||||
|
// WindowUtils.recursiveSetVisible(inventoryWindow, false);
|
||||||
|
// hideMouse();
|
||||||
|
// Globals.elementManager.unregisterWindow(WindowUtils.getInventoryWindowID(inventory.getId()));
|
||||||
|
// Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME);
|
||||||
|
// }});
|
||||||
/*
|
/*
|
||||||
Item manipulation
|
Item manipulation
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -2,9 +2,11 @@ package electrosphere.menu;
|
|||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.signal.Signal.SignalType;
|
import electrosphere.engine.signal.Signal.SignalType;
|
||||||
|
import electrosphere.entity.state.inventory.InventoryUtils;
|
||||||
|
import electrosphere.entity.state.inventory.RelationalInventoryState;
|
||||||
|
import electrosphere.entity.state.inventory.UnrelationalInventoryState;
|
||||||
import electrosphere.menu.ingame.MenuGeneratorsInventory;
|
import electrosphere.menu.ingame.MenuGeneratorsInventory;
|
||||||
import electrosphere.menu.mainmenu.MenuGeneratorsTitleMenu;
|
import electrosphere.menu.mainmenu.MenuGeneratorsTitleMenu;
|
||||||
import electrosphere.renderer.ui.components.PlayerInventoryWindow;
|
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elements.Window;
|
import electrosphere.renderer.ui.elements.Window;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
@ -111,7 +113,6 @@ public class WindowUtils {
|
|||||||
* @param id the id
|
* @param id the id
|
||||||
* @return the window string for said inventory window
|
* @return the window string for said inventory window
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static String getInventoryWindowID(int id){
|
public static String getInventoryWindowID(int id){
|
||||||
return "INVENTORY-" + id;
|
return "INVENTORY-" + id;
|
||||||
}
|
}
|
||||||
@ -165,9 +166,20 @@ public class WindowUtils {
|
|||||||
public static void attemptRedrawInventoryWindows(){
|
public static void attemptRedrawInventoryWindows(){
|
||||||
//make sure we're client and the player entity exists
|
//make sure we're client and the player entity exists
|
||||||
if(Globals.RUN_CLIENT && Globals.playerEntity != null){
|
if(Globals.RUN_CLIENT && Globals.playerEntity != null){
|
||||||
if(Globals.elementService.containsWindow(WindowStrings.WINDOW_CHARACTER)){
|
//check equip inventory
|
||||||
|
if(InventoryUtils.hasEquipInventory(Globals.playerEntity) && Globals.elementService.containsWindow(WindowStrings.WINDOW_CHARACTER)){
|
||||||
//redraw if necessary
|
//redraw if necessary
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
RelationalInventoryState inventory = InventoryUtils.getEquipInventory(Globals.playerEntity);
|
||||||
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(inventory));
|
||||||
|
}
|
||||||
|
//check natural inventory
|
||||||
|
if(InventoryUtils.hasNaturalInventory(Globals.playerEntity)){
|
||||||
|
//we need to know the inventory to know which window to check as there can be multiple unrelational inventory screens open
|
||||||
|
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerEntity);
|
||||||
|
if(Globals.elementService.containsWindow(WindowUtils.getInventoryWindowID(inventory.getId()))){
|
||||||
|
//once we have the natural inventory, redraw
|
||||||
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(inventory));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,19 +1,462 @@
|
|||||||
package electrosphere.menu.ingame;
|
package electrosphere.menu.ingame;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
||||||
|
import electrosphere.controls.ControlHandler.ControlsState;
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.engine.signal.Signal.SignalType;
|
||||||
|
import electrosphere.entity.Entity;
|
||||||
|
import electrosphere.entity.state.equip.ClientEquipState;
|
||||||
import electrosphere.entity.state.inventory.InventoryUtils;
|
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.game.data.creature.type.equip.EquipPoint;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.menu.WindowStrings;
|
import electrosphere.menu.WindowStrings;
|
||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
import electrosphere.renderer.ui.components.PlayerInventoryWindow;
|
|
||||||
import electrosphere.renderer.ui.elements.Div;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
|
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||||
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elements.Window;
|
import electrosphere.renderer.ui.elements.Window;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ClickableElement.ClickEventCallback;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.DraggableElement.DragEventCallback;
|
import electrosphere.renderer.ui.elementtypes.DraggableElement.DragEventCallback;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.NavigableElement.NavigationEventCallback;
|
||||||
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.events.DragEvent;
|
import electrosphere.renderer.ui.events.DragEvent;
|
||||||
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
|
|
||||||
public class MenuGeneratorsInventory {
|
public class MenuGeneratorsInventory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The dummy panel
|
||||||
|
*/
|
||||||
|
static ImagePanel dummyPanel = null;
|
||||||
|
|
||||||
|
public static Window createNaturalInventoryMenu(UnrelationalInventoryState inventory){
|
||||||
|
int width = 500;
|
||||||
|
int height = 500;
|
||||||
|
|
||||||
|
Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,width,height,true);
|
||||||
|
rVal.setParentAlignItem(YogaAlignment.Center);
|
||||||
|
rVal.setParentJustifyContent(YogaJustification.Center);
|
||||||
|
|
||||||
|
//apply yoga so that the screenspace position of the window can be calculated, that allows proper placement of the absolute elements
|
||||||
|
Globals.signalSystem.post(SignalType.YOGA_APPLY,rVal);
|
||||||
|
|
||||||
|
Div div = Div.createDiv();
|
||||||
|
rVal.addChild(div);
|
||||||
|
|
||||||
|
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
||||||
|
WindowUtils.recursiveSetVisible(Globals.elementService.getWindow(WindowUtils.getInventoryWindowID(inventory.getId())), false);
|
||||||
|
Globals.elementService.unregisterWindow(WindowUtils.getInventoryWindowID(inventory.getId()));
|
||||||
|
//
|
||||||
|
Globals.openInventoriesCount--;
|
||||||
|
if(Globals.openInventoriesCount == 0){
|
||||||
|
Globals.controlHandler.hintUpdateControlState(ControlsState.MAIN_GAME);
|
||||||
|
}
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/closeMenu.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
|
||||||
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
|
LoggerInterface.loggerUI.INFO("Natural inventory received drag release 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;
|
||||||
|
Entity item = Globals.draggedItem;
|
||||||
|
if(ClientEquipState.hasEquipState(Globals.playerEntity) && InventoryUtils.hasEquipInventory(Globals.playerEntity)){
|
||||||
|
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(Globals.playerEntity);
|
||||||
|
ClientEquipState equipState = ClientEquipState.getEquipState(Globals.playerEntity);
|
||||||
|
equipState.commandAttemptUnequip(equipInventory.getItemSlot(item));
|
||||||
|
}
|
||||||
|
//clear item container ui
|
||||||
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
//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();
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
//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;
|
||||||
|
}});
|
||||||
|
|
||||||
|
|
||||||
|
//label 1 (inventory)
|
||||||
|
div.addChild(Label.createLabel("INVENTORY"));
|
||||||
|
|
||||||
|
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 posXf = posX;
|
||||||
|
int posYf = posY;
|
||||||
|
int itemPosX = posX;
|
||||||
|
int itemPosY = posY;
|
||||||
|
int panelWidth = 50;
|
||||||
|
int panelHeight = 50;
|
||||||
|
ImagePanel panel = ImagePanel.createImagePanelAbsolute(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);
|
||||||
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
|
container.removeChild(panel);
|
||||||
|
WindowUtils.pushItemIconToItemWindow(panel);
|
||||||
|
//add a dummy icon in place of the existing one
|
||||||
|
dummyPanel = ImagePanel.createImagePanelAbsolute(posXf,posYf,panelWidth,panelHeight,"Textures/icons/itemIconEmpty.png");
|
||||||
|
container.addChild(dummyPanel);
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventoryGrabItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}});
|
||||||
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
|
if(panel.getParent() != div){
|
||||||
|
if(panel.getParent() != null){
|
||||||
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
|
container.removeChild(panel);
|
||||||
|
}
|
||||||
|
div.addChild(panel);
|
||||||
|
Globals.elementService.fireEvent(event, event.getCurrentX(), event.getCurrentY());
|
||||||
|
}
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
panel.setPositionX(div.getAbsoluteX() + itemPosX);
|
||||||
|
panel.setPositionY(div.getAbsoluteY() + itemPosY);
|
||||||
|
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;
|
||||||
|
if(ClientEquipState.hasEquipState(Globals.playerEntity) && InventoryUtils.hasEquipInventory(Globals.playerEntity)){
|
||||||
|
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(Globals.playerEntity);
|
||||||
|
ClientEquipState equipState = ClientEquipState.getEquipState(Globals.playerEntity);
|
||||||
|
equipState.commandAttemptUnequip(equipInventory.getItemSlot(item));
|
||||||
|
}
|
||||||
|
//update ui
|
||||||
|
// Globals.dragSourceInventory = null;
|
||||||
|
// Globals.draggedItem = null;
|
||||||
|
//clear item container ui
|
||||||
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
//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
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//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(Globals.renderingEngine.getOpenGLState(),0,0,width,height,true);
|
||||||
|
|
||||||
|
Div div = Div.createDiv();
|
||||||
|
rVal.addChild(div);
|
||||||
|
|
||||||
|
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
||||||
|
WindowUtils.recursiveSetVisible(Globals.elementService.getWindow(WindowStrings.WINDOW_CHARACTER), false);
|
||||||
|
Globals.elementService.unregisterWindow(WindowStrings.WINDOW_CHARACTER);
|
||||||
|
//
|
||||||
|
Globals.openInventoriesCount--;
|
||||||
|
if(Globals.openInventoriesCount == 0){
|
||||||
|
Globals.controlHandler.hintUpdateControlState(ControlsState.MAIN_GAME);
|
||||||
|
}
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/closeMenu.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
|
||||||
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
|
LoggerInterface.loggerUI.INFO("Character inventory received drag release 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();
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
//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;
|
||||||
|
}});
|
||||||
|
|
||||||
|
|
||||||
|
//label 1 (inventory)
|
||||||
|
Label inventoryLabel = new Label(1.0f);
|
||||||
|
inventoryLabel.setText("CHARACTER");
|
||||||
|
div.addChild(inventoryLabel);
|
||||||
|
|
||||||
|
// int columns = 8;
|
||||||
|
// int columnWidth = 60;
|
||||||
|
// int rowHeight = 60;
|
||||||
|
int slotSpacing = 30;
|
||||||
|
|
||||||
|
List<String> slots = inventory.getSlots();
|
||||||
|
int numSlots = slots.size();
|
||||||
|
EquipPoint equipPoint = null;
|
||||||
|
// 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;
|
||||||
|
String slotId = slots.get(i);
|
||||||
|
equipPoint = inventory.getEquipPointFromSlot(slotId);
|
||||||
|
if(!equipPoint.isCombinedPoint()){
|
||||||
|
if(inventory.getItemSlot(slotId) != null){
|
||||||
|
Entity currentItem = inventory.getItemSlot(slotId);
|
||||||
|
//get texture path from item
|
||||||
|
texturePath = ItemUtils.getItemIcon(currentItem);
|
||||||
|
//flag that this isn't an empty slot
|
||||||
|
hasItem = true;
|
||||||
|
} else if(inventory.getCombinedPoint(slotId) != null && inventory.hasItemInSlot(inventory.getCombinedPoint(slotId).getEquipPointId())){
|
||||||
|
Entity currentItem = inventory.getItemSlot(inventory.getCombinedPoint(slotId).getEquipPointId());
|
||||||
|
//get texture path from item
|
||||||
|
texturePath = ItemUtils.getItemIcon(currentItem);
|
||||||
|
//flag that this isn't an empty slot
|
||||||
|
hasItem = true;
|
||||||
|
equipPoint = inventory.getCombinedPoint(slotId);
|
||||||
|
slotId = equipPoint.getEquipPointId();
|
||||||
|
}
|
||||||
|
if(!Globals.assetManager.hasLoadedTexture(texturePath)){
|
||||||
|
Globals.assetManager.addTexturePathtoQueue(texturePath);
|
||||||
|
}
|
||||||
|
int panelWidth = 50;
|
||||||
|
int panelHeight = 50;
|
||||||
|
int posX = 20;
|
||||||
|
if((incrementer % 2) == 1){
|
||||||
|
posX = posX + 400;
|
||||||
|
}
|
||||||
|
int posXf = posX;
|
||||||
|
int posY = 60 + (i / 2 * (panelHeight + slotSpacing));
|
||||||
|
int posYf = posY;
|
||||||
|
int itemPosX = posX;
|
||||||
|
int itemPosY = posY;
|
||||||
|
ImagePanel panel = ImagePanel.createImagePanelAbsolute(posX,posY,panelWidth,panelHeight,texturePath);
|
||||||
|
if(hasItem == true){
|
||||||
|
//literally just here to get around finality of variable within callback
|
||||||
|
String finalSlotId = slotId;
|
||||||
|
panel.setOnDragStart(new DragEventCallback() {
|
||||||
|
public boolean execute(DragEvent event){
|
||||||
|
LoggerInterface.loggerUI.DEBUG("Drag start");
|
||||||
|
Globals.dragSourceInventory = inventory;
|
||||||
|
Globals.draggedItem = inventory.getItemSlot(finalSlotId);
|
||||||
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
|
container.removeChild(panel);
|
||||||
|
WindowUtils.pushItemIconToItemWindow(panel);
|
||||||
|
//add a dummy icon in place of the existing one
|
||||||
|
dummyPanel = ImagePanel.createImagePanelAbsolute(posXf,posYf,panelWidth,panelHeight,"Textures/icons/itemIconEmpty.png");
|
||||||
|
container.addChild(dummyPanel);
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventoryGrabItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}});
|
||||||
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
|
if(panel.getParent() != div){
|
||||||
|
if(panel.getParent() != null){
|
||||||
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
|
container.removeChild(panel);
|
||||||
|
}
|
||||||
|
Globals.elementService.fireEvent(event, event.getCurrentX(), event.getCurrentY());
|
||||||
|
div.addChild(panel);
|
||||||
|
}
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
panel.setPositionX(div.getAbsoluteX() + itemPosX);
|
||||||
|
panel.setPositionY(div.getAbsoluteY() + itemPosY);
|
||||||
|
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))){
|
||||||
|
//fire equip event to equip state
|
||||||
|
ClientEquipState equipState = ClientEquipState.getEquipState(Globals.playerEntity);
|
||||||
|
equipState.commandAttemptEquip(item,inventory.getEquipPointFromSlot(slots.get(itemId)));
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
} else if(inventory.canEquipItemToCombinedSlot(item, slots.get(itemId))){
|
||||||
|
EquipPoint combinedPoint = inventory.getCombinedPoint(slots.get(itemId));
|
||||||
|
//fire equip event to equip state
|
||||||
|
ClientEquipState equipState = ClientEquipState.getEquipState(Globals.playerEntity);
|
||||||
|
equipState.commandAttemptEquip(item,combinedPoint);
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//update ui
|
||||||
|
Globals.dragSourceInventory = null;
|
||||||
|
Globals.draggedItem = null;
|
||||||
|
//clear item container ui
|
||||||
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
//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 = 80;
|
||||||
|
if((incrementer % 2) == 1){
|
||||||
|
posX = posX + 190;
|
||||||
|
}
|
||||||
|
posY = posY + 15;
|
||||||
|
Label slotText = new Label(0.7f);
|
||||||
|
slotText.setText(slots.get(i));
|
||||||
|
slotText.setPositionX(posX);
|
||||||
|
slotText.setPositionY(posY);
|
||||||
|
slotText.setAbsolutePosition(true);
|
||||||
|
div.addChild(slotText);
|
||||||
|
|
||||||
|
incrementer++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
public static Element worldItemDropCaptureWindow(){
|
public static Element worldItemDropCaptureWindow(){
|
||||||
Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,true);
|
Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,true);
|
||||||
@ -21,17 +464,35 @@ public class MenuGeneratorsInventory {
|
|||||||
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
LoggerInterface.loggerUI.INFO("World item drop capture window received drag release");
|
LoggerInterface.loggerUI.INFO("World item drop capture window received drag release");
|
||||||
if(Globals.draggedItem != null){
|
if(Globals.draggedItem != null){
|
||||||
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
||||||
|
UnrelationalInventoryState inventory = (UnrelationalInventoryState) Globals.dragSourceInventory;
|
||||||
//drop item
|
//drop item
|
||||||
InventoryUtils.clientAttemptEjectItem(Globals.playerEntity,Globals.draggedItem);
|
InventoryUtils.clientAttemptEjectItem(Globals.playerEntity,Globals.draggedItem);
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
//clear ui
|
//clear ui
|
||||||
WindowUtils.cleanItemDraggingWindow();
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
String sourceWindowId = WindowStrings.WINDOW_CHARACTER;
|
String sourceWindowId = WindowUtils.getInventoryWindowID(inventory.getId());
|
||||||
WindowUtils.replaceWindow(sourceWindowId,PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
WindowUtils.replaceWindow(sourceWindowId,MenuGeneratorsInventory.createNaturalInventoryMenu(inventory));
|
||||||
//null globals
|
//null globals
|
||||||
Globals.dragSourceInventory = null;
|
Globals.dragSourceInventory = null;
|
||||||
Globals.draggedItem = null;
|
Globals.draggedItem = null;
|
||||||
return false;
|
return false;
|
||||||
// }
|
} else if(Globals.dragSourceInventory instanceof RelationalInventoryState){
|
||||||
|
RelationalInventoryState inventory = (RelationalInventoryState) Globals.dragSourceInventory;
|
||||||
|
//drop item
|
||||||
|
InventoryUtils.clientAttemptEjectItem(Globals.playerEntity,Globals.draggedItem);
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
//clear ui
|
||||||
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
String sourceWindowId = WindowStrings.WINDOW_CHARACTER;
|
||||||
|
WindowUtils.replaceWindow(sourceWindowId,MenuGeneratorsInventory.createCharacterInventoryMenu(inventory));
|
||||||
|
//null globals
|
||||||
|
Globals.dragSourceInventory = null;
|
||||||
|
Globals.draggedItem = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}});
|
}});
|
||||||
@ -43,4 +504,16 @@ public class MenuGeneratorsInventory {
|
|||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys the dummy panel
|
||||||
|
*/
|
||||||
|
public static void destroyDummyPanel(){
|
||||||
|
if(dummyPanel != null && dummyPanel.getParent() != null){
|
||||||
|
ContainerElement container = (ContainerElement)dummyPanel.getParent();
|
||||||
|
container.removeChild(dummyPanel);
|
||||||
|
dummyPanel.destroy();
|
||||||
|
dummyPanel = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,7 +75,8 @@ public class CharacterCustomizer {
|
|||||||
for(VisualAttribute attribute : selectedRaceType.getVisualAttributes()){
|
for(VisualAttribute attribute : selectedRaceType.getVisualAttributes()){
|
||||||
if(attribute.getType().equals(VisualAttribute.TYPE_BONE)){
|
if(attribute.getType().equals(VisualAttribute.TYPE_BONE)){
|
||||||
//add label for slider
|
//add label for slider
|
||||||
Label sliderName = Label.createLabel(attribute.getAttributeId());
|
Label sliderName = new Label(0.6f);
|
||||||
|
sliderName.setText(attribute.getAttributeId());
|
||||||
sliderName.setMinWidth(200);
|
sliderName.setMinWidth(200);
|
||||||
//add a slider
|
//add a slider
|
||||||
Slider boneSlider = Slider.createSlider((ValueChangeEvent event) -> {
|
Slider boneSlider = Slider.createSlider((ValueChangeEvent event) -> {
|
||||||
@ -107,7 +108,8 @@ public class CharacterCustomizer {
|
|||||||
scrollable.addChild(Div.createRow(sliderName,boneSlider));
|
scrollable.addChild(Div.createRow(sliderName,boneSlider));
|
||||||
} else if(attribute.getType().equals(VisualAttribute.TYPE_REMESH)){
|
} else if(attribute.getType().equals(VisualAttribute.TYPE_REMESH)){
|
||||||
//add label for carousel
|
//add label for carousel
|
||||||
Label scrollableName = Label.createLabel(attribute.getAttributeId());
|
Label scrollableName = new Label(0.6f);
|
||||||
|
scrollableName.setText(attribute.getAttributeId());
|
||||||
scrollableName.setMinWidth(200);
|
scrollableName.setMinWidth(200);
|
||||||
//add a carousel
|
//add a carousel
|
||||||
StringCarousel variantCarousel = StringCarousel.create(
|
StringCarousel variantCarousel = StringCarousel.create(
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import java.util.List;
|
|||||||
|
|
||||||
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.signal.Signal.SignalType;
|
|
||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
import electrosphere.entity.state.equip.ClientEquipState;
|
import electrosphere.entity.state.equip.ClientEquipState;
|
||||||
import electrosphere.entity.state.inventory.InventoryUtils;
|
import electrosphere.entity.state.inventory.InventoryUtils;
|
||||||
@ -15,12 +14,11 @@ import electrosphere.game.data.creature.type.equip.EquipPoint;
|
|||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.menu.WindowStrings;
|
import electrosphere.menu.WindowStrings;
|
||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
|
import electrosphere.menu.ingame.MenuGeneratorsInventory;
|
||||||
import electrosphere.renderer.ui.elements.Div;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement.ClickEventCallback;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement.ClickEventCallback;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.DraggableElement.DragEventCallback;
|
import electrosphere.renderer.ui.elementtypes.DraggableElement.DragEventCallback;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
@ -32,6 +30,10 @@ import electrosphere.renderer.ui.events.DragEvent;
|
|||||||
*/
|
*/
|
||||||
public class EquipmentInventoryPanel {
|
public class EquipmentInventoryPanel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The dummy panel
|
||||||
|
*/
|
||||||
|
static ImagePanel dummyPanel = null;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,22 +45,25 @@ public class EquipmentInventoryPanel {
|
|||||||
RelationalInventoryState inventory = InventoryUtils.getEquipInventory(entity);
|
RelationalInventoryState inventory = InventoryUtils.getEquipInventory(entity);
|
||||||
|
|
||||||
Div div = Div.createDiv();
|
Div div = Div.createDiv();
|
||||||
div.setJustifyContent(YogaJustification.Center);
|
|
||||||
div.setMarginBottom(25);
|
|
||||||
div.setMarginLeft(25);
|
|
||||||
div.setMarginRight(25);
|
|
||||||
div.setMarginTop(25);
|
|
||||||
|
|
||||||
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
LoggerInterface.loggerUI.INFO("Character inventory received drag release event");
|
LoggerInterface.loggerUI.INFO("Character inventory received drag release event");
|
||||||
if(Globals.draggedItem != null){
|
if(Globals.draggedItem != null){
|
||||||
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
||||||
|
UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory;
|
||||||
//null out global state
|
//null out global state
|
||||||
Globals.dragSourceInventory = null;
|
Globals.dragSourceInventory = null;
|
||||||
Globals.draggedItem = null;
|
Globals.draggedItem = null;
|
||||||
//clear item container ui
|
//clear item container ui
|
||||||
WindowUtils.cleanItemDraggingWindow();
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
//rerender both inventories
|
||||||
//re-render inventory
|
//re-render inventory
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(inventory));
|
||||||
|
//re-render inventory
|
||||||
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(sourceInventory));
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -71,36 +76,34 @@ public class EquipmentInventoryPanel {
|
|||||||
|
|
||||||
|
|
||||||
//label 1 (inventory)
|
//label 1 (inventory)
|
||||||
Label inventoryLabel = Label.createLabel("CHARACTER");
|
Label inventoryLabel = new Label(1.0f);
|
||||||
inventoryLabel.setMarginBottom(10);
|
inventoryLabel.setText("CHARACTER");
|
||||||
div.addChild(inventoryLabel);
|
div.addChild(inventoryLabel);
|
||||||
|
|
||||||
|
// int columns = 8;
|
||||||
{
|
// int columnWidth = 60;
|
||||||
Div leftSlots = Div.createCol();
|
// int rowHeight = 60;
|
||||||
leftSlots.setFlexGrow(1);
|
int slotSpacing = 30;
|
||||||
Div rightSlots = Div.createCol();
|
|
||||||
rightSlots.setFlexGrow(1);
|
|
||||||
rightSlots.setAlignItems(YogaAlignment.End);
|
|
||||||
|
|
||||||
List<String> slots = inventory.getSlots();
|
List<String> slots = inventory.getSlots();
|
||||||
|
int numSlots = slots.size();
|
||||||
EquipPoint equipPoint = null;
|
EquipPoint equipPoint = null;
|
||||||
|
// int numRows = (numSlots / 2) + (numSlots % 2 == 1 ? 1 : 0);
|
||||||
|
|
||||||
for(int i = 0; i < slots.size(); i++){
|
int incrementer = 0;
|
||||||
Div colContainer = i % 2 == 0 ? leftSlots : rightSlots;
|
for(int i = 0; i < numSlots; i++){
|
||||||
boolean endAlign = i % 2 == 1;
|
|
||||||
String texturePath = "Textures/ui/uiFrame1.png";
|
String texturePath = "Textures/ui/uiFrame1.png";
|
||||||
boolean hasItem = false;
|
boolean hasItem = false;
|
||||||
String slotId = slots.get(i);
|
String slotId = slots.get(i);
|
||||||
equipPoint = inventory.getEquipPointFromSlot(slotId);
|
equipPoint = inventory.getEquipPointFromSlot(slotId);
|
||||||
if(!equipPoint.isCombinedPoint()){
|
if(!equipPoint.isCombinedPoint()){
|
||||||
if(inventory.getItemSlot(slotId) != null && inventory.getItemSlot(slotId) != Globals.draggedItem){
|
if(inventory.getItemSlot(slotId) != null){
|
||||||
Entity currentItem = inventory.getItemSlot(slotId);
|
Entity currentItem = inventory.getItemSlot(slotId);
|
||||||
//get texture path from item
|
//get texture path from item
|
||||||
texturePath = ItemUtils.getItemIcon(currentItem);
|
texturePath = ItemUtils.getItemIcon(currentItem);
|
||||||
//flag that this isn't an empty slot
|
//flag that this isn't an empty slot
|
||||||
hasItem = true;
|
hasItem = true;
|
||||||
} else if(inventory.getCombinedPoint(slotId) != null && inventory.hasItemInSlot(inventory.getCombinedPoint(slotId).getEquipPointId()) && inventory.getItemSlot(inventory.getCombinedPoint(slotId).getEquipPointId()) != Globals.draggedItem){
|
} else if(inventory.getCombinedPoint(slotId) != null && inventory.hasItemInSlot(inventory.getCombinedPoint(slotId).getEquipPointId())){
|
||||||
Entity currentItem = inventory.getItemSlot(inventory.getCombinedPoint(slotId).getEquipPointId());
|
Entity currentItem = inventory.getItemSlot(inventory.getCombinedPoint(slotId).getEquipPointId());
|
||||||
//get texture path from item
|
//get texture path from item
|
||||||
texturePath = ItemUtils.getItemIcon(currentItem);
|
texturePath = ItemUtils.getItemIcon(currentItem);
|
||||||
@ -114,16 +117,16 @@ public class EquipmentInventoryPanel {
|
|||||||
}
|
}
|
||||||
int panelWidth = 50;
|
int panelWidth = 50;
|
||||||
int panelHeight = 50;
|
int panelHeight = 50;
|
||||||
ImagePanel panel = ImagePanel.createImagePanel(texturePath);
|
int posX = 20;
|
||||||
panel.setWidth(50);
|
if((incrementer % 2) == 1){
|
||||||
panel.setHeight(50);
|
posX = posX + 400;
|
||||||
panel.setMarginBottom(5);
|
|
||||||
panel.setMarginLeft(15);
|
|
||||||
panel.setMarginRight(15);
|
|
||||||
panel.setMarginTop(15);
|
|
||||||
if(endAlign){
|
|
||||||
panel.setAlignSelf(YogaAlignment.End);
|
|
||||||
}
|
}
|
||||||
|
int posXf = posX;
|
||||||
|
int posY = 60 + (i / 2 * (panelHeight + slotSpacing));
|
||||||
|
int posYf = posY;
|
||||||
|
int itemPosX = posX;
|
||||||
|
int itemPosY = posY;
|
||||||
|
ImagePanel panel = ImagePanel.createImagePanelAbsolute(posX,posY,panelWidth,panelHeight,texturePath);
|
||||||
if(hasItem == true){
|
if(hasItem == true){
|
||||||
//literally just here to get around finality of variable within callback
|
//literally just here to get around finality of variable within callback
|
||||||
String finalSlotId = slotId;
|
String finalSlotId = slotId;
|
||||||
@ -135,8 +138,9 @@ public class EquipmentInventoryPanel {
|
|||||||
ContainerElement container = (ContainerElement)panel.getParent();
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
container.removeChild(panel);
|
container.removeChild(panel);
|
||||||
WindowUtils.pushItemIconToItemWindow(panel);
|
WindowUtils.pushItemIconToItemWindow(panel);
|
||||||
panel.setAbsolutePosition(true);
|
//add a dummy icon in place of the existing one
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
dummyPanel = ImagePanel.createImagePanelAbsolute(posXf,posYf,panelWidth,panelHeight,"Textures/ui/uiFrame1.png");
|
||||||
|
container.addChild(dummyPanel);
|
||||||
//play sound effect
|
//play sound effect
|
||||||
if(Globals.virtualAudioSourceManager != null){
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventoryGrabItem.ogg", VirtualAudioSourceType.UI, false);
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventoryGrabItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
@ -147,30 +151,31 @@ public class EquipmentInventoryPanel {
|
|||||||
// System.out.println("Drag");
|
// System.out.println("Drag");
|
||||||
panel.setPositionX(event.getCurrentX() - panelWidth / 2);
|
panel.setPositionX(event.getCurrentX() - panelWidth / 2);
|
||||||
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
||||||
Globals.signalSystem.post(SignalType.YOGA_APPLY, Globals.elementService.getWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER));
|
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
if(panel.getParent() != colContainer){
|
if(panel.getParent() != div){
|
||||||
if(panel.getParent() != null){
|
if(panel.getParent() != null){
|
||||||
ContainerElement container = (ContainerElement)panel.getParent();
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
container.removeChild(panel);
|
container.removeChild(panel);
|
||||||
}
|
}
|
||||||
Globals.elementService.fireEvent(event, event.getCurrentX(), event.getCurrentY());
|
Globals.elementService.fireEvent(event, event.getCurrentX(), event.getCurrentY());
|
||||||
panel.setAbsolutePosition(false);
|
div.addChild(panel);
|
||||||
}
|
}
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
panel.setPositionX(div.getAbsoluteX() + itemPosX);
|
||||||
|
panel.setPositionY(div.getAbsoluteY() + itemPosY);
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
int itemId = i;
|
int itemId = i;
|
||||||
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
if(Globals.dragSourceInventory instanceof RelationalInventoryState){
|
// panel.setPositionX(posX);
|
||||||
Entity item = Globals.draggedItem;
|
// panel.setPositionY(posY);
|
||||||
if(ItemUtils.getContainingParent(item) != Globals.playerEntity){
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
||||||
throw new UnsupportedOperationException("Unimplemented!");
|
UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState) Globals.dragSourceInventory;
|
||||||
}
|
|
||||||
} else if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
|
||||||
Entity item = Globals.draggedItem;
|
Entity item = Globals.draggedItem;
|
||||||
if(inventory.canEquipItemToSlot(item, slots.get(itemId))){
|
if(inventory.canEquipItemToSlot(item, slots.get(itemId))){
|
||||||
//fire equip event to equip state
|
//fire equip event to equip state
|
||||||
@ -190,36 +195,67 @@ public class EquipmentInventoryPanel {
|
|||||||
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
//update ui
|
//update ui
|
||||||
Globals.dragSourceInventory = null;
|
Globals.dragSourceInventory = null;
|
||||||
Globals.draggedItem = null;
|
Globals.draggedItem = null;
|
||||||
//clear item container ui
|
//clear item container ui
|
||||||
WindowUtils.cleanItemDraggingWindow();
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
//rerender inventories
|
//dummy panel handling
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
destroyDummyPanel();
|
||||||
|
//rerender both inventories
|
||||||
|
//re-render inventory
|
||||||
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(inventory));
|
||||||
|
//re-render inventory
|
||||||
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
||||||
|
}
|
||||||
|
//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;
|
return false;
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
colContainer.addChild(panel);
|
div.addChild(panel);
|
||||||
|
|
||||||
//create the slot text
|
//create the slot text
|
||||||
Label slotLabel = Label.createLabel(slots.get(i));
|
posX = 80;
|
||||||
slotLabel.setMarginBottom(5);
|
if((incrementer % 2) == 1){
|
||||||
slotLabel.setMarginLeft(15);
|
posX = posX + 190;
|
||||||
slotLabel.setMarginRight(15);
|
|
||||||
slotLabel.setMarginTop(5);
|
|
||||||
colContainer.addChild(slotLabel);
|
|
||||||
}
|
}
|
||||||
|
posY = posY + 15;
|
||||||
|
Label slotText = new Label(0.7f);
|
||||||
|
slotText.setText(slots.get(i));
|
||||||
|
slotText.setPositionX(posX);
|
||||||
|
slotText.setPositionY(posY);
|
||||||
|
slotText.setAbsolutePosition(true);
|
||||||
|
div.addChild(slotText);
|
||||||
|
|
||||||
|
incrementer++;
|
||||||
}
|
}
|
||||||
Div columnContainer = Div.createRow(leftSlots,rightSlots);
|
|
||||||
columnContainer.setAlignItems(YogaAlignment.Between);
|
|
||||||
columnContainer.setFlexGrow(1);
|
|
||||||
div.addChild(columnContainer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys the dummy panel
|
||||||
|
*/
|
||||||
|
public static void destroyDummyPanel(){
|
||||||
|
if(dummyPanel != null && dummyPanel.getParent() != null){
|
||||||
|
ContainerElement container = (ContainerElement)dummyPanel.getParent();
|
||||||
|
container.removeChild(dummyPanel);
|
||||||
|
dummyPanel.destroy();
|
||||||
|
dummyPanel = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package electrosphere.renderer.ui.components;
|
|||||||
|
|
||||||
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.signal.Signal.SignalType;
|
|
||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
import electrosphere.entity.state.equip.ClientEquipState;
|
import electrosphere.entity.state.equip.ClientEquipState;
|
||||||
import electrosphere.entity.state.inventory.InventoryUtils;
|
import electrosphere.entity.state.inventory.InventoryUtils;
|
||||||
@ -12,13 +11,12 @@ import electrosphere.entity.types.item.ItemUtils;
|
|||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.menu.WindowStrings;
|
import electrosphere.menu.WindowStrings;
|
||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
|
import electrosphere.menu.ingame.MenuGeneratorsInventory;
|
||||||
import electrosphere.renderer.ui.elements.Div;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement.ClickEventCallback;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement.ClickEventCallback;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaFlexDirection;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaFlexDirection;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.DraggableElement.DragEventCallback;
|
import electrosphere.renderer.ui.elementtypes.DraggableElement.DragEventCallback;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
@ -30,6 +28,11 @@ import electrosphere.renderer.ui.events.DragEvent;
|
|||||||
*/
|
*/
|
||||||
public class NaturalInventoryPanel {
|
public class NaturalInventoryPanel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The dummy panel
|
||||||
|
*/
|
||||||
|
static ImagePanel dummyPanel = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the natural inventory panel
|
* Creates the natural inventory panel
|
||||||
* @param entity The entity who has the inventory
|
* @param entity The entity who has the inventory
|
||||||
@ -40,17 +43,13 @@ public class NaturalInventoryPanel {
|
|||||||
|
|
||||||
|
|
||||||
Div div = Div.createDiv();
|
Div div = Div.createDiv();
|
||||||
div.setJustifyContent(YogaJustification.Center);
|
|
||||||
div.setMarginBottom(25);
|
|
||||||
div.setMarginLeft(25);
|
|
||||||
div.setMarginRight(25);
|
|
||||||
div.setMarginTop(25);
|
|
||||||
|
|
||||||
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
LoggerInterface.loggerUI.INFO("Natural inventory received drag release event");
|
LoggerInterface.loggerUI.INFO("Natural inventory received drag release event");
|
||||||
if(Globals.draggedItem != null){
|
if(Globals.draggedItem != null){
|
||||||
if(Globals.dragSourceInventory != inventory){
|
if(Globals.dragSourceInventory != inventory){
|
||||||
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
||||||
|
UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory;
|
||||||
//transfer item
|
//transfer item
|
||||||
// sourceInventory.removeItem(Globals.draggedItem);
|
// sourceInventory.removeItem(Globals.draggedItem);
|
||||||
// inventory.addItem(Globals.draggedItem);
|
// inventory.addItem(Globals.draggedItem);
|
||||||
@ -65,15 +64,24 @@ public class NaturalInventoryPanel {
|
|||||||
}
|
}
|
||||||
//clear item container ui
|
//clear item container ui
|
||||||
WindowUtils.cleanItemDraggingWindow();
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
|
//rerender both inventories
|
||||||
//re-render inventory
|
//re-render inventory
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
||||||
}
|
//re-render inventory
|
||||||
}
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
//clear ui
|
//clear ui
|
||||||
WindowUtils.cleanItemDraggingWindow();
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
//re-render inventory
|
//re-render inventory
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
@ -84,9 +92,7 @@ public class NaturalInventoryPanel {
|
|||||||
|
|
||||||
|
|
||||||
//label 1 (inventory)
|
//label 1 (inventory)
|
||||||
Label menuTitle = Label.createLabel("INVENTORY");
|
div.addChild(Label.createLabel("INVENTORY"));
|
||||||
menuTitle.setMarginBottom(10);
|
|
||||||
div.addChild(menuTitle);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
//contains all the item panels
|
//contains all the item panels
|
||||||
@ -96,7 +102,7 @@ public class NaturalInventoryPanel {
|
|||||||
for(int i = 0; i < inventory.getCapacity(); i++){
|
for(int i = 0; i < inventory.getCapacity(); i++){
|
||||||
String texturePath = "Textures/ui/uiFrame1.png";
|
String texturePath = "Textures/ui/uiFrame1.png";
|
||||||
boolean hasItem = false;
|
boolean hasItem = false;
|
||||||
if(i < inventory.getItems().size() && inventory.getItems().get(i) != Globals.draggedItem){
|
if(i < inventory.getItems().size()){
|
||||||
Entity currentItem = inventory.getItems().get(i);
|
Entity currentItem = inventory.getItems().get(i);
|
||||||
//get texture path from item
|
//get texture path from item
|
||||||
texturePath = ItemUtils.getItemIcon(currentItem);
|
texturePath = ItemUtils.getItemIcon(currentItem);
|
||||||
@ -111,13 +117,9 @@ public class NaturalInventoryPanel {
|
|||||||
ImagePanel panel = ImagePanel.createImagePanel(texturePath);
|
ImagePanel panel = ImagePanel.createImagePanel(texturePath);
|
||||||
panel.setMinWidth(panelWidth);
|
panel.setMinWidth(panelWidth);
|
||||||
panel.setMinHeight(panelHeight);
|
panel.setMinHeight(panelHeight);
|
||||||
panel.setMarginRight(15);
|
panel.setMarginRight(10);
|
||||||
panel.setMarginBottom(15);
|
panel.setMarginBottom(10);
|
||||||
panel.setMarginLeft(15);
|
if(hasItem == true){
|
||||||
panel.setMarginTop(15);
|
|
||||||
panel.setAlignSelf(YogaAlignment.Start);
|
|
||||||
panel.setAbsolutePosition(false);
|
|
||||||
if(hasItem == true && inventory.getItems().get(i) != Globals.draggedItem){
|
|
||||||
int itemId = i;
|
int itemId = i;
|
||||||
panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){
|
panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
// System.out.println("Drag start");
|
// System.out.println("Drag start");
|
||||||
@ -130,7 +132,13 @@ public class NaturalInventoryPanel {
|
|||||||
panel.setAbsolutePosition(true);
|
panel.setAbsolutePosition(true);
|
||||||
panel.setPositionX(panel.getAbsoluteX());
|
panel.setPositionX(panel.getAbsoluteX());
|
||||||
panel.setPositionY(panel.getAbsoluteY());
|
panel.setPositionY(panel.getAbsoluteY());
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
//add a dummy icon in place of the existing one
|
||||||
|
dummyPanel = ImagePanel.createImagePanel("Textures/ui/uiFrame1.png");
|
||||||
|
dummyPanel.setMinWidth(panelWidth);
|
||||||
|
dummyPanel.setMinHeight(panelHeight);
|
||||||
|
dummyPanel.setMarginRight(10);
|
||||||
|
dummyPanel.setMarginBottom(10);
|
||||||
|
panelContainer.addChild(dummyPanel);
|
||||||
//play sound effect
|
//play sound effect
|
||||||
if(Globals.virtualAudioSourceManager != null){
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventoryGrabItem.ogg", VirtualAudioSourceType.UI, false);
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventoryGrabItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
@ -141,7 +149,6 @@ public class NaturalInventoryPanel {
|
|||||||
// System.out.println("Drag");
|
// System.out.println("Drag");
|
||||||
panel.setPositionX(event.getCurrentX() - panelWidth / 2);
|
panel.setPositionX(event.getCurrentX() - panelWidth / 2);
|
||||||
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
||||||
Globals.signalSystem.post(SignalType.YOGA_APPLY, Globals.elementService.getWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER));
|
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
@ -150,33 +157,52 @@ public class NaturalInventoryPanel {
|
|||||||
ContainerElement container = (ContainerElement)panel.getParent();
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
container.removeChild(panel);
|
container.removeChild(panel);
|
||||||
}
|
}
|
||||||
panel.setAbsolutePosition(false);
|
div.addChild(panel);
|
||||||
Globals.elementService.fireEvent(event, event.getCurrentX(), event.getCurrentY());
|
Globals.elementService.fireEvent(event, event.getCurrentX(), event.getCurrentY());
|
||||||
}
|
}
|
||||||
|
//dummy panel handling
|
||||||
|
destroyDummyPanel();
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
} else {
|
} else {
|
||||||
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
if(Globals.dragSourceInventory instanceof RelationalInventoryState){
|
if(Globals.dragSourceInventory instanceof RelationalInventoryState){
|
||||||
|
RelationalInventoryState sourceInventory = (RelationalInventoryState) Globals.dragSourceInventory;
|
||||||
Entity item = Globals.draggedItem;
|
Entity item = Globals.draggedItem;
|
||||||
if(ClientEquipState.hasEquipState(entity) && InventoryUtils.hasEquipInventory(entity)){
|
if(ClientEquipState.hasEquipState(entity) && InventoryUtils.hasEquipInventory(entity)){
|
||||||
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(entity);
|
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(entity);
|
||||||
ClientEquipState equipState = ClientEquipState.getEquipState(entity);
|
ClientEquipState equipState = ClientEquipState.getEquipState(entity);
|
||||||
equipState.commandAttemptUnequip(equipInventory.getItemSlot(item));
|
equipState.commandAttemptUnequip(equipInventory.getItemSlot(item));
|
||||||
}
|
}
|
||||||
} else if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
|
||||||
Entity item = Globals.draggedItem;
|
|
||||||
if(ItemUtils.getContainingParent(item) != Globals.playerEntity){
|
|
||||||
throw new UnsupportedOperationException("Unimplemented!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//update ui
|
//update ui
|
||||||
Globals.dragSourceInventory = null;
|
// Globals.dragSourceInventory = null;
|
||||||
Globals.draggedItem = null;
|
// Globals.draggedItem = null;
|
||||||
//clear item container ui
|
//clear item container ui
|
||||||
WindowUtils.cleanItemDraggingWindow();
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
//rerender inventories
|
//dummy panel handling
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
destroyDummyPanel();
|
||||||
|
//rerender both inventories
|
||||||
|
//re-render inventory
|
||||||
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(sourceInventory));
|
||||||
|
//re-render inventory
|
||||||
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), PlayerInventoryWindow.createPlayerInventoryWindow(Globals.playerEntity));
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//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;
|
return false;
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
@ -187,4 +213,16 @@ public class NaturalInventoryPanel {
|
|||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys the dummy panel
|
||||||
|
*/
|
||||||
|
public static void destroyDummyPanel(){
|
||||||
|
if(dummyPanel != null && dummyPanel.getParent() != null){
|
||||||
|
ContainerElement container = (ContainerElement)dummyPanel.getParent();
|
||||||
|
container.removeChild(dummyPanel);
|
||||||
|
dummyPanel.destroy();
|
||||||
|
dummyPanel = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,17 +1,12 @@
|
|||||||
package electrosphere.renderer.ui.components;
|
package electrosphere.renderer.ui.components;
|
||||||
|
|
||||||
import electrosphere.controls.ControlHandler.ControlsState;
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.signal.Signal.SignalType;
|
import electrosphere.engine.signal.Signal.SignalType;
|
||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
import electrosphere.entity.state.inventory.InventoryUtils;
|
import electrosphere.entity.state.inventory.InventoryUtils;
|
||||||
import electrosphere.menu.WindowStrings;
|
|
||||||
import electrosphere.menu.WindowUtils;
|
|
||||||
import electrosphere.renderer.ui.elements.Window;
|
import electrosphere.renderer.ui.elements.Window;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification;
|
||||||
import electrosphere.renderer.ui.elementtypes.NavigableElement.NavigationEventCallback;
|
|
||||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The player's inventory
|
* The player's inventory
|
||||||
@ -42,34 +37,13 @@ public class PlayerInventoryWindow {
|
|||||||
rVal.setParentAlignItem(YogaAlignment.Center);
|
rVal.setParentAlignItem(YogaAlignment.Center);
|
||||||
rVal.setParentJustifyContent(YogaJustification.Center);
|
rVal.setParentJustifyContent(YogaJustification.Center);
|
||||||
|
|
||||||
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
|
||||||
WindowUtils.recursiveSetVisible(Globals.elementService.getWindow(WindowStrings.WINDOW_CHARACTER), false);
|
|
||||||
Globals.elementService.unregisterWindow(WindowStrings.WINDOW_CHARACTER);
|
|
||||||
if(Globals.cameraHandler.getTrackPlayerEntity()){
|
|
||||||
Globals.controlHandler.hintUpdateControlState(ControlsState.MAIN_GAME);
|
|
||||||
} else {
|
|
||||||
Globals.controlHandler.hintUpdateControlState(ControlsState.IN_GAME_FREE_CAMERA);
|
|
||||||
}
|
|
||||||
Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(false);
|
|
||||||
return false;
|
|
||||||
}});
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
//contents
|
|
||||||
//
|
|
||||||
|
|
||||||
if(InventoryUtils.hasEquipInventory(entity)){
|
|
||||||
rVal.addChild(EquipmentInventoryPanel.createEquipmentInventoryPanel(entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(InventoryUtils.hasNaturalInventory(entity)){
|
if(InventoryUtils.hasNaturalInventory(entity)){
|
||||||
rVal.addChild(NaturalInventoryPanel.createNaturalInventoryPanel(entity));
|
rVal.addChild(NaturalInventoryPanel.createNaturalInventoryPanel(entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
if(InventoryUtils.hasEquipInventory(entity)){
|
||||||
//Final setup
|
rVal.addChild(EquipmentInventoryPanel.createEquipmentInventoryPanel(entity));
|
||||||
//
|
}
|
||||||
|
|
||||||
Globals.signalSystem.post(SignalType.YOGA_APPLY, rVal);
|
Globals.signalSystem.post(SignalType.YOGA_APPLY, rVal);
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ public class Button extends StandardContainerElement implements DrawableElement,
|
|||||||
*/
|
*/
|
||||||
public static Button createButton(String text, ClickableElement.ClickEventCallback callback){
|
public static Button createButton(String text, ClickableElement.ClickEventCallback callback){
|
||||||
Button rVal = new Button();
|
Button rVal = new Button();
|
||||||
Label rValLabel = Label.createLabel(text);
|
Label rValLabel = new Label(1.0f);
|
||||||
rValLabel.setText(text);
|
rValLabel.setText(text);
|
||||||
rVal.addChild(rValLabel);
|
rVal.addChild(rValLabel);
|
||||||
rVal.setOnClick(callback);
|
rVal.setOnClick(callback);
|
||||||
@ -68,7 +68,7 @@ public class Button extends StandardContainerElement implements DrawableElement,
|
|||||||
*/
|
*/
|
||||||
public static Button createButton(String text, Runnable callback){
|
public static Button createButton(String text, Runnable callback){
|
||||||
Button rVal = new Button();
|
Button rVal = new Button();
|
||||||
Label rValLabel = Label.createLabel(text);
|
Label rValLabel = new Label(1.0f);
|
||||||
rValLabel.setText(text);
|
rValLabel.setText(text);
|
||||||
rVal.addChild(rValLabel);
|
rVal.addChild(rValLabel);
|
||||||
rVal.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
rVal.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
||||||
|
|||||||
@ -47,7 +47,6 @@ public class Label extends StandardContainerElement implements DrawableElement {
|
|||||||
* Simplified constructor
|
* Simplified constructor
|
||||||
* @param fontSize the size of the font (default is 1.0f)
|
* @param fontSize the size of the font (default is 1.0f)
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public Label(float fontSize){
|
public Label(float fontSize){
|
||||||
super();
|
super();
|
||||||
this.font = Globals.fontManager.getFont("default");
|
this.font = Globals.fontManager.getFont("default");
|
||||||
@ -62,7 +61,6 @@ public class Label extends StandardContainerElement implements DrawableElement {
|
|||||||
* @param y the y position
|
* @param y the y position
|
||||||
* @param fontSize the font size (default is 1.0f)
|
* @param fontSize the font size (default is 1.0f)
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public Label(int x, int y, float fontSize){
|
public Label(int x, int y, float fontSize){
|
||||||
super();
|
super();
|
||||||
this.setPositionX(x);
|
this.setPositionX(x);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user