Character equip screen
This commit is contained in:
parent
ec0ac741e5
commit
0cc3057d51
@ -16,8 +16,12 @@ public class Control {
|
|||||||
ControlMethod onPress;
|
ControlMethod onPress;
|
||||||
ControlMethod onRelease;
|
ControlMethod onRelease;
|
||||||
ControlMethod onRepeat;
|
ControlMethod onRepeat;
|
||||||
|
ControlMethod onClick;
|
||||||
MouseCallback onMove;
|
MouseCallback onMove;
|
||||||
|
|
||||||
|
float pressFrame = 0;
|
||||||
|
float repeatTimeout = 0;
|
||||||
|
|
||||||
public boolean isIsKey() {
|
public boolean isIsKey() {
|
||||||
return type == ControlType.KEY;
|
return type == ControlType.KEY;
|
||||||
}
|
}
|
||||||
@ -64,6 +68,10 @@ public class Control {
|
|||||||
onMove = method;
|
onMove = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setOnClick(ControlMethod method){
|
||||||
|
onClick = method;
|
||||||
|
}
|
||||||
|
|
||||||
public void onPress(){
|
public void onPress(){
|
||||||
if(onPress != null){
|
if(onPress != null){
|
||||||
onPress.execute();
|
onPress.execute();
|
||||||
@ -87,6 +95,28 @@ public class Control {
|
|||||||
onMove.execute(event);
|
onMove.execute(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onClick(){
|
||||||
|
if(onClick != null){
|
||||||
|
onClick.execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getPressFrame(){
|
||||||
|
return this.pressFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPressFrame(float frame){
|
||||||
|
pressFrame = frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getRepeatTimeout(){
|
||||||
|
return this.repeatTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepeatTimeout(float timeout){
|
||||||
|
repeatTimeout = timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public interface ControlMethod {
|
public interface ControlMethod {
|
||||||
|
|||||||
@ -70,6 +70,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 DATA_STRING_INPUT_CODE_MENU_INCREMENT = "menuIncrement";
|
public static final String DATA_STRING_INPUT_CODE_MENU_INCREMENT = "menuIncrement";
|
||||||
public static final String DATA_STRING_INPUT_CODE_MENU_DECREMENT = "menuDecrement";
|
public static final String DATA_STRING_INPUT_CODE_MENU_DECREMENT = "menuDecrement";
|
||||||
@ -188,6 +189,7 @@ public class ControlHandler {
|
|||||||
handler.addControl(INPUT_CODE_INTERACT, new Control(ControlType.KEY,GLFW_KEY_E));
|
handler.addControl(INPUT_CODE_INTERACT, new Control(ControlType.KEY,GLFW_KEY_E));
|
||||||
handler.addControl(INPUT_CODE_DROP, new Control(ControlType.KEY,GLFW_KEY_Y));
|
handler.addControl(INPUT_CODE_DROP, new Control(ControlType.KEY,GLFW_KEY_Y));
|
||||||
handler.addControl(INPUT_CODE_INVENTORY_OPEN, new Control(ControlType.KEY,GLFW_KEY_I));
|
handler.addControl(INPUT_CODE_INVENTORY_OPEN, new Control(ControlType.KEY,GLFW_KEY_I));
|
||||||
|
handler.addControl(INPUT_CODE_CHARACTER_OPEN, new Control(ControlType.KEY,GLFW_KEY_C));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Map the menu navigation controls
|
Map the menu navigation controls
|
||||||
@ -301,6 +303,7 @@ public class ControlHandler {
|
|||||||
|
|
||||||
case INVENTORY:
|
case INVENTORY:
|
||||||
runHandlers(inventoryControlList);
|
runHandlers(inventoryControlList);
|
||||||
|
runHandlers(menuNavigationControlList);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NO_INPUT:
|
case NO_INPUT:
|
||||||
@ -724,7 +727,7 @@ public class ControlHandler {
|
|||||||
Main menu dialog toggle
|
Main menu dialog toggle
|
||||||
*/
|
*/
|
||||||
mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU));
|
mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU));
|
||||||
controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).setOnPress(new ControlMethod(){public void execute(){
|
controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).setOnClick(new ControlMethod(){public void execute(){
|
||||||
// Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, MenuGenerators.createInGameMainMenu());
|
// Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, MenuGenerators.createInGameMainMenu());
|
||||||
// Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
// Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
||||||
|
|
||||||
@ -733,6 +736,7 @@ public class ControlHandler {
|
|||||||
mainMenuWindow.addChild(mainMenuInGame);
|
mainMenuWindow.addChild(mainMenuInGame);
|
||||||
Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, mainMenuWindow);
|
Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, mainMenuWindow);
|
||||||
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN), true);
|
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN), true);
|
||||||
|
Globals.elementManager.focusFirstElement();
|
||||||
Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
||||||
Globals.controlHandler.showMouse();
|
Globals.controlHandler.showMouse();
|
||||||
// Element mainMenu = MenuGenerators.createInGameMainMenu();
|
// Element mainMenu = MenuGenerators.createInGameMainMenu();
|
||||||
@ -740,20 +744,18 @@ public class ControlHandler {
|
|||||||
// MenuGenerators.makeMenuDrawable(mainMenu);
|
// MenuGenerators.makeMenuDrawable(mainMenu);
|
||||||
// Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
// Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
||||||
}});
|
}});
|
||||||
|
controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).setRepeatTimeout(0.5f);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Open inventory
|
Open inventory
|
||||||
*/
|
*/
|
||||||
mainGameControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN));
|
mainGameControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN));
|
||||||
controls.get(INPUT_CODE_INVENTORY_OPEN).setOnPress(new ControlMethod(){public void execute(){
|
inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN));
|
||||||
if(InventoryUtils.hasNaturalInventory(Globals.playerCharacter)){
|
controls.get(INPUT_CODE_INVENTORY_OPEN).setOnClick(new ControlMethod(){public void execute(){
|
||||||
|
if(InventoryUtils.hasNaturalInventory(Globals.playerCharacter) && Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(InventoryUtils.getNaturalInventory(Globals.playerCharacter).getId())) == null){
|
||||||
//create window
|
//create window
|
||||||
Window mainMenuWindow = new Window(0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT);
|
|
||||||
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerCharacter);
|
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerCharacter);
|
||||||
//create window contents
|
Window mainMenuWindow = MenuGenerators.createNaturalInventoryMenu(inventory);
|
||||||
Element inventoryUI = MenuGenerators.createNaturalInventoryMenu(inventory);
|
|
||||||
//add contents
|
|
||||||
mainMenuWindow.addChild(inventoryUI);
|
|
||||||
//register
|
//register
|
||||||
Globals.elementManager.registerWindow(WindowUtils.getInventoryWindowID(inventory.getId()), mainMenuWindow);
|
Globals.elementManager.registerWindow(WindowUtils.getInventoryWindowID(inventory.getId()), mainMenuWindow);
|
||||||
//make visible
|
//make visible
|
||||||
@ -761,8 +763,33 @@ public class ControlHandler {
|
|||||||
//controls
|
//controls
|
||||||
Globals.controlHandler.setHandlerState(ControlsState.INVENTORY);
|
Globals.controlHandler.setHandlerState(ControlsState.INVENTORY);
|
||||||
Globals.controlHandler.showMouse();
|
Globals.controlHandler.showMouse();
|
||||||
|
//
|
||||||
|
Globals.openInventoriesCount++;
|
||||||
}
|
}
|
||||||
}});
|
}});
|
||||||
|
controls.get(INPUT_CODE_INVENTORY_OPEN).setRepeatTimeout(0.5f);
|
||||||
|
|
||||||
|
/*
|
||||||
|
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.playerCharacter) && Globals.elementManager.getWindow(WindowStrings.WINDOW_CHARACTER) == null){
|
||||||
|
//create window
|
||||||
|
Window mainMenuWindow = MenuGenerators.createCharacterMenu(InventoryUtils.getEquipInventory(Globals.playerCharacter));
|
||||||
|
//register
|
||||||
|
Globals.elementManager.registerWindow(WindowStrings.WINDOW_CHARACTER, mainMenuWindow);
|
||||||
|
//make visible
|
||||||
|
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_CHARACTER), true);
|
||||||
|
//controls
|
||||||
|
Globals.controlHandler.setHandlerState(ControlsState.INVENTORY);
|
||||||
|
Globals.controlHandler.showMouse();
|
||||||
|
//
|
||||||
|
Globals.openInventoriesCount++;
|
||||||
|
}
|
||||||
|
}});
|
||||||
|
controls.get(INPUT_CODE_CHARACTER_OPEN).setRepeatTimeout(0.5f);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -781,13 +808,13 @@ public class ControlHandler {
|
|||||||
menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT));
|
menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT));
|
||||||
controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).setOnPress(new ControlMethod(){public void execute(){
|
controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).setOnPress(new ControlMethod(){public void execute(){
|
||||||
// Globals.currentMenu.incrementMenuOption();
|
// Globals.currentMenu.incrementMenuOption();
|
||||||
Globals.elementManager.focusNextElement(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_MAIN));
|
Globals.elementManager.focusNextElement();
|
||||||
}});
|
}});
|
||||||
|
|
||||||
menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT));
|
menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT));
|
||||||
controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).setOnPress(new ControlMethod(){public void execute(){
|
controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).setOnPress(new ControlMethod(){public void execute(){
|
||||||
// Globals.currentMenu.decrementMenuOption();
|
// Globals.currentMenu.decrementMenuOption();
|
||||||
Globals.elementManager.focusPreviousElement(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_MAIN));
|
Globals.elementManager.focusPreviousElement();
|
||||||
}});
|
}});
|
||||||
|
|
||||||
menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT));
|
menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT));
|
||||||
@ -806,10 +833,12 @@ public class ControlHandler {
|
|||||||
// // MenuCallbacks.backout(Globals.currentMenu);
|
// // MenuCallbacks.backout(Globals.currentMenu);
|
||||||
// Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN);
|
// Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN);
|
||||||
// }});
|
// }});
|
||||||
controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).setOnRelease(new ControlMethod(){public void execute(){
|
controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).setOnClick(new ControlMethod(){public void execute(){
|
||||||
// MenuCallbacks.backout(Globals.currentMenu);
|
// MenuCallbacks.backout(Globals.currentMenu);
|
||||||
Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN);
|
Globals.elementManager.navigateBackwards();
|
||||||
|
// Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN);
|
||||||
}});
|
}});
|
||||||
|
controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).setRepeatTimeout(0.5f);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -880,16 +909,16 @@ public class ControlHandler {
|
|||||||
/*
|
/*
|
||||||
Close inventory
|
Close inventory
|
||||||
*/
|
*/
|
||||||
inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_CLOSE));
|
// inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_CLOSE));
|
||||||
controls.get(INPUT_CODE_INVENTORY_CLOSE).setOnPress(new ControlMethod(){public void execute(){
|
// controls.get(INPUT_CODE_INVENTORY_CLOSE).setOnPress(new ControlMethod(){public void execute(){
|
||||||
// MenuCallbacks.backout(Globals.currentMenu);
|
// // MenuCallbacks.backout(Globals.currentMenu);
|
||||||
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerCharacter);
|
// UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerCharacter);
|
||||||
Element inventoryWindow = Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(inventory.getId()));
|
// Element inventoryWindow = Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(inventory.getId()));
|
||||||
WindowUtils.recursiveSetVisible(inventoryWindow, false);
|
// WindowUtils.recursiveSetVisible(inventoryWindow, false);
|
||||||
hideMouse();
|
// hideMouse();
|
||||||
Globals.elementManager.unregisterWindow(WindowUtils.getInventoryWindowID(inventory.getId()));
|
// Globals.elementManager.unregisterWindow(WindowUtils.getInventoryWindowID(inventory.getId()));
|
||||||
Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME);
|
// Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME);
|
||||||
}});
|
// }});
|
||||||
/*
|
/*
|
||||||
Item manipulation
|
Item manipulation
|
||||||
*/
|
*/
|
||||||
@ -945,15 +974,22 @@ public class ControlHandler {
|
|||||||
if(!control.isState()){
|
if(!control.isState()){
|
||||||
//on press
|
//on press
|
||||||
control.onPress();
|
control.onPress();
|
||||||
|
control.setPressFrame(Main.lastFrame);
|
||||||
} else {
|
} else {
|
||||||
//on repeat
|
//on repeat
|
||||||
control.onRepeat();
|
if(Main.lastFrame - control.getPressFrame() > control.getRepeatTimeout()){
|
||||||
|
control.onRepeat();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
control.setState(true);
|
control.setState(true);
|
||||||
} else {
|
} else {
|
||||||
if(control.isState()){
|
if(control.isState()){
|
||||||
//on release
|
//on release
|
||||||
control.onRelease();
|
control.onRelease();
|
||||||
|
//on click
|
||||||
|
if(Main.lastFrame - control.getPressFrame() < control.getRepeatTimeout()){
|
||||||
|
control.onClick();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
control.setState(false);
|
control.setState(false);
|
||||||
|
|||||||
@ -106,6 +106,7 @@ public class LoadingThread extends Thread {
|
|||||||
|
|
||||||
case LOAD_TITLE_MENU:
|
case LOAD_TITLE_MENU:
|
||||||
WindowUtils.recursiveSetVisible(loadingWindow,false);
|
WindowUtils.recursiveSetVisible(loadingWindow,false);
|
||||||
|
WindowUtils.focusWindow(WindowStrings.WINDOW_MENU_MAIN);
|
||||||
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_MAIN), true);
|
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_MAIN), true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -146,7 +146,9 @@ public class EntityDataStrings {
|
|||||||
public static final String ITEM_IS_WEAPON = "itemIsWeapon";
|
public static final String ITEM_IS_WEAPON = "itemIsWeapon";
|
||||||
public static final String ITEM_IS_ARMOR = "itemIsArmor";
|
public static final String ITEM_IS_ARMOR = "itemIsArmor";
|
||||||
public static final String ITEM_EQUIP_WHITELIST = "itemEquipWhitelist";
|
public static final String ITEM_EQUIP_WHITELIST = "itemEquipWhitelist";
|
||||||
|
public static final String ITEM_EQUIP_CLASS = "itemEquipClass";
|
||||||
public static final String ITEM_ICON = "itemIcon";
|
public static final String ITEM_ICON = "itemIcon";
|
||||||
|
public static final String ITEM_IN_WORLD_REPRESENTATION = "itemInWorldRepresentation";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -181,7 +181,6 @@ public class EntityManager {
|
|||||||
}
|
}
|
||||||
if(drawableList.contains(e)){
|
if(drawableList.contains(e)){
|
||||||
drawableList.remove(e);
|
drawableList.remove(e);
|
||||||
EntityUtils.cleanUpDrawableEntity(e);
|
|
||||||
}
|
}
|
||||||
if(entityList.contains(e)){
|
if(entityList.contains(e)){
|
||||||
entityList.remove(e);
|
entityList.remove(e);
|
||||||
|
|||||||
@ -48,7 +48,7 @@ public class EquipState {
|
|||||||
boolean targetIsItem = ItemUtils.isItem(toEquip);
|
boolean targetIsItem = ItemUtils.isItem(toEquip);
|
||||||
boolean targetIsAttached = AttachUtils.isAttached(toEquip);
|
boolean targetIsAttached = AttachUtils.isAttached(toEquip);
|
||||||
boolean targetHasWhitelist = ItemUtils.hasEquipList(toEquip);
|
boolean targetHasWhitelist = ItemUtils.hasEquipList(toEquip);
|
||||||
String equipItemClass = "";//somehow resolve from toEquip
|
String equipItemClass = ItemUtils.getEquipClass(toEquip);//somehow resolve from toEquip
|
||||||
List<String> pointEquipClassList = point.getEquipClassWhitelist();
|
List<String> pointEquipClassList = point.getEquipClassWhitelist();
|
||||||
boolean itemIsInPointWhitelist = pointEquipClassList.contains(equipItemClass);
|
boolean itemIsInPointWhitelist = pointEquipClassList.contains(equipItemClass);
|
||||||
if(!hasEquipped && targetIsItem && !targetIsAttached && itemIsInPointWhitelist){
|
if(!hasEquipped && targetIsItem && !targetIsAttached && itemIsInPointWhitelist){
|
||||||
@ -153,7 +153,47 @@ public class EquipState {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
public void unequipPoint(String pointId){
|
public void unequipPoint(String pointId){
|
||||||
equipMap.remove(pointId);
|
Entity equipped = equipMap.remove(pointId);
|
||||||
|
if(equipped != null){
|
||||||
|
boolean targetHasWhitelist = ItemUtils.hasEquipList(equipped);
|
||||||
|
if(targetHasWhitelist){
|
||||||
|
//have to do fancy mesh removal nonsense
|
||||||
|
//basically the reverse of below
|
||||||
|
// List<EquipWhitelist> whitelist = ItemUtils.getEquipWhitelist(equipped);
|
||||||
|
// for(EquipWhitelist whitelistItem : whitelist){
|
||||||
|
// if(whitelistItem.getCreatureId().equals(parentCreatureId)){
|
||||||
|
// //put in map
|
||||||
|
// equipMap.put(point.getEquipPointId(),toEquip);
|
||||||
|
// String modelName = whitelistItem.getModel();
|
||||||
|
// Globals.assetManager.addModelPathToQueue(modelName);
|
||||||
|
// Actor parentActor = EntityUtils.getActor(parent);
|
||||||
|
// //queue meshes from display model to parent actor
|
||||||
|
// ActorMeshMask meshMask = parentActor.getMeshMask();
|
||||||
|
// for(String toBlock : whitelistItem.getMeshMaskList()){
|
||||||
|
// meshMask.blockMesh(modelName, toBlock);
|
||||||
|
// }
|
||||||
|
// for(String toDraw : whitelistItem.getMeshList()){
|
||||||
|
// meshMask.queueMesh(modelName, toDraw);
|
||||||
|
// }
|
||||||
|
// //attach to parent bone
|
||||||
|
// AttachUtils.attachEntityToEntityAtBone(parent, toEquip, point.getBone());
|
||||||
|
// //make uncollidable
|
||||||
|
// if(toEquip.getDataKeys().contains(EntityDataStrings.PHYSICS_COLLISION_BODY) && toEquip.getDataKeys().contains(EntityDataStrings.PHYSICS_COLLIDABLE)){
|
||||||
|
// CollisionObject rigidBody = (CollisionObject)toEquip.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||||
|
// Globals.collisionEngine.deregisterPhysicsObject(rigidBody);
|
||||||
|
// }
|
||||||
|
// //hide toEquip actor
|
||||||
|
// EntityUtils.setDraw(toEquip, false);
|
||||||
|
// //make untargetable
|
||||||
|
// Globals.entityManager.setTargetable(toEquip, false);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
} else {
|
||||||
|
AttachUtils.detatchEntityFromEntityAtBone(parent, equipped);
|
||||||
|
EntityUtils.cleanUpDrawableEntity(equipped);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,9 +6,11 @@ import org.joml.Vector3f;
|
|||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
import electrosphere.entity.EntityDataStrings;
|
import electrosphere.entity.EntityDataStrings;
|
||||||
import electrosphere.entity.EntityUtils;
|
import electrosphere.entity.EntityUtils;
|
||||||
|
import electrosphere.entity.state.equip.EquipState;
|
||||||
import electrosphere.entity.state.gravity.GravityUtils;
|
import electrosphere.entity.state.gravity.GravityUtils;
|
||||||
import electrosphere.entity.types.creature.CreatureUtils;
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
import electrosphere.entity.types.item.ItemUtils;
|
import electrosphere.entity.types.item.ItemUtils;
|
||||||
|
import electrosphere.main.Globals;
|
||||||
|
|
||||||
public class InventoryUtils {
|
public class InventoryUtils {
|
||||||
|
|
||||||
@ -21,6 +23,14 @@ public class InventoryUtils {
|
|||||||
return (UnrelationalInventoryState)target.getData(EntityDataStrings.NATURAL_INVENTORY);
|
return (UnrelationalInventoryState)target.getData(EntityDataStrings.NATURAL_INVENTORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean hasEquipInventory(Entity target){
|
||||||
|
return target.getDataKeys().contains(EntityDataStrings.EQUIP_INVENTORY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RelationalInventoryState getEquipInventory(Entity target){
|
||||||
|
return (RelationalInventoryState)target.getData(EntityDataStrings.EQUIP_INVENTORY);
|
||||||
|
}
|
||||||
|
|
||||||
public static void attemptStoreItem(Entity creature, Entity item){
|
public static void attemptStoreItem(Entity creature, Entity item){
|
||||||
boolean creatureIsCreature = CreatureUtils.isCreature(creature);
|
boolean creatureIsCreature = CreatureUtils.isCreature(creature);
|
||||||
boolean itemIsItem = ItemUtils.isItem(item);
|
boolean itemIsItem = ItemUtils.isItem(item);
|
||||||
@ -45,12 +55,28 @@ public class InventoryUtils {
|
|||||||
//verify creature is creature, item is item, inventory exists, and item is in inventory
|
//verify creature is creature, item is item, inventory exists, and item is in inventory
|
||||||
boolean creatureIsCreature = CreatureUtils.isCreature(creature);
|
boolean creatureIsCreature = CreatureUtils.isCreature(creature);
|
||||||
boolean itemIsItem = ItemUtils.isItem(item);
|
boolean itemIsItem = ItemUtils.isItem(item);
|
||||||
boolean hasInventory = hasNaturalInventory(creature);
|
boolean hasNaturalInventory = hasNaturalInventory(creature);
|
||||||
if(creatureIsCreature && itemIsItem && hasInventory){
|
boolean hasEquipInventory = hasEquipInventory(creature);
|
||||||
//get inventory
|
if(creatureIsCreature && itemIsItem){
|
||||||
UnrelationalInventoryState inventory = getNaturalInventory(creature);
|
if(hasNaturalInventory){
|
||||||
//remove item from inventory
|
//get inventory
|
||||||
inventory.removeItem(item);
|
UnrelationalInventoryState inventory = getNaturalInventory(creature);
|
||||||
|
//remove item from inventory
|
||||||
|
inventory.removeItem(item);
|
||||||
|
}
|
||||||
|
if(hasEquipInventory){
|
||||||
|
//get inventory
|
||||||
|
RelationalInventoryState inventory = getEquipInventory(creature);
|
||||||
|
//get real world item
|
||||||
|
Entity realWorldItem = ItemUtils.getRealWorldEntity(item);
|
||||||
|
if(realWorldItem != null){
|
||||||
|
//drop item
|
||||||
|
EquipState equipState = (EquipState)creature.getData(EntityDataStrings.EQUIP_STATE);
|
||||||
|
equipState.unequipPoint(inventory.getItemSlot(item));
|
||||||
|
}
|
||||||
|
//remove item from inventory
|
||||||
|
inventory.tryRemoveItem(item);
|
||||||
|
}
|
||||||
//compose item into in-world entity
|
//compose item into in-world entity
|
||||||
Entity inWorldItem = ItemUtils.spawnBasicItem(ItemUtils.getType(item));
|
Entity inWorldItem = ItemUtils.spawnBasicItem(ItemUtils.getType(item));
|
||||||
//delete in container item
|
//delete in container item
|
||||||
@ -64,4 +90,36 @@ public class InventoryUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//need creature so we can figure out where to drop the item
|
||||||
|
public static void attemptDestroyItem(Entity creature, Entity item){
|
||||||
|
//verify creature is creature, item is item, inventory exists, and item is in inventory
|
||||||
|
boolean creatureIsCreature = CreatureUtils.isCreature(creature);
|
||||||
|
boolean itemIsItem = ItemUtils.isItem(item);
|
||||||
|
boolean hasNaturalInventory = hasNaturalInventory(creature);
|
||||||
|
boolean hasEquipInventory = hasEquipInventory(creature);
|
||||||
|
if(creatureIsCreature && itemIsItem){
|
||||||
|
if(hasNaturalInventory){
|
||||||
|
//get inventory
|
||||||
|
UnrelationalInventoryState inventory = getNaturalInventory(creature);
|
||||||
|
//remove item from inventory
|
||||||
|
inventory.removeItem(item);
|
||||||
|
}
|
||||||
|
if(hasEquipInventory){
|
||||||
|
//get inventory
|
||||||
|
RelationalInventoryState inventory = getEquipInventory(creature);
|
||||||
|
//get real world item
|
||||||
|
Entity realWorldItem = ItemUtils.getRealWorldEntity(item);
|
||||||
|
if(realWorldItem != null){
|
||||||
|
//drop item
|
||||||
|
EquipState equipState = (EquipState)creature.getData(EntityDataStrings.EQUIP_STATE);
|
||||||
|
equipState.unequipPoint(inventory.getItemSlot(item));
|
||||||
|
}
|
||||||
|
//remove item from inventory
|
||||||
|
inventory.tryRemoveItem(item);
|
||||||
|
}
|
||||||
|
//delete in container item
|
||||||
|
ItemUtils.destroyInInventoryItem(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,24 +6,29 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
|
import electrosphere.entity.types.item.ItemUtils;
|
||||||
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
||||||
|
|
||||||
public class RelationalInventoryState {
|
public class RelationalInventoryState {
|
||||||
|
|
||||||
Map<String,Entity> items = new HashMap<String,Entity>();
|
Map<String,Entity> items = new HashMap<String,Entity>();
|
||||||
|
Map<String,List<String>> slotWhitelists = new HashMap<String,List<String>>();
|
||||||
|
Map<String,EquipPoint> equipPoints = new HashMap<String,EquipPoint>();
|
||||||
|
|
||||||
public static RelationalInventoryState buildRelationalInventoryStateFromStringList(List<String> slots){
|
// public static RelationalInventoryState buildRelationalInventoryStateFromStringList(List<String> slots){
|
||||||
RelationalInventoryState rVal = new RelationalInventoryState();
|
// RelationalInventoryState rVal = new RelationalInventoryState();
|
||||||
for(String slot : slots){
|
// for(String slot : slots){
|
||||||
rVal.items.put(slot,null);
|
// rVal.items.put(slot,null);
|
||||||
}
|
// }
|
||||||
return rVal;
|
// return rVal;
|
||||||
}
|
// }
|
||||||
|
|
||||||
public static RelationalInventoryState buildRelationalInventoryStateFromEquipList(List<EquipPoint> points){
|
public static RelationalInventoryState buildRelationalInventoryStateFromEquipList(List<EquipPoint> points){
|
||||||
RelationalInventoryState rVal = new RelationalInventoryState();
|
RelationalInventoryState rVal = new RelationalInventoryState();
|
||||||
for(EquipPoint point : points){
|
for(EquipPoint point : points){
|
||||||
rVal.items.put(point.getEquipPointId(),null);
|
rVal.items.put(point.getEquipPointId(),null);
|
||||||
|
rVal.slotWhitelists.put(point.getEquipPointId(),point.getEquipClassWhitelist());
|
||||||
|
rVal.equipPoints.put(point.getEquipPointId(),point);
|
||||||
}
|
}
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
@ -42,6 +47,17 @@ public class RelationalInventoryState {
|
|||||||
return items.get(slot);
|
return items.get(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getItemSlot(Entity item){
|
||||||
|
if(items.containsValue(item)){
|
||||||
|
for(String slot : items.keySet()){
|
||||||
|
if(items.get(slot) == item){
|
||||||
|
return slot;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean hasItemInSlot(String slot){
|
public boolean hasItemInSlot(String slot){
|
||||||
//if the slot is a key return if the value at the key isn't null, otherwise return false
|
//if the slot is a key return if the value at the key isn't null, otherwise return false
|
||||||
return items.containsKey(slot) ? items.get(slot) != null : false;
|
return items.containsKey(slot) ? items.get(slot) != null : false;
|
||||||
@ -51,4 +67,29 @@ public class RelationalInventoryState {
|
|||||||
return new LinkedList<String>(items.keySet());
|
return new LinkedList<String>(items.keySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Entity tryRemoveItem(Entity item){
|
||||||
|
if(items.containsValue(item)){
|
||||||
|
for(String slot : items.keySet()){
|
||||||
|
if(items.get(slot) == item){
|
||||||
|
items.remove(slot);
|
||||||
|
items.put(slot,null);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canEquipItemToSlot(Entity item, String slot){
|
||||||
|
String itemClass = ItemUtils.getEquipClass(item);
|
||||||
|
if(slotWhitelists.get(slot).contains(itemClass)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EquipPoint getEquipPointFromSlot(String slot){
|
||||||
|
return equipPoints.get(slot);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ public class AttachUtils {
|
|||||||
if(parent.getDataKeys().contains(EntityDataStrings.ATTACH_CHILDREN_LIST)){
|
if(parent.getDataKeys().contains(EntityDataStrings.ATTACH_CHILDREN_LIST)){
|
||||||
getChildrenList(parent).add(toAttach);
|
getChildrenList(parent).add(toAttach);
|
||||||
} else {
|
} else {
|
||||||
LinkedList<Entity> childrenEntities = new LinkedList();
|
LinkedList<Entity> childrenEntities = new LinkedList<Entity> ();
|
||||||
childrenEntities.add(toAttach);
|
childrenEntities.add(toAttach);
|
||||||
parent.putData(EntityDataStrings.ATTACH_CHILDREN_LIST, childrenEntities);
|
parent.putData(EntityDataStrings.ATTACH_CHILDREN_LIST, childrenEntities);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,6 +115,9 @@ public class ItemUtils {
|
|||||||
} else {
|
} else {
|
||||||
rVal.putData(EntityDataStrings.ITEM_ICON,genericItemIconPath);
|
rVal.putData(EntityDataStrings.ITEM_ICON,genericItemIconPath);
|
||||||
}
|
}
|
||||||
|
if(item.getEquipClass() != null){
|
||||||
|
rVal.putData(EntityDataStrings.ITEM_EQUIP_CLASS,item.getEquipClass());
|
||||||
|
}
|
||||||
rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true);
|
rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true);
|
||||||
rVal.putData(EntityDataStrings.ITEM_IS_ITEM, true);
|
rVal.putData(EntityDataStrings.ITEM_IS_ITEM, true);
|
||||||
rVal.putData(EntityDataStrings.ITEM_TYPE, name);
|
rVal.putData(EntityDataStrings.ITEM_TYPE, name);
|
||||||
@ -210,6 +213,7 @@ public class ItemUtils {
|
|||||||
rVal.putData(EntityDataStrings.ITEM_EQUIP_WHITELIST, getEquipWhitelist(item));
|
rVal.putData(EntityDataStrings.ITEM_EQUIP_WHITELIST, getEquipWhitelist(item));
|
||||||
}
|
}
|
||||||
rVal.putData(EntityDataStrings.ITEM_ICON,ItemUtils.getItemIcon(item));
|
rVal.putData(EntityDataStrings.ITEM_ICON,ItemUtils.getItemIcon(item));
|
||||||
|
rVal.putData(EntityDataStrings.ITEM_EQUIP_CLASS, item.getData(EntityDataStrings.ITEM_EQUIP_CLASS));
|
||||||
rVal.putData(EntityDataStrings.ITEM_IS_ITEM, true);
|
rVal.putData(EntityDataStrings.ITEM_IS_ITEM, true);
|
||||||
rVal.putData(EntityDataStrings.ITEM_TYPE, item.getData(EntityDataStrings.ITEM_TYPE));
|
rVal.putData(EntityDataStrings.ITEM_TYPE, item.getData(EntityDataStrings.ITEM_TYPE));
|
||||||
Globals.entityManager.registerEntity(rVal);
|
Globals.entityManager.registerEntity(rVal);
|
||||||
@ -248,4 +252,16 @@ public class ItemUtils {
|
|||||||
return (String)item.getData(EntityDataStrings.ITEM_ICON);
|
return (String)item.getData(EntityDataStrings.ITEM_ICON);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getEquipClass(Entity item){
|
||||||
|
return (String)item.getData(EntityDataStrings.ITEM_EQUIP_CLASS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setRealWorldEntity(Entity inInventory, Entity inWorld){
|
||||||
|
inInventory.putData(EntityDataStrings.ITEM_IN_WORLD_REPRESENTATION, inWorld);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Entity getRealWorldEntity(Entity inInventory){
|
||||||
|
return (Entity) inInventory.getData(EntityDataStrings.ITEM_IN_WORLD_REPRESENTATION);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,6 +14,7 @@ public class Item {
|
|||||||
List<EquipWhitelist> equipWhitelist;
|
List<EquipWhitelist> equipWhitelist;
|
||||||
String idleAnim;
|
String idleAnim;
|
||||||
String iconPath;
|
String iconPath;
|
||||||
|
String equipClass;
|
||||||
|
|
||||||
public String getItemId() {
|
public String getItemId() {
|
||||||
return itemId;
|
return itemId;
|
||||||
@ -46,5 +47,9 @@ public class Item {
|
|||||||
public String getIconPath(){
|
public String getIconPath(){
|
||||||
return iconPath;
|
return iconPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getEquipClass(){
|
||||||
|
return equipClass;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -277,6 +277,7 @@ public class Globals {
|
|||||||
|
|
||||||
//manager for all widgets currently being drawn to screen
|
//manager for all widgets currently being drawn to screen
|
||||||
public static ElementManager elementManager;
|
public static ElementManager elementManager;
|
||||||
|
public static int openInventoriesCount = 0;
|
||||||
|
|
||||||
//collision world data
|
//collision world data
|
||||||
public static CommonWorldData commonWorldData;
|
public static CommonWorldData commonWorldData;
|
||||||
@ -300,7 +301,7 @@ public class Globals {
|
|||||||
|
|
||||||
//drag item state
|
//drag item state
|
||||||
public static Entity draggedItem = null;
|
public static Entity draggedItem = null;
|
||||||
public static UnrelationalInventoryState dragSourceInventory = null;
|
public static Object dragSourceInventory = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +1,17 @@
|
|||||||
package electrosphere.menu;
|
package electrosphere.menu;
|
||||||
|
|
||||||
|
import electrosphere.controls.ControlHandler.ControlsState;
|
||||||
import electrosphere.engine.LoadingThread;
|
import electrosphere.engine.LoadingThread;
|
||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
|
import electrosphere.entity.EntityDataStrings;
|
||||||
|
import electrosphere.entity.state.equip.EquipState;
|
||||||
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.state.inventory.UnrelationalInventoryState;
|
||||||
import electrosphere.entity.types.item.ItemUtils;
|
import electrosphere.entity.types.item.ItemUtils;
|
||||||
import electrosphere.game.server.saves.SaveUtils;
|
import electrosphere.game.server.saves.SaveUtils;
|
||||||
import electrosphere.main.Globals;
|
import electrosphere.main.Globals;
|
||||||
|
import electrosphere.main.Main;
|
||||||
import electrosphere.net.NetUtils;
|
import electrosphere.net.NetUtils;
|
||||||
import electrosphere.renderer.ui.ClickableElement;
|
import electrosphere.renderer.ui.ClickableElement;
|
||||||
import electrosphere.renderer.ui.DrawableElement;
|
import electrosphere.renderer.ui.DrawableElement;
|
||||||
@ -14,7 +19,10 @@ import electrosphere.renderer.ui.Element;
|
|||||||
import electrosphere.renderer.ui.FocusableElement;
|
import electrosphere.renderer.ui.FocusableElement;
|
||||||
import electrosphere.renderer.ui.WidgetUtils;
|
import electrosphere.renderer.ui.WidgetUtils;
|
||||||
import electrosphere.renderer.ui.Window;
|
import electrosphere.renderer.ui.Window;
|
||||||
|
import electrosphere.renderer.ui.ClickableElement.ClickEventCallback;
|
||||||
import electrosphere.renderer.ui.DraggableElement.DragEventCallback;
|
import electrosphere.renderer.ui.DraggableElement.DragEventCallback;
|
||||||
|
import electrosphere.renderer.ui.FocusableElement.FocusEventCallback;
|
||||||
|
import electrosphere.renderer.ui.NavigableElement.NavigationEventCallback;
|
||||||
import electrosphere.renderer.ui.elements.Button;
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
import electrosphere.renderer.ui.elements.Div;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||||
@ -22,10 +30,14 @@ import electrosphere.renderer.ui.elements.Label;
|
|||||||
import electrosphere.renderer.ui.elements.TextInput;
|
import electrosphere.renderer.ui.elements.TextInput;
|
||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.events.DragEvent;
|
import electrosphere.renderer.ui.events.DragEvent;
|
||||||
|
import electrosphere.renderer.ui.events.FocusEvent;
|
||||||
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
import electrosphere.renderer.ui.form.FormElement;
|
import electrosphere.renderer.ui.form.FormElement;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.management.relation.Relation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author amaterasu
|
* @author amaterasu
|
||||||
@ -379,28 +391,43 @@ public class MenuGenerators {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Element worldItemDropCaptureWindow(){
|
public static Element worldItemDropCaptureWindow(){
|
||||||
Div rVal = new Div();
|
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
||||||
rVal.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
Div div = new Div();
|
||||||
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
if(Globals.draggedItem != null){
|
if(Globals.draggedItem != null){
|
||||||
//remove item from inventory
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
||||||
Globals.dragSourceInventory.removeItem(Globals.draggedItem);
|
UnrelationalInventoryState inventory = (UnrelationalInventoryState) Globals.dragSourceInventory;
|
||||||
//drop item
|
//drop item
|
||||||
InventoryUtils.attemptEjectItem(Globals.playerCharacter,Globals.draggedItem);
|
InventoryUtils.attemptEjectItem(Globals.playerCharacter,Globals.draggedItem);
|
||||||
//clear ui
|
//clear ui
|
||||||
WindowUtils.cleanItemWindow();
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
String sourceWindowId = WindowUtils.getInventoryWindowID(Globals.dragSourceInventory.getId());
|
String sourceWindowId = WindowUtils.getInventoryWindowID(inventory.getId());
|
||||||
WindowUtils.replaceWindowContents(sourceWindowId,MenuGenerators.createNaturalInventoryMenu(Globals.dragSourceInventory));
|
WindowUtils.replaceWindow(sourceWindowId,MenuGenerators.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.attemptEjectItem(Globals.playerCharacter,Globals.draggedItem);
|
||||||
|
//clear ui
|
||||||
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
String sourceWindowId = WindowStrings.WINDOW_CHARACTER;
|
||||||
|
WindowUtils.replaceWindow(sourceWindowId,MenuGenerators.createCharacterMenu(inventory));
|
||||||
|
//null globals
|
||||||
|
Globals.dragSourceInventory = null;
|
||||||
|
Globals.draggedItem = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}});
|
}});
|
||||||
rVal.setPositionX(0);
|
div.setPositionX(0);
|
||||||
rVal.setPositionY(0);
|
div.setPositionY(0);
|
||||||
rVal.setWidth(Globals.WINDOW_WIDTH);
|
div.setWidth(Globals.WINDOW_WIDTH);
|
||||||
rVal.setHeight(Globals.WINDOW_HEIGHT);
|
div.setHeight(Globals.WINDOW_HEIGHT);
|
||||||
|
rVal.addChild(div);
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,7 +436,14 @@ public class MenuGenerators {
|
|||||||
int width = 500;
|
int width = 500;
|
||||||
int height = 500;
|
int height = 500;
|
||||||
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
||||||
FormElement rVal = new FormElement();
|
Div rVal = new Div();
|
||||||
|
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
||||||
|
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN), false);
|
||||||
|
Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN);
|
||||||
|
Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME);
|
||||||
|
Globals.controlHandler.hideMouse();
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
|
||||||
//black texture background
|
//black texture background
|
||||||
ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture);
|
ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture);
|
||||||
@ -419,65 +453,101 @@ public class MenuGenerators {
|
|||||||
rVal.addChild(imagePanel);
|
rVal.addChild(imagePanel);
|
||||||
|
|
||||||
//label 1 (back)
|
//label 1 (back)
|
||||||
|
Button backButton = new Button();
|
||||||
Label backLabel = new Label(100,50,1.0f);
|
Label backLabel = new Label(100,50,1.0f);
|
||||||
backLabel.setText("Back");
|
backLabel.setText("Back");
|
||||||
rVal.addChild(backLabel);
|
backButton.addChild(backLabel);
|
||||||
|
rVal.addChild(backButton);
|
||||||
|
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
||||||
|
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN), false);
|
||||||
|
Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN);
|
||||||
|
Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME);
|
||||||
|
Globals.controlHandler.hideMouse();
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
|
||||||
|
|
||||||
//label 2 (quit)
|
//label 2 (quit)
|
||||||
|
Button quitButton = new Button();
|
||||||
Label quitLabel = new Label(100,150,1.0f);
|
Label quitLabel = new Label(100,150,1.0f);
|
||||||
quitLabel.setText("Quit");
|
quitLabel.setText("QUIT");
|
||||||
rVal.addChild(quitLabel);
|
quitButton.addChild(quitLabel);
|
||||||
|
rVal.addChild(quitButton);
|
||||||
|
quitButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
||||||
|
Main.running = false;
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Element createNaturalInventoryMenu(UnrelationalInventoryState inventory){
|
public static Window createNaturalInventoryMenu(UnrelationalInventoryState inventory){
|
||||||
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
||||||
int width = 500;
|
int width = 500;
|
||||||
int height = 500;
|
int height = 500;
|
||||||
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
|
||||||
Div rVal = new Div();
|
|
||||||
|
|
||||||
rVal.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
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.draggedItem != null){
|
||||||
if(Globals.dragSourceInventory != inventory){
|
if(Globals.dragSourceInventory != inventory){
|
||||||
UnrelationalInventoryState sourceInventory = Globals.dragSourceInventory;
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
||||||
//transfer item
|
UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory;
|
||||||
Globals.dragSourceInventory.removeItem(Globals.draggedItem);
|
//transfer item
|
||||||
inventory.addItem(Globals.draggedItem);
|
sourceInventory.removeItem(Globals.draggedItem);
|
||||||
//null out global state
|
inventory.addItem(Globals.draggedItem);
|
||||||
Globals.dragSourceInventory = null;
|
//null out global state
|
||||||
Globals.draggedItem = null;
|
Globals.dragSourceInventory = null;
|
||||||
//clear item container ui
|
Globals.draggedItem = null;
|
||||||
WindowUtils.cleanItemWindow();
|
//clear item container ui
|
||||||
//rerender both inventories
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
//re-render inventory
|
//rerender both inventories
|
||||||
WindowUtils.replaceWindowContents(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory));
|
//re-render inventory
|
||||||
//re-render inventory
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory));
|
||||||
WindowUtils.replaceWindowContents(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGenerators.createNaturalInventoryMenu(sourceInventory));
|
//re-render inventory
|
||||||
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGenerators.createNaturalInventoryMenu(sourceInventory));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
//clear ui
|
//clear ui
|
||||||
WindowUtils.cleanItemWindow();
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
//re-render inventory
|
//re-render inventory
|
||||||
WindowUtils.replaceWindowContents(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory));
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
div.setOnClick(new ClickEventCallback() {public boolean execute(ClickEvent event){
|
||||||
|
WindowUtils.focusWindow(WindowStrings.WINDOW_MENU_INVENTORY);
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
|
||||||
//black texture background
|
//black texture background
|
||||||
ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture);
|
ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture);
|
||||||
// imagePanel.setWidth(width);
|
// imagePanel.setWidth(width);
|
||||||
// imagePanel.setHeight(height);
|
// imagePanel.setHeight(height);
|
||||||
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
||||||
rVal.addChild(imagePanel);
|
div.addChild(imagePanel);
|
||||||
|
|
||||||
//label 1 (inventory)
|
//label 1 (inventory)
|
||||||
Label inventoryLabel = new Label(10,10,1.0f);
|
Label inventoryLabel = new Label(10,10,1.0f);
|
||||||
inventoryLabel.setText("INVENTORY");
|
inventoryLabel.setText("INVENTORY");
|
||||||
rVal.addChild(inventoryLabel);
|
div.addChild(inventoryLabel);
|
||||||
|
|
||||||
int columns = 8;
|
int columns = 8;
|
||||||
int columnWidth = 60;
|
int columnWidth = 60;
|
||||||
@ -506,7 +576,7 @@ public class MenuGenerators {
|
|||||||
// System.out.println("Drag start");
|
// System.out.println("Drag start");
|
||||||
Globals.dragSourceInventory = inventory;
|
Globals.dragSourceInventory = inventory;
|
||||||
Globals.draggedItem = inventory.getItems().get(itemId);
|
Globals.draggedItem = inventory.getItems().get(itemId);
|
||||||
rVal.removeChild(panel);
|
div.removeChild(panel);
|
||||||
WindowUtils.pushItemIconToItemWindow(panel);
|
WindowUtils.pushItemIconToItemWindow(panel);
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
@ -516,28 +586,225 @@ public class MenuGenerators {
|
|||||||
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
// panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
} else {
|
||||||
// // panel.setPositionX(posX);
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
// // panel.setPositionY(posY);
|
if(Globals.dragSourceInventory instanceof RelationalInventoryState){
|
||||||
// //now the fun begins :)
|
RelationalInventoryState sourceInventory = (RelationalInventoryState) Globals.dragSourceInventory;
|
||||||
// //if transfer item
|
Entity item = Globals.draggedItem;
|
||||||
// // remove item from current inventory
|
//destroy real world item
|
||||||
// // place item in new inventory
|
if(ItemUtils.getRealWorldEntity(item) != null){
|
||||||
// // trigger recreation of the menu
|
System.out.println("Destroy real world item");
|
||||||
// //if drop item
|
ItemUtils.destroyInWorldItem(ItemUtils.getRealWorldEntity(item));
|
||||||
// // remove item from current inventory
|
}
|
||||||
// // create item in world in front of character
|
//eject from equip state
|
||||||
// // trigger recreation of the menu
|
InventoryUtils.attemptDestroyItem(Globals.playerCharacter,item);
|
||||||
// //if neither of above
|
//add to unrelational
|
||||||
// // replace item icon position to origin
|
sourceInventory.tryRemoveItem(item);
|
||||||
// // System.out.println("Release drag");
|
inventory.addItem(item);
|
||||||
// return false;
|
//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.createCharacterMenu(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.setWidth(width);
|
||||||
// imagePanel.setHeight(height);
|
// imagePanel.setHeight(height);
|
||||||
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
||||||
rVal.addChild(panel);
|
div.addChild(panel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static Window createCharacterMenu(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.createCharacterMenu(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<String> 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.playerCharacter.getData(EntityDataStrings.EQUIP_STATE);
|
||||||
|
equipState.attemptEquip(inWorldItem,inventory.getEquipPointFromSlot(slots.get(itemId)));
|
||||||
|
}
|
||||||
|
//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.createCharacterMenu(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;
|
return rVal;
|
||||||
|
|||||||
@ -9,5 +9,6 @@ public class WindowStrings {
|
|||||||
public static final String WINDOW_LOADING = "windowLoading";
|
public static final String WINDOW_LOADING = "windowLoading";
|
||||||
public static final String WINDDOW_ITEM_DROP = "itemDrop";
|
public static final String WINDDOW_ITEM_DROP = "itemDrop";
|
||||||
public static final String WINDOW_ITEM_DRAG_CONTAINER = "itemDragContainer";
|
public static final String WINDOW_ITEM_DRAG_CONTAINER = "itemDragContainer";
|
||||||
|
public static final String WINDOW_CHARACTER = "windowCharacter";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@ public class WindowUtils {
|
|||||||
//todo: destroy elements as well
|
//todo: destroy elements as well
|
||||||
mainMenu.getChildren().clear();
|
mainMenu.getChildren().clear();
|
||||||
mainMenu.addChild(newMenu);
|
mainMenu.addChild(newMenu);
|
||||||
Globals.elementManager.focusFirstElement(mainMenu);
|
Globals.elementManager.focusFirstElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ public class WindowUtils {
|
|||||||
//todo: destroy elements as well
|
//todo: destroy elements as well
|
||||||
mainMenu.getChildren().clear();
|
mainMenu.getChildren().clear();
|
||||||
mainMenu.addChild(content);
|
mainMenu.addChild(content);
|
||||||
Globals.elementManager.focusFirstElement(mainMenu);
|
Globals.elementManager.focusFirstElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,12 +53,18 @@ public class WindowUtils {
|
|||||||
Globals.elementManager.pushWindowToFront(targetWindow);
|
Globals.elementManager.pushWindowToFront(targetWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void cleanItemWindow(){
|
public static void cleanItemDraggingWindow(){
|
||||||
Window targetWindow = (Window) Globals.elementManager.getWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER);
|
Window targetWindow = (Window) Globals.elementManager.getWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER);
|
||||||
targetWindow.getChildren().clear();
|
targetWindow.getChildren().clear();
|
||||||
recursiveSetVisible(targetWindow, false);
|
recursiveSetVisible(targetWindow, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void replaceWindow(String window, Window windowEl){
|
||||||
|
Globals.elementManager.unregisterWindow(window);
|
||||||
|
Globals.elementManager.registerWindow(window, windowEl);
|
||||||
|
recursiveSetVisible(windowEl, true);
|
||||||
|
Globals.elementManager.focusFirstElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -89,9 +95,7 @@ public class WindowUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void initItemDropWindow(){
|
static void initItemDropWindow(){
|
||||||
Window itemDropWindow = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
Globals.elementManager.registerWindow(WindowStrings.WINDDOW_ITEM_DROP, MenuGenerators.worldItemDropCaptureWindow());
|
||||||
Globals.elementManager.registerWindow(WindowStrings.WINDDOW_ITEM_DROP, itemDropWindow);
|
|
||||||
WindowUtils.replaceWindowContents(WindowStrings.WINDDOW_ITEM_DROP, MenuGenerators.worldItemDropCaptureWindow());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initItemDragContainerWindow(){
|
static void initItemDragContainerWindow(){
|
||||||
@ -99,4 +103,10 @@ public class WindowUtils {
|
|||||||
Globals.elementManager.registerWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER, itemDragContainerWindow);
|
Globals.elementManager.registerWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER, itemDragContainerWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void focusWindow(String window){
|
||||||
|
Element windowEl = Globals.elementManager.getWindow(window);
|
||||||
|
Globals.elementManager.unregisterWindow(window);
|
||||||
|
Globals.elementManager.registerWindow(window, windowEl);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,9 @@ import electrosphere.renderer.ui.events.DragEvent;
|
|||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
import electrosphere.renderer.ui.events.FocusEvent;
|
import electrosphere.renderer.ui.events.FocusEvent;
|
||||||
import electrosphere.renderer.ui.events.MouseEvent;
|
import electrosphere.renderer.ui.events.MouseEvent;
|
||||||
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||||
|
import electrosphere.renderer.ui.events.NavigationEvent.NavigationEventType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -34,7 +36,7 @@ public class ElementManager {
|
|||||||
elementList.add(w);
|
elementList.add(w);
|
||||||
}
|
}
|
||||||
if(elementList.size() == 1){
|
if(elementList.size() == 1){
|
||||||
focusFirstElement(w);
|
focusFirstElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,6 +53,9 @@ public class ElementManager {
|
|||||||
if(elementList.contains(w)){
|
if(elementList.contains(w)){
|
||||||
elementList.remove(w);
|
elementList.remove(w);
|
||||||
}
|
}
|
||||||
|
if(elementList.size() > 0){
|
||||||
|
focusFirstElement();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pushWindowToFront(Window window){
|
public void pushWindowToFront(Window window){
|
||||||
@ -75,8 +80,8 @@ public class ElementManager {
|
|||||||
return currentFocusedElement;
|
return currentFocusedElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void focusFirstElement(Element topLevel){
|
public void focusFirstElement(){
|
||||||
List<FocusableElement> focusables = getFocusableList(topLevel,new LinkedList<FocusableElement>());
|
List<FocusableElement> focusables = getFocusableList(elementList.get(elementList.size() - 1),new LinkedList<FocusableElement>());
|
||||||
if(focusables.size() > 0){
|
if(focusables.size() > 0){
|
||||||
if(currentFocusedElement != null){
|
if(currentFocusedElement != null){
|
||||||
currentFocusedElement.handleEvent(new FocusEvent(false));
|
currentFocusedElement.handleEvent(new FocusEvent(false));
|
||||||
@ -86,8 +91,8 @@ public class ElementManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void focusNextElement(Element topLevel){
|
public void focusNextElement(){
|
||||||
List<FocusableElement> focusables = getFocusableList(topLevel,new LinkedList<FocusableElement>());
|
List<FocusableElement> focusables = getFocusableList(elementList.get(elementList.size() - 1),new LinkedList<FocusableElement>());
|
||||||
if(focusables.contains(currentFocusedElement)){
|
if(focusables.contains(currentFocusedElement)){
|
||||||
int index = focusables.indexOf(currentFocusedElement);
|
int index = focusables.indexOf(currentFocusedElement);
|
||||||
if(index + 1 >= focusables.size()){
|
if(index + 1 >= focusables.size()){
|
||||||
@ -103,8 +108,8 @@ public class ElementManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void focusPreviousElement(Element topLevel){
|
public void focusPreviousElement(){
|
||||||
List<FocusableElement> focusables = getFocusableList(topLevel,new LinkedList<FocusableElement>());
|
List<FocusableElement> focusables = getFocusableList(elementList.get(elementList.size() - 1),new LinkedList<FocusableElement>());
|
||||||
if(focusables.contains(currentFocusedElement)){
|
if(focusables.contains(currentFocusedElement)){
|
||||||
int index = focusables.indexOf(currentFocusedElement);
|
int index = focusables.indexOf(currentFocusedElement);
|
||||||
if(index - 1 < 0){
|
if(index - 1 < 0){
|
||||||
@ -207,5 +212,10 @@ public class ElementManager {
|
|||||||
}
|
}
|
||||||
fireEvent(event,event.getCurrentX(),event.getCurrentY());
|
fireEvent(event,event.getCurrentX(),event.getCurrentY());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void navigateBackwards(){
|
||||||
|
NavigationEvent event = new NavigationEvent(NavigationEventType.BACKWARD);
|
||||||
|
fireEvent(event,currentFocusedElement.getPositionX(),currentFocusedElement.getPositionY());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,7 @@ public interface NavigableElement extends Element {
|
|||||||
|
|
||||||
public interface NavigationEventCallback {
|
public interface NavigationEventCallback {
|
||||||
|
|
||||||
public void execute(NavigationEvent event);
|
public boolean execute(NavigationEvent event);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import electrosphere.renderer.Model;
|
|||||||
import electrosphere.renderer.framebuffer.Framebuffer;
|
import electrosphere.renderer.framebuffer.Framebuffer;
|
||||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -17,7 +18,7 @@ import static org.lwjgl.opengl.GL30.*;
|
|||||||
*
|
*
|
||||||
* @author amaterasu
|
* @author amaterasu
|
||||||
*/
|
*/
|
||||||
public class Window implements DrawableElement, ContainerElement {
|
public class Window implements DrawableElement, ContainerElement, NavigableElement {
|
||||||
List<Element> childList = new LinkedList<Element>();
|
List<Element> childList = new LinkedList<Element>();
|
||||||
Framebuffer widgetBuffer;
|
Framebuffer widgetBuffer;
|
||||||
Material customMat = new Material();
|
Material customMat = new Material();
|
||||||
@ -26,6 +27,8 @@ public class Window implements DrawableElement, ContainerElement {
|
|||||||
Vector3f boxDimensions = new Vector3f();
|
Vector3f boxDimensions = new Vector3f();
|
||||||
Vector3f texPosition = new Vector3f(0,0,0);
|
Vector3f texPosition = new Vector3f(0,0,0);
|
||||||
Vector3f texScale = new Vector3f(1,1,0);
|
Vector3f texScale = new Vector3f(1,1,0);
|
||||||
|
|
||||||
|
NavigationEventCallback navCallback;
|
||||||
|
|
||||||
public Window(int positionX, int positionY, int width, int height){
|
public Window(int positionX, int positionY, int width, int height){
|
||||||
//TODO: figure out why this has to be 1920x1080
|
//TODO: figure out why this has to be 1920x1080
|
||||||
@ -197,7 +200,18 @@ public class Window implements DrawableElement, ContainerElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
public boolean handleEvent(Event event){
|
||||||
return true;
|
boolean propagate = true;
|
||||||
|
if(event instanceof NavigationEvent && navCallback != null){
|
||||||
|
if(!navCallback.execute((NavigationEvent)event)){
|
||||||
|
propagate = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return propagate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOnNavigationCallback(NavigationEventCallback callback) {
|
||||||
|
navCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,13 +9,15 @@ import electrosphere.renderer.ui.DraggableElement;
|
|||||||
import electrosphere.renderer.ui.DrawableElement;
|
import electrosphere.renderer.ui.DrawableElement;
|
||||||
import electrosphere.renderer.ui.Element;
|
import electrosphere.renderer.ui.Element;
|
||||||
import electrosphere.renderer.ui.FocusableElement;
|
import electrosphere.renderer.ui.FocusableElement;
|
||||||
|
import electrosphere.renderer.ui.NavigableElement;
|
||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.events.DragEvent;
|
import electrosphere.renderer.ui.events.DragEvent;
|
||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
import electrosphere.renderer.ui.events.FocusEvent;
|
import electrosphere.renderer.ui.events.FocusEvent;
|
||||||
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||||
|
|
||||||
public class Div implements ClickableElement,ContainerElement,DraggableElement,FocusableElement,DrawableElement {
|
public class Div implements ClickableElement,ContainerElement,DraggableElement,FocusableElement,DrawableElement,NavigableElement {
|
||||||
|
|
||||||
ClickEventCallback onClick;
|
ClickEventCallback onClick;
|
||||||
FocusEventCallback onFocus;
|
FocusEventCallback onFocus;
|
||||||
@ -23,6 +25,7 @@ public class Div implements ClickableElement,ContainerElement,DraggableElement,F
|
|||||||
DragEventCallback onDragStart;
|
DragEventCallback onDragStart;
|
||||||
DragEventCallback onDrag;
|
DragEventCallback onDrag;
|
||||||
DragEventCallback onDragRelease;
|
DragEventCallback onDragRelease;
|
||||||
|
NavigationEventCallback onNavigate;
|
||||||
boolean focused = false;
|
boolean focused = false;
|
||||||
List<Element> childList = new LinkedList<Element>();
|
List<Element> childList = new LinkedList<Element>();
|
||||||
|
|
||||||
@ -293,6 +296,13 @@ public class Div implements ClickableElement,ContainerElement,DraggableElement,F
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(event instanceof NavigationEvent){
|
||||||
|
if(onNavigate != null){
|
||||||
|
if(onNavigate.execute((NavigationEvent)event)){
|
||||||
|
propagate = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return propagate;
|
return propagate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,6 +329,12 @@ public class Div implements ClickableElement,ContainerElement,DraggableElement,F
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOnNavigationCallback(NavigationEventCallback callback) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
onNavigate = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,19 @@
|
|||||||
package electrosphere.renderer.ui.events;
|
package electrosphere.renderer.ui.events;
|
||||||
|
|
||||||
public class NavigationEvent implements Event {
|
public class NavigationEvent implements Event {
|
||||||
|
public static enum NavigationEventType {
|
||||||
|
FORWARD,
|
||||||
|
BACKWARD,
|
||||||
|
}
|
||||||
|
|
||||||
|
NavigationEventType type;
|
||||||
|
|
||||||
|
public NavigationEvent(NavigationEventType type){
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NavigationEventType getType(){
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user