384 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			384 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package electrosphere.menu;
 | |
| 
 | |
| import org.joml.Vector3f;
 | |
| 
 | |
| import electrosphere.controls.ControlHandler.ControlsState;
 | |
| import electrosphere.engine.Globals;
 | |
| import electrosphere.engine.Main;
 | |
| import electrosphere.entity.Entity;
 | |
| import electrosphere.entity.EntityDataStrings;
 | |
| import electrosphere.entity.EntityUtils;
 | |
| import electrosphere.entity.types.creature.CreatureUtils;
 | |
| import electrosphere.game.data.creature.type.CreatureType;
 | |
| import electrosphere.game.data.creature.type.visualattribute.VisualAttribute;
 | |
| import electrosphere.renderer.RenderingEngine;
 | |
| import electrosphere.renderer.actor.Actor;
 | |
| import electrosphere.renderer.actor.ActorStaticMorph;
 | |
| import electrosphere.renderer.model.Model;
 | |
| import electrosphere.renderer.ui.ClickableElement;
 | |
| import electrosphere.renderer.ui.Window;
 | |
| 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.NavigationEvent;
 | |
| import electrosphere.renderer.ui.events.ValueChangeEvent;
 | |
| 
 | |
| 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(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 saveButton = new Button();
 | |
|         Label saveLabel = new Label(100,150,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(100,250,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 4 (debug)
 | |
|             Button debugButton = new Button();
 | |
|             Label debugLabel = new Label(100,350,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;
 | |
|     }
 | |
| 
 | |
|     static void saveWorld(){
 | |
|         if(Globals.serverTerrainManager != null){
 | |
|             Globals.serverTerrainManager.save(Globals.currentSaveName);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     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;
 | |
|     }
 | |
| 
 | |
| }
 |