1178 lines
53 KiB
Java
1178 lines
53 KiB
Java
package electrosphere.menu;
|
|
|
|
import electrosphere.auth.AuthenticationManager;
|
|
import electrosphere.controls.ControlHandler.ControlsState;
|
|
import electrosphere.engine.LoadingThread;
|
|
import electrosphere.entity.Entity;
|
|
import electrosphere.entity.EntityDataStrings;
|
|
import electrosphere.entity.EntityUtils;
|
|
import electrosphere.entity.state.equip.EquipState;
|
|
import electrosphere.entity.state.gravity.GravityUtils;
|
|
import electrosphere.entity.state.gravity.GravityTree.GravityTreeState;
|
|
import electrosphere.entity.state.inventory.InventoryUtils;
|
|
import electrosphere.entity.state.inventory.RelationalInventoryState;
|
|
import electrosphere.entity.state.inventory.UnrelationalInventoryState;
|
|
import electrosphere.entity.types.creature.CreatureUtils;
|
|
import electrosphere.entity.types.item.ItemUtils;
|
|
import electrosphere.game.data.creature.type.CreatureType;
|
|
import electrosphere.game.data.creature.type.visualattribute.VisualAttribute;
|
|
import electrosphere.game.server.saves.SaveUtils;
|
|
import electrosphere.main.Globals;
|
|
import electrosphere.main.Main;
|
|
import electrosphere.net.NetUtils;
|
|
import electrosphere.renderer.Model;
|
|
import electrosphere.renderer.RenderingEngine;
|
|
import electrosphere.renderer.actor.Actor;
|
|
import electrosphere.renderer.actor.ActorStaticMorph;
|
|
import electrosphere.renderer.ui.ClickableElement;
|
|
import electrosphere.renderer.ui.DrawableElement;
|
|
import electrosphere.renderer.ui.Element;
|
|
import electrosphere.renderer.ui.FocusableElement;
|
|
import electrosphere.renderer.ui.WidgetUtils;
|
|
import electrosphere.renderer.ui.Window;
|
|
import electrosphere.renderer.ui.ClickableElement.ClickEventCallback;
|
|
import electrosphere.renderer.ui.DraggableElement.DragEventCallback;
|
|
import electrosphere.renderer.ui.FocusableElement.FocusEventCallback;
|
|
import electrosphere.renderer.ui.NavigableElement.NavigationEventCallback;
|
|
import electrosphere.renderer.ui.ValueElement.ValueChangeEventCallback;
|
|
import electrosphere.renderer.ui.elements.Button;
|
|
import electrosphere.renderer.ui.elements.Div;
|
|
import electrosphere.renderer.ui.elements.ImagePanel;
|
|
import electrosphere.renderer.ui.elements.Label;
|
|
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
|
import electrosphere.renderer.ui.elements.Slider;
|
|
import electrosphere.renderer.ui.elements.TextInput;
|
|
import electrosphere.renderer.ui.events.ClickEvent;
|
|
import electrosphere.renderer.ui.events.DragEvent;
|
|
import electrosphere.renderer.ui.events.FocusEvent;
|
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
|
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
|
import electrosphere.renderer.ui.form.FormElement;
|
|
|
|
import java.util.List;
|
|
|
|
import javax.management.relation.Relation;
|
|
|
|
import org.joml.Vector3f;
|
|
|
|
/**
|
|
*
|
|
* @author amaterasu
|
|
*/
|
|
public class MenuGenerators {
|
|
|
|
|
|
public static Element createTitleMenu(){
|
|
FormElement rVal = new FormElement();
|
|
|
|
//label (title)
|
|
Label titleLabel = new Label(100,150,1.0f);
|
|
titleLabel.setText("ORPG");
|
|
rVal.addChild(titleLabel);
|
|
|
|
//button (multiplayer)
|
|
Button singleplayerButton = new Button();
|
|
Label singleplayerLabel = new Label(100,275,1.0f);
|
|
singleplayerLabel.setText("Singleplayer");
|
|
singleplayerButton.addChild(singleplayerLabel);
|
|
rVal.addChild(singleplayerButton);
|
|
singleplayerButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
LoadingThread clientThread = new LoadingThread(LoadingThread.LOAD_MAIN_GAME);
|
|
Globals.loadingThreadsList.add(clientThread);
|
|
Globals.RUN_CLIENT = true;
|
|
Globals.RUN_SERVER = true;
|
|
clientThread.start();
|
|
return false;
|
|
}});
|
|
|
|
//button (multiplayer)
|
|
Button multiplayerButton = new Button();
|
|
Label multiplayerLabel = new Label(100,350,1.0f);
|
|
multiplayerLabel.setText("Multiplayer");
|
|
multiplayerButton.addChild(multiplayerLabel);
|
|
rVal.addChild(multiplayerButton);
|
|
multiplayerButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createMultiplayerMenu());
|
|
return false;
|
|
}});
|
|
|
|
//button (arena)
|
|
Button arenaButton = new Button();
|
|
Label arenaLabel = new Label(100,425,1.0f);
|
|
arenaLabel.setText("Arena");
|
|
arenaButton.addChild(arenaLabel);
|
|
rVal.addChild(arenaButton);
|
|
arenaButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
LoadingThread serverThread = new LoadingThread(LoadingThread.LOAD_ARENA);
|
|
Globals.loadingThreadsList.add(serverThread);
|
|
Globals.RUN_CLIENT = true;
|
|
Globals.RUN_SERVER = true;
|
|
serverThread.start();
|
|
WindowUtils.replaceMainMenuContents(MenuGeneratorsArena.createArenaHostLoginMenu());
|
|
return false;
|
|
}});
|
|
|
|
//button (options)
|
|
Button optionsButton = new Button();
|
|
Label optionsLabel = new Label(100,500,1.0f);
|
|
optionsLabel.setText("Options");
|
|
optionsButton.addChild(optionsLabel);
|
|
rVal.addChild(optionsButton);
|
|
optionsButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createOptionsMainMenu());
|
|
return false;
|
|
}});
|
|
|
|
//button (ui testing)
|
|
Button uiTestingButton = new Button();
|
|
Label uiTestingLabel = new Label(100,575,1.0f);
|
|
uiTestingLabel.setText("UI Testing");
|
|
uiTestingButton.addChild(uiTestingLabel);
|
|
rVal.addChild(uiTestingButton);
|
|
uiTestingButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createUITestMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
//Used when we're displaying loading window to make main menu invisible
|
|
public static Element createEmptyMainMenu(){
|
|
Div rVal = new Div();
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createWorldSelectMenu(){
|
|
FormElement rVal = new FormElement();
|
|
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
List<String> saveNames = SaveUtils.getSaves();
|
|
int verticalPosition = 125;
|
|
for(String saveName : saveNames){
|
|
if(!saveName.startsWith(".")){
|
|
|
|
//button (select save)
|
|
Button selectButton = new Button();
|
|
Label selectLabel = new Label(100,125 + verticalPosition,1.0f);
|
|
selectLabel.setText(saveName.toUpperCase());
|
|
selectButton.addChild(selectLabel);
|
|
rVal.addChild(selectButton);
|
|
selectButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
if(SaveUtils.worldHasSave(saveName.toLowerCase())){
|
|
LoadingThread clientThread = new LoadingThread(LoadingThread.LOAD_CHARACTER_SERVER);
|
|
Globals.loadingThreadsList.add(clientThread);
|
|
LoadingThread serverThread = new LoadingThread(LoadingThread.LOAD_MAIN_GAME);
|
|
Globals.loadingThreadsList.add(serverThread);
|
|
Globals.RUN_CLIENT = true;
|
|
Globals.RUN_SERVER = true;
|
|
clientThread.start();
|
|
serverThread.start();
|
|
} else {
|
|
Globals.currentSaveName = saveName.toLowerCase();
|
|
SaveUtils.loadTerrainAndCreateWorldData();
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createSaveCreationMenu());
|
|
}
|
|
return false;
|
|
}});
|
|
|
|
verticalPosition = verticalPosition + 75;
|
|
}
|
|
}
|
|
|
|
//button (create)
|
|
Button createButton = new Button();
|
|
Label createLabel = new Label(100,125 + verticalPosition + 200,1.0f);
|
|
createLabel.setText("Create World");
|
|
createButton.addChild(createLabel);
|
|
rVal.addChild(createButton);
|
|
createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldCreationMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createWorldCreationMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
// List<String> saveNames = SaveUtils.getSaves();
|
|
int verticalPosition = 125;
|
|
|
|
//TODO: add text input to name world
|
|
|
|
//button (create)
|
|
Button createButton = new Button();
|
|
Label createLabel = new Label(100,screenTop + verticalPosition,1.0f);
|
|
createLabel.setText("Not implemented");
|
|
createButton.addChild(createLabel);
|
|
rVal.addChild(createButton);
|
|
createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldCreationMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createSaveCreationMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
|
|
//button (save)
|
|
Button saveButton = new Button();
|
|
Label saveLabel = new Label(100,screenTop + 125,1.0f);
|
|
saveLabel.setText("Save");
|
|
saveButton.addChild(saveLabel);
|
|
rVal.addChild(saveButton);
|
|
saveButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
SaveUtils.saveWorldDataToSave(Globals.currentSaveName);
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu());
|
|
return false;
|
|
}});
|
|
|
|
//button (cancel)
|
|
Button cancelButton = new Button();
|
|
Label cancelLabel = new Label(100,screenTop + 200,1.0f);
|
|
cancelLabel.setText("Cancel");
|
|
cancelButton.addChild(cancelLabel);
|
|
rVal.addChild(cancelButton);
|
|
saveButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createCharacterCreationMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
// List<String> saveNames = SaveUtils.getSaves();
|
|
int verticalPosition = 125;
|
|
|
|
//TODO: add text input to name world
|
|
|
|
//button (create)
|
|
Button createButton = new Button();
|
|
Label createLabel = new Label(100,screenTop + verticalPosition,1.0f);
|
|
createLabel.setText("Create World");
|
|
createButton.addChild(createLabel);
|
|
rVal.addChild(createButton);
|
|
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createFinalizeSaveCreationMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
// List<String> saveNames = SaveUtils.getSaves();
|
|
int verticalPosition = 125;
|
|
|
|
//TODO: add text input to name world
|
|
|
|
//button (create)
|
|
Button createButton = new Button();
|
|
Label createLabel = new Label(100,screenTop + verticalPosition,1.0f);
|
|
createLabel.setText("Create World");
|
|
createButton.addChild(createLabel);
|
|
rVal.addChild(createButton);
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createMultiplayerMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
|
|
//button (host)
|
|
Button hostButton = new Button();
|
|
Label hostLabel = new Label(100,screenTop + 125,1.0f);
|
|
hostLabel.setText("Host");
|
|
hostButton.addChild(hostLabel);
|
|
rVal.addChild(hostButton);
|
|
hostButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
LoadingThread clientThread = new LoadingThread(LoadingThread.LOAD_CHARACTER_SERVER);
|
|
Globals.loadingThreadsList.add(clientThread);
|
|
LoadingThread serverThread = new LoadingThread(LoadingThread.LOAD_MAIN_GAME);
|
|
Globals.loadingThreadsList.add(serverThread);
|
|
Globals.RUN_CLIENT = true;
|
|
Globals.RUN_SERVER = true;
|
|
clientThread.start();
|
|
serverThread.start();
|
|
return false;
|
|
}});
|
|
|
|
//button (join)
|
|
Button joinButton = new Button();
|
|
Label joinLabel = new Label(100,screenTop + 200,1.0f);
|
|
joinLabel.setText("Join");
|
|
joinButton.addChild(joinLabel);
|
|
rVal.addChild(joinButton);
|
|
joinButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createIPMenu());
|
|
return false;
|
|
}});
|
|
|
|
|
|
//button (back)
|
|
Button connectButton = new Button();
|
|
Label connectLabel = new Label(100,screenTop + 275,1.0f);
|
|
connectLabel.setText("Back");
|
|
connectButton.addChild(connectLabel);
|
|
rVal.addChild(connectButton);
|
|
connectButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createTitleMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createIPMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
|
|
//label (address)
|
|
Label addressLabel = new Label(100,screenTop + 50,1.0f);
|
|
addressLabel.setText("IP Address");
|
|
rVal.addChild(addressLabel);
|
|
|
|
//text entry (address)
|
|
TextInput addressInput = new TextInput(100,screenTop + 125,1.0f);
|
|
addressInput.setText(NetUtils.getAddress());
|
|
rVal.addChild(addressInput);
|
|
|
|
//label (port)
|
|
Label portLabel = new Label(100,screenTop + 200,1.0f);
|
|
portLabel.setText("Port");
|
|
rVal.addChild(portLabel);
|
|
|
|
//text entry (port)
|
|
TextInput portInput = new TextInput(100,screenTop + 275,1.0f);
|
|
portInput.setText(NetUtils.getPort() + "");
|
|
rVal.addChild(portInput);
|
|
|
|
//label (address)
|
|
Label usernameLabel = new Label(100,screenTop + 350,1.0f);
|
|
usernameLabel.setText("Username");
|
|
rVal.addChild(usernameLabel);
|
|
|
|
//text entry (address)
|
|
TextInput usernameInput = new TextInput(100,screenTop + 425,1.0f);
|
|
usernameInput.setText("");
|
|
rVal.addChild(usernameInput);
|
|
|
|
//label (port)
|
|
Label passwordLabel = new Label(100,screenTop + 500,1.0f);
|
|
passwordLabel.setText("Password");
|
|
rVal.addChild(passwordLabel);
|
|
|
|
//text entry (port)
|
|
TextInput passwordInput = new TextInput(100,screenTop + 575,1.0f);
|
|
passwordInput.setText("");
|
|
rVal.addChild(passwordInput);
|
|
|
|
//button (connect)
|
|
Button connectButton = new Button();
|
|
Label connectLabel = new Label(100,screenTop + 650,1.0f);
|
|
connectLabel.setText("Connect");
|
|
connectButton.addChild(connectLabel);
|
|
rVal.addChild(connectButton);
|
|
connectButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
NetUtils.setAddress(addressInput.getText());
|
|
NetUtils.setPort(Integer.parseInt(portInput.getText()));
|
|
Globals.clientUsername = usernameInput.getText();
|
|
Globals.clientPassword = AuthenticationManager.getHashedString(passwordInput.getText());
|
|
LoadingThread clientThread = new LoadingThread(LoadingThread.LOAD_CHARACTER_SERVER);
|
|
Globals.loadingThreadsList.add(clientThread);
|
|
Globals.RUN_CLIENT = true;
|
|
Globals.RUN_SERVER = false;
|
|
clientThread.start();
|
|
return false;
|
|
}});
|
|
|
|
//button (back)
|
|
Button backButton = new Button();
|
|
Label backLabel = new Label(100,screenTop + 725,1.0f);
|
|
backLabel.setText("Back");
|
|
backButton.addChild(backLabel);
|
|
rVal.addChild(backButton);
|
|
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createMultiplayerMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createOptionsMainMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
|
|
//label (options)
|
|
Label optionsLabel = new Label(100,screenTop + 50,1.0f);
|
|
optionsLabel.setText("Options");
|
|
rVal.addChild(optionsLabel);
|
|
|
|
//button (back)
|
|
Button backButton = new Button();
|
|
Label backLabel = new Label(100,screenTop + 275,1.0f);
|
|
backLabel.setText("Back");
|
|
backButton.addChild(backLabel);
|
|
rVal.addChild(backButton);
|
|
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createTitleMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createUITestMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
|
|
//button (back)
|
|
Button backButton = new Button();
|
|
Label backLabel = new Label(100,screenTop + 275,1.0f);
|
|
backLabel.setText("Back");
|
|
backButton.addChild(backLabel);
|
|
rVal.addChild(backButton);
|
|
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createTitleMenu());
|
|
return false;
|
|
}});
|
|
|
|
//slider test
|
|
Slider slider = new Slider(0, 0, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 100, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 200, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 300, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 400, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 500, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 600, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 700, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 800, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
// slider = new Slider(0, 900, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
// rVal.addChild(slider);
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element worldItemDropCaptureWindow(){
|
|
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
|
Div div = new Div();
|
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
|
if(Globals.draggedItem != null){
|
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
|
UnrelationalInventoryState inventory = (UnrelationalInventoryState) Globals.dragSourceInventory;
|
|
//drop item
|
|
InventoryUtils.attemptEjectItem(Globals.playerEntity,Globals.draggedItem);
|
|
//clear ui
|
|
WindowUtils.cleanItemDraggingWindow();
|
|
String sourceWindowId = WindowUtils.getInventoryWindowID(inventory.getId());
|
|
WindowUtils.replaceWindow(sourceWindowId,MenuGenerators.createNaturalInventoryMenu(inventory));
|
|
//null globals
|
|
Globals.dragSourceInventory = null;
|
|
Globals.draggedItem = null;
|
|
return false;
|
|
} else if(Globals.dragSourceInventory instanceof RelationalInventoryState){
|
|
RelationalInventoryState inventory = (RelationalInventoryState) Globals.dragSourceInventory;
|
|
//drop item
|
|
InventoryUtils.attemptEjectItem(Globals.playerEntity,Globals.draggedItem);
|
|
//clear ui
|
|
WindowUtils.cleanItemDraggingWindow();
|
|
String sourceWindowId = WindowStrings.WINDOW_CHARACTER;
|
|
WindowUtils.replaceWindow(sourceWindowId,MenuGenerators.createCharacterInventoryMenu(inventory));
|
|
//null globals
|
|
Globals.dragSourceInventory = null;
|
|
Globals.draggedItem = null;
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}});
|
|
div.setPositionX(0);
|
|
div.setPositionY(0);
|
|
div.setWidth(Globals.WINDOW_WIDTH);
|
|
div.setHeight(Globals.WINDOW_HEIGHT);
|
|
rVal.addChild(div);
|
|
return rVal;
|
|
}
|
|
|
|
public static Window createInGameMainMenu(){
|
|
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
int width = 500;
|
|
int height = 500;
|
|
Window rVal = new Window(0,0,width,height);
|
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
|
Div div = new Div();
|
|
rVal.addChild(div);
|
|
div.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
|
|
ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture);
|
|
// imagePanel.setWidth(width);
|
|
// imagePanel.setHeight(height);
|
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
|
div.addChild(imagePanel);
|
|
|
|
//label 1 (back)
|
|
Button backButton = new Button();
|
|
Label backLabel = new Label(100,50,1.0f);
|
|
backLabel.setText("Back");
|
|
backButton.addChild(backLabel);
|
|
div.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)
|
|
Button quitButton = new Button();
|
|
Label quitLabel = new Label(100,150,1.0f);
|
|
quitLabel.setText("Quit");
|
|
quitButton.addChild(quitLabel);
|
|
div.addChild(quitButton);
|
|
quitButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
Main.running = false;
|
|
return false;
|
|
}});
|
|
|
|
//checking macro data is a poor man's check for whether we're arena or full gamemode
|
|
if(Globals.server != null && Globals.macroData == null){
|
|
//label 3 (debug)
|
|
Button debugButton = new Button();
|
|
Label debugLabel = new Label(100,250,1.0f);
|
|
debugLabel.setText("Debug");
|
|
debugButton.addChild(debugLabel);
|
|
div.addChild(debugButton);
|
|
debugButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, createInGameDebugMainMenu());
|
|
return false;
|
|
}});
|
|
}
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Window createInGameDebugMainMenu(){
|
|
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
int width = 500;
|
|
int height = 500;
|
|
float fontSize = 0.4f;
|
|
Window rVal = new Window(0,0,width,height);
|
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
|
// Div div = new Div();
|
|
// div.setPositionX(0);
|
|
// div.setPositionY(0);
|
|
// div.setWidth(500);
|
|
// div.setHeight(500);
|
|
ScrollableContainer scrollable = new ScrollableContainer(0, 0, width, height);
|
|
rVal.addChild(scrollable);
|
|
// scrollable.addChild(div);
|
|
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, createInGameMainMenu());
|
|
return false;
|
|
}});
|
|
|
|
//black texture background
|
|
ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture);
|
|
// imagePanel.setWidth(width);
|
|
// imagePanel.setHeight(height);
|
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
|
scrollable.addChild(imagePanel);
|
|
|
|
//label 1 (back)
|
|
Button backButton = new Button();
|
|
Label backLabel = new Label(100,50,fontSize);
|
|
backLabel.setText("Back");
|
|
backButton.addChild(backLabel);
|
|
scrollable.addChild(backButton);
|
|
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, createInGameMainMenu());
|
|
return false;
|
|
}});
|
|
|
|
|
|
//text entry (port)
|
|
TextInput modelDebugInput = new TextInput(100,150,fontSize);
|
|
scrollable.addChild(modelDebugInput);
|
|
modelDebugInput.setText("Model path goes here");
|
|
|
|
//label 3 (load model and debug)
|
|
Button debugModelButton = new Button();
|
|
Label debugModelLabel = new Label(100,250,fontSize);
|
|
debugModelLabel.setText("Print Model Debug Info");
|
|
debugModelButton.addChild(debugModelLabel);
|
|
scrollable.addChild(debugModelButton);
|
|
debugModelButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Model targetModel = null;
|
|
if((targetModel = Globals.assetManager.fetchModel(modelDebugInput.getText())) != null){
|
|
targetModel.describeHighLevel();
|
|
} else {
|
|
Globals.assetManager.addModelPathToQueue(modelDebugInput.getText());
|
|
Globals.assetManager.loadAssetsInQueue();
|
|
if((targetModel = Globals.assetManager.fetchModel(modelDebugInput.getText())) != null){
|
|
targetModel.describeHighLevel();
|
|
}
|
|
}
|
|
return false;
|
|
}});
|
|
|
|
//label 4 (reload all shaders)
|
|
Button reloadShaderButton = new Button();
|
|
Label reloadShaderLabel = new Label(100,350,fontSize);
|
|
reloadShaderLabel.setText("Reload all shaders");
|
|
reloadShaderButton.addChild(reloadShaderLabel);
|
|
scrollable.addChild(reloadShaderButton);
|
|
reloadShaderButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Globals.assetManager.forceReloadAllShaders();
|
|
return false;
|
|
}});
|
|
|
|
//reload all models
|
|
Button reloadModelButton = new Button();
|
|
Label reloadModelLabel = new Label(100,450,fontSize);
|
|
reloadModelLabel.setText("Reload all models");
|
|
reloadModelButton.addChild(reloadModelLabel);
|
|
scrollable.addChild(reloadModelButton);
|
|
reloadModelButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Globals.assetManager.forceReloadAllModels();
|
|
return false;
|
|
}});
|
|
|
|
//disable drawing player character
|
|
Button toggleDrawPlayerButton = new Button();
|
|
Label toggleDrawPlayerLabel = new Label(100,550,fontSize);
|
|
toggleDrawPlayerLabel.setText("Toggle draw character");
|
|
toggleDrawPlayerButton.addChild(toggleDrawPlayerLabel);
|
|
scrollable.addChild(toggleDrawPlayerButton);
|
|
toggleDrawPlayerButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
if(Globals.playerEntity != null){
|
|
if(Globals.playerEntity.containsKey(EntityDataStrings.DATA_STRING_DRAW)){
|
|
boolean draw = (boolean)Globals.playerEntity.getData(EntityDataStrings.DATA_STRING_DRAW);
|
|
Globals.playerEntity.putData(EntityDataStrings.DATA_STRING_DRAW, !draw);
|
|
}
|
|
if(Globals.playerEntity.containsKey(EntityDataStrings.DRAW_CAST_SHADOW)){
|
|
boolean drawShadow = (boolean)Globals.playerEntity.getData(EntityDataStrings.DRAW_CAST_SHADOW);
|
|
Globals.playerEntity.putData(EntityDataStrings.DRAW_CAST_SHADOW, !drawShadow);
|
|
}
|
|
}
|
|
return false;
|
|
}});
|
|
|
|
//pull up character editor
|
|
Button characterSliderMenuButton = new Button();
|
|
Label characterSliderMenuLabel = new Label(100,650,fontSize);
|
|
characterSliderMenuLabel.setText("Character slider menu");
|
|
characterSliderMenuButton.addChild(characterSliderMenuLabel);
|
|
scrollable.addChild(characterSliderMenuButton);
|
|
characterSliderMenuButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, createInGameCharacterSliderMenu());
|
|
return false;
|
|
}});
|
|
|
|
for(int i = 0; i < 5; i++){
|
|
Button someButton = new Button();
|
|
Label someLabel = new Label(100,750 + i * 100,fontSize);
|
|
someLabel.setText("aaaaaa" + i);
|
|
someButton.addChild(someLabel);
|
|
scrollable.addChild(someButton);
|
|
someButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
return false;
|
|
}});
|
|
}
|
|
|
|
//label (switch framebuffer)
|
|
Button switchFramebufferButton = new Button();
|
|
Label switchFramebufferLabel = new Label(100,1250,fontSize);
|
|
switchFramebufferLabel.setText("Switch Active Framebuffer");
|
|
switchFramebufferButton.addChild(switchFramebufferLabel);
|
|
scrollable.addChild(switchFramebufferButton);
|
|
switchFramebufferButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
RenderingEngine.incrementOutputFramebuffer();
|
|
return false;
|
|
}});
|
|
|
|
//label (toggle draw collision spheres)
|
|
Button toggleCollisionSpheresButton = new Button();
|
|
Label toggleCollisionSpheresLabel = new Label(100,1350,fontSize);
|
|
toggleCollisionSpheresLabel.setText("Toggle draw collision spheres");
|
|
toggleCollisionSpheresButton.addChild(toggleCollisionSpheresLabel);
|
|
scrollable.addChild(toggleCollisionSpheresButton);
|
|
toggleCollisionSpheresButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Globals.userSettings.setGraphicsDebugDrawCollisionSpheres(!Globals.userSettings.graphicsDebugDrawCollisionSpheres());
|
|
return false;
|
|
}});
|
|
|
|
//label (toggle draw physics objects)
|
|
Button togglePhysicsObjectsButton = new Button();
|
|
Label togglePhysicsObjectsLabel = new Label(100,1450,fontSize);
|
|
togglePhysicsObjectsLabel.setText("Toggle draw physics objects");
|
|
togglePhysicsObjectsButton.addChild(togglePhysicsObjectsLabel);
|
|
scrollable.addChild(togglePhysicsObjectsButton);
|
|
togglePhysicsObjectsButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Globals.userSettings.setGraphicsDebugDrawPhysicsObjects(!Globals.userSettings.graphicsDebugDrawPhysicsObjects());
|
|
return false;
|
|
}});
|
|
|
|
//label (toggle draw movement vectors)
|
|
Button toggleMovementVectorsButton = new Button();
|
|
Label toggleMovementVectorsLabel = new Label(100,1550,fontSize);
|
|
toggleMovementVectorsLabel.setText("Toggle draw movement vectors");
|
|
toggleMovementVectorsButton.addChild(toggleMovementVectorsLabel);
|
|
scrollable.addChild(toggleMovementVectorsButton);
|
|
toggleMovementVectorsButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Globals.userSettings.setGraphicsDebugDrawMovementVectors(!Globals.userSettings.graphicsDebugDrawMovementVectors());
|
|
return false;
|
|
}});
|
|
|
|
//label (toggle draw navmesh)
|
|
Button toggleNavmeshButton = new Button();
|
|
Label toggleNavmeshLabel = new Label(100,1650,fontSize);
|
|
toggleNavmeshLabel.setText("Toggle draw navmesh");
|
|
toggleNavmeshButton.addChild(toggleNavmeshLabel);
|
|
scrollable.addChild(toggleNavmeshButton);
|
|
toggleNavmeshButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Globals.userSettings.setGraphicsDebugDrawNavmesh(!Globals.userSettings.graphicsDebugDrawNavmesh());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Window createInGameCharacterSliderMenu(){
|
|
int width = 500;
|
|
int height = 500;
|
|
float fontSize = 0.4f;
|
|
Window rVal = new Window(0,0,width,height);
|
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
|
// Div div = new Div();
|
|
// div.setPositionX(0);
|
|
// div.setPositionY(0);
|
|
// div.setWidth(500);
|
|
// div.setHeight(500);
|
|
ScrollableContainer scrollable = new ScrollableContainer(0, 0, width, height);
|
|
rVal.addChild(scrollable);
|
|
// scrollable.addChild(div);
|
|
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, createInGameDebugMainMenu());
|
|
return false;
|
|
}});
|
|
|
|
//black texture background
|
|
ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture);
|
|
// imagePanel.setWidth(width);
|
|
// imagePanel.setHeight(height);
|
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
|
scrollable.addChild(imagePanel);
|
|
|
|
//label 1 (back)
|
|
Button backButton = new Button();
|
|
Label backLabel = new Label(200,50,fontSize);
|
|
backLabel.setText("Back");
|
|
backButton.addChild(backLabel);
|
|
scrollable.addChild(backButton);
|
|
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, createInGameDebugMainMenu());
|
|
return false;
|
|
}});
|
|
|
|
Entity playerEntity = Globals.playerEntity;
|
|
Actor playerActor = EntityUtils.getActor(playerEntity);
|
|
ActorStaticMorph staticMorph = playerActor.getStaticMorph();
|
|
CreatureType playeCreatureType = Globals.gameConfigCurrent.getCreatureTypeLoader().getCreature(CreatureUtils.getType(playerEntity));
|
|
int offset = 0;
|
|
for(VisualAttribute attribute : playeCreatureType.getVisualAttributes()){
|
|
int posY = offset * 350 + 100;
|
|
if(attribute.getType().equals("bone")){
|
|
Slider attributeSlider = new Slider(50,posY,400,100,new Vector3f(0.1f,0.1f,0.1f),new Vector3f(1.0f,0,0));
|
|
attributeSlider.setOnValueChangeCallback(new ValueChangeEventCallback() {public void execute(ValueChangeEvent event) {
|
|
float value = event.getAsFloat();
|
|
float minVal = attribute.getMinValue();
|
|
float range = attribute.getMaxValue() - minVal;
|
|
float actualValue = minVal + range * value;
|
|
staticMorph.updateValue(attribute.getSubtype(), attribute.getPrimaryBone(), event.getAsFloat());
|
|
if(attribute.getMirrorBone() != null){
|
|
staticMorph.updateValue(attribute.getSubtype(), attribute.getMirrorBone(), event.getAsFloat());
|
|
}
|
|
}});
|
|
scrollable.addChild(attributeSlider);
|
|
}
|
|
}
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Window createNaturalInventoryMenu(UnrelationalInventoryState inventory){
|
|
int width = 500;
|
|
int height = 500;
|
|
|
|
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
|
|
|
Div div = new Div();
|
|
rVal.addChild(div);
|
|
|
|
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
|
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(inventory.getId())), false);
|
|
Globals.elementManager.unregisterWindow(WindowUtils.getInventoryWindowID(inventory.getId()));
|
|
//
|
|
Globals.openInventoriesCount--;
|
|
if(Globals.openInventoriesCount == 0){
|
|
Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME);
|
|
Globals.controlHandler.hideMouse();
|
|
}
|
|
return false;
|
|
}});
|
|
|
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
|
if(Globals.draggedItem != null){
|
|
if(Globals.dragSourceInventory != inventory){
|
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
|
UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory;
|
|
//transfer item
|
|
sourceInventory.removeItem(Globals.draggedItem);
|
|
inventory.addItem(Globals.draggedItem);
|
|
//null out global state
|
|
Globals.dragSourceInventory = null;
|
|
Globals.draggedItem = null;
|
|
//clear item container ui
|
|
WindowUtils.cleanItemDraggingWindow();
|
|
//rerender both inventories
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory));
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGenerators.createNaturalInventoryMenu(sourceInventory));
|
|
}
|
|
} else {
|
|
//clear ui
|
|
WindowUtils.cleanItemDraggingWindow();
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory));
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}});
|
|
|
|
div.setOnClick(new ClickEventCallback() {public boolean execute(ClickEvent event){
|
|
WindowUtils.focusWindow(WindowStrings.WINDOW_MENU_INVENTORY);
|
|
return false;
|
|
}});
|
|
|
|
//black texture background
|
|
ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture);
|
|
// imagePanel.setWidth(width);
|
|
// imagePanel.setHeight(height);
|
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
|
div.addChild(imagePanel);
|
|
|
|
//label 1 (inventory)
|
|
Label inventoryLabel = new Label(10,10,1.0f);
|
|
inventoryLabel.setText("INVENTORY");
|
|
div.addChild(inventoryLabel);
|
|
|
|
int columns = 8;
|
|
int columnWidth = 60;
|
|
int rowHeight = 60;
|
|
for(int i = 0; i < inventory.getCapacity(); i++){
|
|
String texturePath = "Textures/icons/itemIconEmpty.png";
|
|
boolean hasItem = false;
|
|
if(i < inventory.getItems().size()){
|
|
Entity currentItem = inventory.getItems().get(i);
|
|
//get texture path from item
|
|
texturePath = ItemUtils.getItemIcon(currentItem);
|
|
//flag that this isn't an empty slot
|
|
hasItem = true;
|
|
}
|
|
if(!Globals.assetManager.hasLoadedTexture(texturePath)){
|
|
Globals.assetManager.addTexturePathtoQueue(texturePath);
|
|
}
|
|
int posX = (10 + i % columns * columnWidth);
|
|
int posY = 60 + (i / columns * rowHeight);
|
|
int panelWidth = 50;
|
|
int panelHeight = 50;
|
|
ImagePanel panel = new ImagePanel(posX,posY,panelWidth,panelHeight,texturePath);
|
|
if(hasItem == true){
|
|
int itemId = i;
|
|
panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){
|
|
// System.out.println("Drag start");
|
|
Globals.dragSourceInventory = inventory;
|
|
Globals.draggedItem = inventory.getItems().get(itemId);
|
|
div.removeChild(panel);
|
|
WindowUtils.pushItemIconToItemWindow(panel);
|
|
return false;
|
|
}});
|
|
panel.setOnDrag(new DragEventCallback() {public boolean execute(DragEvent event){
|
|
// System.out.println("Drag");
|
|
panel.setPositionX(event.getCurrentX() - panelWidth / 2);
|
|
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
|
return false;
|
|
}});
|
|
} else {
|
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
|
if(Globals.dragSourceInventory instanceof RelationalInventoryState){
|
|
RelationalInventoryState sourceInventory = (RelationalInventoryState) Globals.dragSourceInventory;
|
|
Entity item = Globals.draggedItem;
|
|
//destroy real world item
|
|
if(ItemUtils.getRealWorldEntity(item) != null){
|
|
System.out.println("Destroy real world item");
|
|
ItemUtils.destroyInWorldItem(ItemUtils.getRealWorldEntity(item));
|
|
}
|
|
//eject from equip state
|
|
InventoryUtils.attemptDestroyItem(Globals.playerEntity,item);
|
|
//add to unrelational
|
|
sourceInventory.tryRemoveItem(item);
|
|
inventory.addItem(item);
|
|
//update ui
|
|
Globals.dragSourceInventory = null;
|
|
Globals.draggedItem = null;
|
|
//clear item container ui
|
|
WindowUtils.cleanItemDraggingWindow();
|
|
//rerender both inventories
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGenerators.createCharacterInventoryMenu(sourceInventory));
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(inventory.getId()), MenuGenerators.createNaturalInventoryMenu(inventory));
|
|
}
|
|
//now the fun begins :)
|
|
//if transfer item
|
|
// remove item from current inventory
|
|
// place item in new inventory
|
|
// trigger recreation of the menu
|
|
//if drop item
|
|
// remove item from current inventory
|
|
// create item in world in front of character
|
|
// trigger recreation of the menu
|
|
//if neither of above
|
|
// replace item icon position to origin
|
|
// System.out.println("Release drag");
|
|
return false;
|
|
}});
|
|
}
|
|
// imagePanel.setWidth(width);
|
|
// imagePanel.setHeight(height);
|
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
|
div.addChild(panel);
|
|
}
|
|
|
|
return rVal;
|
|
}
|
|
|
|
|
|
public static Window createCharacterInventoryMenu(RelationalInventoryState inventory){
|
|
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
int width = 500;
|
|
int height = 500;
|
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
|
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
|
|
|
Div div = new Div();
|
|
div.setPositionX(1000);
|
|
rVal.addChild(div);
|
|
|
|
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
|
WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_CHARACTER), false);
|
|
Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_CHARACTER);
|
|
//
|
|
Globals.openInventoriesCount--;
|
|
if(Globals.openInventoriesCount == 0){
|
|
Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME);
|
|
Globals.controlHandler.hideMouse();
|
|
}
|
|
return false;
|
|
}});
|
|
|
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
|
if(Globals.draggedItem != null){
|
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
|
UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState)Globals.dragSourceInventory;
|
|
//null out global state
|
|
Globals.dragSourceInventory = null;
|
|
Globals.draggedItem = null;
|
|
//clear item container ui
|
|
WindowUtils.cleanItemDraggingWindow();
|
|
//rerender both inventories
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGenerators.createCharacterInventoryMenu(inventory));
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGenerators.createNaturalInventoryMenu(sourceInventory));
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}});
|
|
|
|
div.setOnClick(new ClickEventCallback() {public boolean execute(ClickEvent event){
|
|
WindowUtils.focusWindow(WindowStrings.WINDOW_CHARACTER);
|
|
return false;
|
|
}});
|
|
|
|
//black texture background
|
|
ImagePanel imagePanel = new ImagePanel(1000,0,width,height,Globals.blackTexture);
|
|
// imagePanel.setWidth(width);
|
|
// imagePanel.setHeight(height);
|
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
|
div.addChild(imagePanel);
|
|
|
|
//label 1 (inventory)
|
|
Label inventoryLabel = new Label(1010,10,1.0f);
|
|
inventoryLabel.setText("CHARACTER");
|
|
div.addChild(inventoryLabel);
|
|
|
|
// int columns = 8;
|
|
// int columnWidth = 60;
|
|
// int rowHeight = 60;
|
|
int slotSpacing = 30;
|
|
|
|
List<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.playerEntity.getData(EntityDataStrings.EQUIP_STATE);
|
|
equipState.attemptEquip(inWorldItem,inventory.getEquipPointFromSlot(slots.get(itemId)));
|
|
GravityUtils.attemptDeactivateGravity(inWorldItem);
|
|
}
|
|
//update ui
|
|
Globals.dragSourceInventory = null;
|
|
Globals.draggedItem = null;
|
|
//clear item container ui
|
|
WindowUtils.cleanItemDraggingWindow();
|
|
//rerender both inventories
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGenerators.createCharacterInventoryMenu(inventory));
|
|
//re-render inventory
|
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGenerators.createNaturalInventoryMenu(sourceInventory));
|
|
}
|
|
//now the fun begins :)
|
|
//if transfer item
|
|
// remove item from current inventory
|
|
// place item in new inventory
|
|
// trigger recreation of the menu
|
|
//if drop item
|
|
// remove item from current inventory
|
|
// create item in world in front of character
|
|
// trigger recreation of the menu
|
|
//if neither of above
|
|
// replace item icon position to origin
|
|
// System.out.println("Release drag");
|
|
//rebuild inventory windows
|
|
return false;
|
|
}});
|
|
}
|
|
div.addChild(panel);
|
|
|
|
//create the slot text
|
|
posX = 1000 + 80;
|
|
if((incrementer % 2) == 1){
|
|
posX = posX + 190;
|
|
}
|
|
posY = posY + 15;
|
|
Label slotText = new Label(posX, posY, 0.4f);
|
|
slotText.setText(slots.get(i));
|
|
div.addChild(slotText);
|
|
|
|
incrementer++;
|
|
}
|
|
|
|
return rVal;
|
|
}
|
|
|
|
}
|