package electrosphere.menu; import java.util.LinkedList; import java.util.List; import org.joml.Vector3f; import electrosphere.game.data.creature.type.CreatureType; import electrosphere.game.data.creature.type.visualattribute.AttributeVariant; import electrosphere.game.data.creature.type.visualattribute.VisualAttribute; import electrosphere.main.Globals; import electrosphere.renderer.ui.ClickableElement; import electrosphere.renderer.ui.Element; import electrosphere.renderer.ui.ValueElement.ValueChangeEventCallback; import electrosphere.renderer.ui.elements.Button; 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.StringCarousel; import electrosphere.renderer.ui.events.ClickEvent; import electrosphere.renderer.ui.events.ValueChangeEvent; import electrosphere.renderer.ui.form.FormElement; public class MenuGeneratorsMultiplayer { public static Element createMultiplayerCharacterSelectionWindow(){ FormElement rVal = new FormElement(); // int screenTop = Globals.WINDOW_HEIGHT - 150; int verticalPosition = 125; //button (create) Button createButton = new Button(); Label createLabel = new Label(100,125 + verticalPosition + 200,1.0f); createLabel.setText("Create Character"); createButton.addChild(createLabel); rVal.addChild(createButton); createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldCreationMenu()); return false; }}); return rVal; } static String selectedRace = ""; public static Element createMultiplayerCharacterCreationWindow(){ FormElement rVal = new FormElement(); // int screenTop = Globals.WINDOW_HEIGHT - 150; int verticalPosition = 125; //select race StringCarousel raceCarousel = new StringCarousel(100, 125, 1.0f); raceCarousel.setOnValueChangeCallback(new ValueChangeEventCallback() {public void execute(ValueChangeEvent event){ selectedRace = event.getAsString(); }}); for(String raceName : Globals.gameConfigCurrent.getCreatureTypeLoader().getPlayableRaces()){ raceCarousel.addOption(raceName); } rVal.addChild(raceCarousel); //button (create) Button createButton = new Button(); Label createLabel = new Label(100,275,1.0f); createLabel.setText("Select Race"); createButton.addChild(createLabel); rVal.addChild(createButton); createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ WindowUtils.replaceMainMenuContents(MenuGeneratorsMultiplayer.createMultiplayerCharacterCreationTweakWindow(selectedRace)); return false; }}); return rVal; } public static Element createMultiplayerCharacterCreationTweakWindow(String race){ // int screenTop = Globals.WINDOW_HEIGHT - 150; int verticalPosition = 125; int horizontalPosition = 300; List controlsToAdd = new LinkedList(); //create edit controls here CreatureType selectedRaceType = Globals.gameConfigCurrent.getCreatureTypeLoader().getCreature(race); for(VisualAttribute attribute : selectedRaceType.getVisualAttributes()){ if(attribute.getType().equals(VisualAttribute.TYPE_BONE)){ //add label for slider Label sliderName = new Label(20, verticalPosition, 0.6f); sliderName.setText(attribute.getAttributeId()); controlsToAdd.add(sliderName); //add a slider Slider boneSlider = new Slider(horizontalPosition, verticalPosition + 10, 500, 20, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,1,1)); float min = attribute.getMinValue(); float max = attribute.getMaxValue(); boneSlider.setMinimum(min); boneSlider.setMaximum(max); boneSlider.setValue(min + (max - min)/2.0f); controlsToAdd.add(boneSlider); } else if(attribute.getType().equals(VisualAttribute.TYPE_REMESH)){ //add label for carousel Label sliderName = new Label(20, verticalPosition, 0.6f); sliderName.setText(attribute.getAttributeId()); controlsToAdd.add(sliderName); //add a carousel StringCarousel variantCarousel = new StringCarousel(horizontalPosition, verticalPosition, 1.0f); for(AttributeVariant variant : attribute.getVariants()){ variantCarousel.addOption(variant.getId()); } controlsToAdd.add(variantCarousel); } verticalPosition = verticalPosition + 100; } //add button to actually create the character Button createCharacterButton = new Button(); Label createCharacterLabel = new Label(horizontalPosition,verticalPosition,1.0f); createCharacterLabel.setText("Create"); createCharacterButton.addChild(createCharacterLabel); controlsToAdd.add(createCharacterButton); createCharacterButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ WindowUtils.replaceMainMenuContents(MenuGenerators.createTitleMenu()); return false; }}); int width = 1000; int height = verticalPosition + 300; ScrollableContainer scrollable = new ScrollableContainer(0, 0, width, height); for(Element newControl : controlsToAdd){ scrollable.addChild(newControl); } // rVal.addChild(scrollable); // Label testLabel = new Label(100,215,1.0f); // testLabel.setText("Aaaaaaa"); // rVal.addChild(testLabel); // //black texture background // ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture); // scrollable.addChild(imagePanel); return scrollable; } }