362 lines
14 KiB
Java
362 lines
14 KiB
Java
package electrosphere.menu;
|
|
|
|
import java.util.List;
|
|
|
|
import org.joml.Vector3f;
|
|
|
|
import electrosphere.auth.AuthenticationManager;
|
|
import electrosphere.controls.ControlHandler.ControlsState;
|
|
import electrosphere.engine.Globals;
|
|
import electrosphere.engine.Main;
|
|
import electrosphere.engine.loadingthreads.LoadingThread;
|
|
import electrosphere.entity.Entity;
|
|
import electrosphere.entity.EntityDataStrings;
|
|
import electrosphere.entity.EntityUtils;
|
|
import electrosphere.entity.types.camera.CameraEntityUtils;
|
|
import electrosphere.entity.types.creature.CreatureUtils;
|
|
import electrosphere.game.data.creature.type.CreatureType;
|
|
import electrosphere.game.data.creature.type.visualattribute.VisualAttribute;
|
|
import electrosphere.menu.mainmenu.MenuGeneratorsTitleMenu;
|
|
import electrosphere.net.NetUtils;
|
|
import electrosphere.renderer.RenderingEngine;
|
|
import electrosphere.renderer.actor.Actor;
|
|
import electrosphere.renderer.actor.ActorStaticMorph;
|
|
import electrosphere.renderer.actor.ActorUtils;
|
|
import electrosphere.renderer.model.Model;
|
|
import electrosphere.renderer.ui.elements.ActorPanel;
|
|
import electrosphere.renderer.ui.elements.Button;
|
|
import electrosphere.renderer.ui.elements.Div;
|
|
import electrosphere.renderer.ui.elements.FormElement;
|
|
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.elements.Window;
|
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
|
import electrosphere.renderer.ui.elementtypes.Element;
|
|
import electrosphere.renderer.ui.elementtypes.NavigableElement.NavigationEventCallback;
|
|
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
|
import electrosphere.renderer.ui.events.ClickEvent;
|
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
|
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
|
import electrosphere.server.saves.SaveUtils;
|
|
import electrosphere.server.terrain.generation.OverworldChunkGenerator;
|
|
import electrosphere.server.terrain.manager.ServerTerrainManager;
|
|
|
|
/**
|
|
*
|
|
* @author amaterasu
|
|
*/
|
|
public class MenuGenerators {
|
|
|
|
//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(1.0f);
|
|
selectLabel.setText(saveName.toUpperCase());
|
|
selectButton.addChild(selectLabel);
|
|
rVal.addChild(selectButton);
|
|
selectButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
if(SaveUtils.saveHasWorldFile(saveName.toLowerCase())){
|
|
//need to log client in
|
|
Globals.clientUsername = "username";
|
|
Globals.clientPassword = AuthenticationManager.getHashedString("password");
|
|
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;
|
|
serverThread.start();
|
|
clientThread.start();
|
|
} else {
|
|
Globals.currentSaveName = saveName.toLowerCase();
|
|
SaveUtils.loadTerrainAndCreateWorldData(saveName.toLowerCase());
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createSaveCreationMenu());
|
|
}
|
|
return false;
|
|
}});
|
|
|
|
verticalPosition = verticalPosition + 75;
|
|
}
|
|
}
|
|
|
|
//button (create)
|
|
Button createButton = new Button();
|
|
Label createLabel = new Label(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
|
|
//text entry (address)
|
|
TextInput worldNameInput = new TextInput(100,screenTop + 125,1.0f);
|
|
worldNameInput.setText("World name");
|
|
rVal.addChild(worldNameInput);
|
|
|
|
//button (create)
|
|
Button createButton = new Button();
|
|
Label createLabel = new Label(1.0f);
|
|
createLabel.setText("Create");
|
|
createButton.addChild(createLabel);
|
|
rVal.addChild(createButton);
|
|
createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
String saveName = worldNameInput.getText();
|
|
//create save dir
|
|
SaveUtils.createOrOverwriteSave(saveName);
|
|
//create and save terrain
|
|
ServerTerrainManager terrainManager = new ServerTerrainManager(2000,50,0.0f,0,new OverworldChunkGenerator());
|
|
terrainManager.generate();
|
|
terrainManager.save(SaveUtils.deriveSaveDirectoryPath(saveName));
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu());
|
|
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(1.0f);
|
|
saveLabel.setText("Save");
|
|
saveButton.addChild(saveLabel);
|
|
rVal.addChild(saveButton);
|
|
saveButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
SaveUtils.saveWorldData(Globals.currentSaveName);
|
|
WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu());
|
|
return false;
|
|
}});
|
|
|
|
//button (cancel)
|
|
Button cancelButton = new Button();
|
|
Label cancelLabel = new Label(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(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(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(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(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(1.0f);
|
|
connectLabel.setText("Back");
|
|
connectButton.addChild(connectLabel);
|
|
rVal.addChild(connectButton);
|
|
connectButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Element createIPMenu(){
|
|
FormElement rVal = new FormElement();
|
|
int screenTop = 150;
|
|
|
|
//label (address)
|
|
Label addressLabel = new Label(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(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(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(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(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(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();
|
|
|
|
//label (options)
|
|
Label optionsLabel = new Label(1.0f);
|
|
optionsLabel.setText("Options");
|
|
rVal.addChild(optionsLabel);
|
|
|
|
//button (back)
|
|
Button backButton = new Button();
|
|
Label backLabel = new Label(1.0f);
|
|
backLabel.setText("Back");
|
|
backButton.addChild(backLabel);
|
|
rVal.addChild(backButton);
|
|
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu());
|
|
return false;
|
|
}});
|
|
|
|
return rVal;
|
|
}
|
|
|
|
|
|
|
|
}
|