From 5eb2fcc290d3a1fc27c6e1752e1fe566f1bd72b5 Mon Sep 17 00:00:00 2001 From: "Raybz@Raybz" Date: Fri, 17 May 2013 10:04:36 +0200 Subject: [PATCH] added basic gui and loading screen --- ShootingStars/nbproject/project.properties | 16 +- .../wyrez/shootingstars/ShootingStars.java | 11 +- .../wyrez/shootingstars/gui/ButtonBase.java | 79 ++++++++++ .../shootingstars/gui/IndicatorBase.java | 57 ++++++++ .../shootingstars/states/LoadingState.java | 138 +++++++++++++++++- .../wyrez/shootingstars/states/MenuState.java | 49 ++++++- .../shootingstars/states/StartState.java | 6 + .../states/util/LoadingProgress.java | 47 ++++++ 8 files changed, 398 insertions(+), 5 deletions(-) create mode 100644 ShootingStars/src/org/wyrez/shootingstars/gui/ButtonBase.java create mode 100644 ShootingStars/src/org/wyrez/shootingstars/gui/IndicatorBase.java create mode 100644 ShootingStars/src/org/wyrez/shootingstars/states/util/LoadingProgress.java diff --git a/ShootingStars/nbproject/project.properties b/ShootingStars/nbproject/project.properties index 1f6a779..193ac24 100644 --- a/ShootingStars/nbproject/project.properties +++ b/ShootingStars/nbproject/project.properties @@ -1,3 +1,7 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true application.title=MyGame application.vendor=MyCompany assets.jar.name=assets.jar @@ -28,13 +32,18 @@ dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= includes=** +jar.archive.disabled=${jnlp.enabled} jar.compress=false +jar.index=${jnlp.enabled} javac.classpath=\ ${libs.jme3.classpath}:\ - ${libs.jme3-libraries.classpath} + ${libs.tonegodGUI.classpath}:\ + ${libs.jme3-libraries-lwjgl-minimum.classpath} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} javac.source=1.5 javac.target=1.5 javac.test.classpath=\ @@ -55,11 +64,16 @@ jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api" jnlp.codebase.type=local jnlp.descriptor=application jnlp.enabled=false +jnlp.mixed.code=default jnlp.offline-allowed=false jnlp.signed=false +jnlp.signing= +jnlp.signing.alias= +jnlp.signing.keystore= main.class=org.wyrez.shootingstars.ShootingStars meta.inf.dir=${src.dir}/META-INF manifest.file=MANIFEST.MF +mkdist.disabled=false platform.active=default_platform run.classpath=\ ${javac.classpath}:\ diff --git a/ShootingStars/src/org/wyrez/shootingstars/ShootingStars.java b/ShootingStars/src/org/wyrez/shootingstars/ShootingStars.java index 1ba6ae5..bef7525 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/ShootingStars.java +++ b/ShootingStars/src/org/wyrez/shootingstars/ShootingStars.java @@ -16,6 +16,7 @@ */ package org.wyrez.shootingstars; +import com.jme3.app.Application; import com.jme3.app.DebugKeysAppState; import com.jme3.app.SimpleApplication; import com.jme3.app.StatsAppState; @@ -25,6 +26,7 @@ import com.jme3.scene.Node; import org.wyrez.persij.PersiJContainer; import org.wyrez.shootingstars.states.State; import org.wyrez.shootingstars.states.StateManager; +import tonegod.gui.core.Screen; /** * @@ -34,6 +36,7 @@ public class ShootingStars extends SimpleApplication { private PersiJContainer container; private StateManager sManager; + private Screen screen; public ShootingStars() { super(new StatsAppState(), new DebugKeysAppState()); @@ -42,6 +45,7 @@ public class ShootingStars extends SimpleApplication { @Override public void simpleInitApp() { registerTypes(); + initGUI(); sManager = container.resolve(StateManager.class); sManager.setState(State.START); @@ -51,16 +55,19 @@ public class ShootingStars extends SimpleApplication { public void simpleUpdate(float tpf) { } - public StateManager getSManager() { - return sManager; + private void initGUI() { + guiNode.addControl(container.resolve(Screen.class)); } private void registerTypes() { container = new PersiJContainer(); + container.registerSingleton(ShootingStars.class, this); + container.registerSingleton(Application.class, this); container.registerSingleton(Node.class, rootNode); container.registerSingleton(Camera.class, cam); container.registerSingleton(AppStateManager.class, stateManager); container.registerType(StateManager.class, true); + container.registerType(Screen.class, true); } public static void main(String[] args) { diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/ButtonBase.java b/ShootingStars/src/org/wyrez/shootingstars/gui/ButtonBase.java new file mode 100644 index 0000000..cad33f1 --- /dev/null +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/ButtonBase.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.wyrez.shootingstars.gui; + +import com.jme3.input.event.MouseButtonEvent; +import com.jme3.input.event.MouseMotionEvent; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector4f; +import tonegod.gui.controls.buttons.Button; +import tonegod.gui.core.Screen; + +/** + * + * @author Darth Affe + */ +public class ButtonBase extends Button { + + public ButtonBase(Screen screen, Vector2f position) { + super(screen, position); + } + + public ButtonBase(Screen screen, Vector2f position, Vector2f dimensions) { + super(screen, position, dimensions); + } + + public ButtonBase(Screen screen, Vector2f position, Vector2f dimensions, Vector4f resizeBorders, String defaultImg) { + super(screen, position, dimensions, resizeBorders, defaultImg); + } + + public ButtonBase(Screen screen, String UID, Vector2f position) { + super(screen, UID, position); + } + + public ButtonBase(Screen screen, String UID, Vector2f position, Vector2f dimensions) { + super(screen, UID, position, dimensions); + } + + public ButtonBase(Screen screen, String UID, Vector2f position, Vector2f dimensions, Vector4f resizeBorders, String defaultImg) { + super(screen, UID, position, dimensions, resizeBorders, defaultImg); + } + + @Override + public void onButtonMouseLeftDown(MouseButtonEvent evt, boolean toggled) { + } + + @Override + public void onButtonMouseRightDown(MouseButtonEvent evt, boolean toggled) { + } + + @Override + public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { + } + + @Override + public void onButtonMouseRightUp(MouseButtonEvent evt, boolean toggled) { + } + + @Override + public void onButtonFocus(MouseMotionEvent evt) { + } + + @Override + public void onButtonLostFocus(MouseMotionEvent evt) { + } +} diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/IndicatorBase.java b/ShootingStars/src/org/wyrez/shootingstars/gui/IndicatorBase.java new file mode 100644 index 0000000..64a8b95 --- /dev/null +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/IndicatorBase.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.wyrez.shootingstars.gui; + +import com.jme3.math.Vector2f; +import com.jme3.math.Vector4f; +import tonegod.gui.controls.extras.Indicator; +import tonegod.gui.core.Screen; + +/** + * + * @author Darth Affe + */ +public class IndicatorBase extends Indicator { + + public IndicatorBase(Screen screen, Vector2f position, Orientation orientation) { + super(screen, position, orientation); + } + + public IndicatorBase(Screen screen, Vector2f position, Vector2f dimensions, Orientation orientation) { + super(screen, position, dimensions, orientation); + } + + public IndicatorBase(Screen screen, Vector2f position, Vector2f dimensions, Vector4f resizeBorders, String defaultImg, Orientation orientation) { + super(screen, position, dimensions, resizeBorders, defaultImg, orientation); + } + + public IndicatorBase(Screen screen, String UID, Vector2f position, Orientation orientation) { + super(screen, UID, position, orientation); + } + + public IndicatorBase(Screen screen, String UID, Vector2f position, Vector2f dimensions, Orientation orientation) { + super(screen, UID, position, dimensions, orientation); + } + + public IndicatorBase(Screen screen, String UID, Vector2f position, Vector2f dimensions, Vector4f resizeBorders, String defaultImg, Orientation orientation) { + super(screen, UID, position, dimensions, resizeBorders, defaultImg, orientation); + } + + @Override + public void onChange(float arg0, float arg1) { + } +} diff --git a/ShootingStars/src/org/wyrez/shootingstars/states/LoadingState.java b/ShootingStars/src/org/wyrez/shootingstars/states/LoadingState.java index 5ef5ada..62feb97 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/states/LoadingState.java +++ b/ShootingStars/src/org/wyrez/shootingstars/states/LoadingState.java @@ -17,11 +17,147 @@ package org.wyrez.shootingstars.states; import com.jme3.app.state.AbstractAppState; +import com.jme3.app.state.AppStateManager; +import com.jme3.font.BitmapFont; +import com.jme3.input.event.MouseButtonEvent; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector2f; +import org.wyrez.shootingstars.gui.ButtonBase; +import org.wyrez.shootingstars.gui.IndicatorBase; +import org.wyrez.shootingstars.states.util.LoadingProgress; +import tonegod.gui.controls.buttons.Button; +import tonegod.gui.controls.extras.Indicator; +import tonegod.gui.controls.text.Label; +import tonegod.gui.controls.windows.Panel; +import tonegod.gui.core.Screen; /** * * @author Darth Affe */ -public class LoadingState extends AbstractAppState{ +public class LoadingState extends AbstractAppState { + private StateManager stateManager; + private Screen screen; + private Panel loadingPanel; + private Label lblStatus; + private Indicator indProgress; + private Button btnStart; + private LoadingProgress currentProgress; + + public LoadingState(Screen screen, StateManager stateManager) { + this.screen = screen; + this.stateManager = stateManager; + createGUI(); + } + + private void createGUI() { + loadingPanel = new Panel(screen, new Vector2f(15, 15), new Vector2f(800, 500)); + loadingPanel.setIgnoreMouse(true); + + indProgress = new IndicatorBase(screen, new Vector2f(360f, 360f), + new Vector2f(200f, 30f), Indicator.Orientation.HORIZONTAL); + indProgress.setDisplayValues(); + indProgress.setMaxValue(LoadingProgress.getProgressCount()); + indProgress.setIndicatorColor(ColorRGBA.Black); + + lblStatus = new Label(screen, new Vector2f(360f, 400f), new Vector2f(200f, 30f)); + lblStatus.setTextAlign(BitmapFont.Align.Center); + + btnStart = new ButtonBase(screen, new Vector2f(360f, 360f), + new Vector2f(200f, 30f)) { + @Override + public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { + startGame(); + } + }; + btnStart.setText("Start Game"); + btnStart.setTextAlign(BitmapFont.Align.Center); + + loadingPanel.addChild(indProgress); + loadingPanel.addChild(lblStatus); + loadingPanel.addChild(btnStart); + } + + @Override + public void stateAttached(AppStateManager stateManager) { + currentProgress = LoadingProgress.START; + screen.addElement(loadingPanel); + } + + @Override + public void stateDetached(AppStateManager stateManager) { + screen.removeElement(loadingPanel); + } + + @Override + public void update(float tpf) { + switch (currentProgress) { + case START: + setLoadingStart(); + currentProgress = LoadingProgress.ANALYSE_LOW_BAND; + break; + case ANALYSE_LOW_BAND: + analyseLowBand(); + currentProgress = LoadingProgress.ANALYSE_HIGH_BAND; + break; + case ANALYSE_HIGH_BAND: + analyseHighBand(); + currentProgress = LoadingProgress.GENERATING_SCENE; + break; + case GENERATING_SCENE: + generateScene(); + currentProgress = LoadingProgress.DONE; + break; + case DONE: + setLoadingDone(); + break; + } + updateProgress(currentProgress); + } + + private void analyseLowBand() { + //TODO fill + try { + Thread.sleep(1000); + } catch (Exception ex) { + } + } + + private void analyseHighBand() { + //TODO fill + try { + Thread.sleep(1000); + } catch (Exception ex) { + } + } + + private void generateScene() { + //TODO fill + try { + Thread.sleep(1000); + } catch (Exception ex) { + } + } + + private void setLoadingStart() { + btnStart.hide(); + indProgress.show(); + lblStatus.show(); + } + + private void setLoadingDone() { + btnStart.show(); + indProgress.hide(); + lblStatus.hide(); + } + + private void startGame() { + stateManager.setState(State.GAME); + } + + private void updateProgress(LoadingProgress progress) { + lblStatus.setText(progress.getText()); + indProgress.setCurrentValue(progress.getValue()); + } } diff --git a/ShootingStars/src/org/wyrez/shootingstars/states/MenuState.java b/ShootingStars/src/org/wyrez/shootingstars/states/MenuState.java index 3be9d4a..f47eb3d 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/states/MenuState.java +++ b/ShootingStars/src/org/wyrez/shootingstars/states/MenuState.java @@ -18,6 +18,12 @@ package org.wyrez.shootingstars.states; import com.jme3.app.state.AbstractAppState; import com.jme3.app.state.AppStateManager; +import com.jme3.input.event.MouseButtonEvent; +import com.jme3.math.Vector2f; +import org.wyrez.shootingstars.gui.ButtonBase; +import tonegod.gui.controls.buttons.Button; +import tonegod.gui.controls.windows.Panel; +import tonegod.gui.core.Screen; /** * @@ -25,15 +31,56 @@ import com.jme3.app.state.AppStateManager; */ public class MenuState extends AbstractAppState { - public MenuState() { + private StateManager stateManager; + private Screen screen; + private Panel menuPanel; + + public MenuState(Screen screen, StateManager stateManager) { + this.screen = screen; + this.stateManager = stateManager; + createGUI(); + } + + private void createGUI() { + menuPanel = new Panel(screen, new Vector2f(15, 15), new Vector2f(800, 500)); + menuPanel.setIgnoreMouse(true); + + Button btnExit = new ButtonBase(screen, new Vector2f(600, 400), new Vector2f(120, 40)) { + @Override + public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { + exitGame(); + } + }; + btnExit.setText("Exit"); + + Button btnStart = new ButtonBase(screen, new Vector2f(600, 300), new Vector2f(120, 40)) { + @Override + public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { + startGame(); + } + }; + btnStart.setText("Start"); + + menuPanel.addChild(btnStart); + menuPanel.addChild(btnExit); + } + + private void startGame() { + stateManager.setState(State.LOADING); + } + + private void exitGame() { + //TODO ss.stop(); } @Override public void stateAttached(AppStateManager stateManager) { + screen.addElement(menuPanel); } @Override public void stateDetached(AppStateManager stateManager) { + screen.removeElement(menuPanel); } @Override diff --git a/ShootingStars/src/org/wyrez/shootingstars/states/StartState.java b/ShootingStars/src/org/wyrez/shootingstars/states/StartState.java index 0a42d13..c90d615 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/states/StartState.java +++ b/ShootingStars/src/org/wyrez/shootingstars/states/StartState.java @@ -41,5 +41,11 @@ public class StartState extends AbstractAppState { @Override public void update(float tpf) { + //TODO load everything + //init states + stateManager.getState(State.MENU); + stateManager.getState(State.LOADING); + + stateManager.setState(State.MENU); } } diff --git a/ShootingStars/src/org/wyrez/shootingstars/states/util/LoadingProgress.java b/ShootingStars/src/org/wyrez/shootingstars/states/util/LoadingProgress.java new file mode 100644 index 0000000..b44b6b5 --- /dev/null +++ b/ShootingStars/src/org/wyrez/shootingstars/states/util/LoadingProgress.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.wyrez.shootingstars.states.util; + +/** + * + * @author Darth Affe + */ +public enum LoadingProgress { + + START("Loading...", 0), ANALYSE_LOW_BAND("Analyse Low-Band...", 0), + ANALYSE_HIGH_BAND("Analyse High-Band...", 1), GENERATING_SCENE("Generating Scene...", 2), + DONE("Done!", 3); + private String text; + private float value; + + private LoadingProgress(String text, int value) { + this.text = text; + this.value = value; + } + + public String getText() { + return text; + } + + public float getValue() { + return value; + } + + public static int getProgressCount() { + return LoadingProgress.values().length - 2; + } +}