Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
417 lines
20 KiB
Java
417 lines
20 KiB
Java
package electrosphere.menu.ingame;
|
|
|
|
import org.joml.Vector3f;
|
|
|
|
import electrosphere.controls.ControlHandler.ControlsState;
|
|
import electrosphere.engine.Globals;
|
|
import electrosphere.engine.Main;
|
|
import electrosphere.engine.loadingthreads.LoadingThread;
|
|
import electrosphere.engine.loadingthreads.LoadingThread.LoadingThreadType;
|
|
import electrosphere.entity.Entity;
|
|
import electrosphere.entity.EntityDataStrings;
|
|
import electrosphere.entity.EntityUtils;
|
|
import electrosphere.entity.types.creature.CreatureUtils;
|
|
import electrosphere.game.data.creature.type.CreatureData;
|
|
import electrosphere.game.data.creature.type.visualattribute.VisualAttribute;
|
|
import electrosphere.menu.WindowStrings;
|
|
import electrosphere.menu.WindowUtils;
|
|
import electrosphere.renderer.RenderingEngine;
|
|
import electrosphere.renderer.actor.Actor;
|
|
import electrosphere.renderer.actor.ActorStaticMorph;
|
|
import electrosphere.renderer.model.Model;
|
|
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.elements.VirtualScrollable;
|
|
import electrosphere.renderer.ui.elements.Window;
|
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
|
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;
|
|
|
|
public class MenuGeneratorsInGame {
|
|
|
|
/**
|
|
* Creates the main in game menu that shows up when you (typically) hit the escape key
|
|
* @return The window for the menu
|
|
*/
|
|
public static Window createInGameMainMenu(){
|
|
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
int width = 500;
|
|
int height = 500;
|
|
Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,width,height,true);
|
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
|
Div div = Div.createDiv();
|
|
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);
|
|
if(Globals.cameraHandler.getTrackPlayerEntity()){
|
|
Globals.controlHandler.hintUpdateControlState(ControlsState.MAIN_GAME);
|
|
} else {
|
|
Globals.controlHandler.hintUpdateControlState(ControlsState.IN_GAME_FREE_CAMERA);
|
|
}
|
|
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(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);
|
|
if(Globals.cameraHandler.getTrackPlayerEntity()){
|
|
Globals.controlHandler.hintUpdateControlState(ControlsState.MAIN_GAME);
|
|
} else {
|
|
Globals.controlHandler.hintUpdateControlState(ControlsState.IN_GAME_FREE_CAMERA);
|
|
}
|
|
return false;
|
|
}});
|
|
|
|
|
|
//label 2 (quit)
|
|
Button saveButton = new Button();
|
|
Label saveLabel = new Label(1.0f);
|
|
saveLabel.setText("Save");
|
|
saveButton.addChild(saveLabel);
|
|
div.addChild(saveButton);
|
|
saveButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
Main.running = false;
|
|
//save terrain
|
|
saveWorld();
|
|
return false;
|
|
}});
|
|
|
|
//label 3 (quit)
|
|
Button quitButton = new Button();
|
|
Label quitLabel = new Label(1.0f);
|
|
quitLabel.setText("Quit");
|
|
quitButton.addChild(quitLabel);
|
|
div.addChild(quitButton);
|
|
quitButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
Globals.threadManager.start(new LoadingThread(LoadingThreadType.RETURN_TITLE_MENU));
|
|
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 4 (debug)
|
|
Button debugButton = new Button();
|
|
Label debugLabel = new Label(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;
|
|
}});
|
|
// }
|
|
|
|
if(MenuGeneratorsInGame.shouldShowLevelEditor()){
|
|
div.addChild(Button.createButton("Open Level Editor Tools", () -> {
|
|
WindowUtils.replaceWindow(WindowStrings.LEVEL_EDTIOR_SIDE_PANEL,MenuGeneratorsLevelEditor.createLevelEditorSidePanel());
|
|
}));
|
|
}
|
|
|
|
rVal.applyYoga(0,0);
|
|
|
|
return rVal;
|
|
}
|
|
|
|
/**
|
|
* Saves the world
|
|
*/
|
|
static void saveWorld(){
|
|
SaveUtils.overwriteSave(Globals.currentSave.getName());
|
|
}
|
|
|
|
public static Window createInGameDebugMainMenu(){
|
|
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
int width = 500;
|
|
int height = 500;
|
|
float fontSize = 1.0f;
|
|
Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,width,height,true);
|
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
|
// Div div = new Div();
|
|
// div.setPositionX(0);
|
|
// div.setPositionY(0);
|
|
// div.setWidth(500);
|
|
// div.setHeight(500);
|
|
VirtualScrollable scrollable = new VirtualScrollable(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(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(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(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(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(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(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;
|
|
}});
|
|
|
|
//label (switch framebuffer)
|
|
Button switchFramebufferButton = new Button();
|
|
Label switchFramebufferLabel = new Label(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 client collision spheres)
|
|
Button toggleClientCollisionSpheresButton = new Button();
|
|
Label toggleClientCollisionSpheresLabel = new Label(fontSize);
|
|
toggleClientCollisionSpheresLabel.setText("Toggle draw client collision spheres");
|
|
toggleClientCollisionSpheresButton.addChild(toggleClientCollisionSpheresLabel);
|
|
scrollable.addChild(toggleClientCollisionSpheresButton);
|
|
toggleClientCollisionSpheresButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Globals.userSettings.setGraphicsDebugDrawCollisionSpheresClient(!Globals.userSettings.getGraphicsDebugDrawCollisionSpheresClient());
|
|
return false;
|
|
}});
|
|
|
|
//label (toggle draw server collision spheres)
|
|
Button toggleServerCollisionSpheresButton = new Button();
|
|
Label toggleServerCollisionSpheresLabel = new Label(fontSize);
|
|
toggleServerCollisionSpheresLabel.setText("Toggle draw server collision spheres");
|
|
toggleServerCollisionSpheresButton.addChild(toggleServerCollisionSpheresLabel);
|
|
scrollable.addChild(toggleServerCollisionSpheresButton);
|
|
toggleServerCollisionSpheresButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
// Main.running = false;
|
|
Globals.userSettings.setGraphicsDebugDrawCollisionSpheresServer(!Globals.userSettings.getGraphicsDebugDrawCollisionSpheresServer());
|
|
return false;
|
|
}});
|
|
|
|
//label (toggle draw physics objects)
|
|
Button togglePhysicsObjectsButton = new Button();
|
|
Label togglePhysicsObjectsLabel = new Label(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(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(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;
|
|
}});
|
|
|
|
rVal.applyYoga(0,0);
|
|
|
|
return rVal;
|
|
}
|
|
|
|
public static Window createInGameCharacterSliderMenu(){
|
|
int width = 500;
|
|
int height = 500;
|
|
float fontSize = 0.4f;
|
|
Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,width,height,true);
|
|
// 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(Globals.renderingEngine.getOpenGLState(), 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(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();
|
|
CreatureData 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);
|
|
}
|
|
}
|
|
|
|
rVal.applyYoga(0,0);
|
|
|
|
return rVal;
|
|
}
|
|
|
|
/**
|
|
* Checks if should show the level editor button
|
|
* @return True if should show button, false otherwise
|
|
*/
|
|
private static boolean shouldShowLevelEditor(){
|
|
return Globals.server != null;
|
|
}
|
|
|
|
}
|