summaryrefslogtreecommitdiff
path: root/core/src/sk/neuromancer/sphaera/rewrite/Menu.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/sk/neuromancer/sphaera/rewrite/Menu.java')
-rwxr-xr-xcore/src/sk/neuromancer/sphaera/rewrite/Menu.java232
1 files changed, 232 insertions, 0 deletions
diff --git a/core/src/sk/neuromancer/sphaera/rewrite/Menu.java b/core/src/sk/neuromancer/sphaera/rewrite/Menu.java
new file mode 100755
index 0000000..4898e04
--- /dev/null
+++ b/core/src/sk/neuromancer/sphaera/rewrite/Menu.java
@@ -0,0 +1,232 @@
+package sk.neuromancer.sphaera.rewrite;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.OrthographicCamera;
+import com.badlogic.gdx.graphics.Pixmap;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.BitmapFont;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import com.badlogic.gdx.scenes.scene2d.InputEvent;
+import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.Label;
+import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle;
+import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
+import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle;
+import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
+import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
+import com.badlogic.gdx.utils.viewport.StretchViewport;
+import com.badlogic.gdx.utils.viewport.Viewport;
+
+public class Menu extends GameState{
+
+
+ private MenuState state;
+ private World world;
+ private float score;
+
+ private Stage ui;
+ private TextButton playButton;
+ private TextButton exitButton;
+ private Image logo;
+ private Label scoreLabel;
+ private Label howToLabel;
+ private Label by;
+
+ private TextButtonStyle buttonStyle;
+ private LabelStyle labelStyle;
+
+ public static final String LOGO = "logo.png";
+ public static final String BUTTON = "button.png";
+
+ public Menu(Object... remains){
+ super(remains);
+ if(remains.length > 0){
+ state = (MenuState) remains[0];
+ }else{
+ state = MenuState.START;
+ }
+
+ switch(state){
+ case WIN:
+ case PAUSE:
+ case POST:
+ if(remains.length > 1){
+ world = (World) remains[1];
+ if(remains.length > 2){
+ this.score = (Float) remains[2];
+ }
+ }else{
+ world = new World();
+ }
+ break;
+ case START:
+ world = new World();
+ break;
+ default:
+ break;
+ }
+
+ ui = new Stage();
+
+ Skin skin = new Skin();
+
+ logo = new Image(new Texture(Gdx.files.internal(LOGO)));
+
+ buttonStyle = new TextButtonStyle();
+ Texture buttonTexture = new Texture(Gdx.files.internal(BUTTON));
+
+ buttonStyle.up = new TextureRegionDrawable(new TextureRegion(buttonTexture));
+
+ if(!buttonTexture.getTextureData().isPrepared()){
+ buttonTexture.getTextureData().prepare();
+ }
+
+ Pixmap downPixmap = buttonTexture.getTextureData().consumePixmap();
+ downPixmap.setColor(0.5f, 0, 0, 0.3f);
+ downPixmap.fillRectangle(5, 5, 55, 23);
+
+ buttonStyle.down = new TextureRegionDrawable(new TextureRegion(new Texture(downPixmap)));
+ buttonStyle.font = new BitmapFont();
+
+ labelStyle = new LabelStyle(new BitmapFont(), Color.BLACK);
+
+ skin.add("default", buttonStyle);
+ skin.add("label", labelStyle);
+
+ float width = Gdx.graphics.getWidth();
+ float height = Gdx.graphics.getHeight();
+
+ playButton = new TextButton("PLAY", skin);
+ playButton.setSize(width/2.5f, width/6);
+ playButton.setPosition(width/2f - width/2.5f, height/3f);
+ playButton.addListener(new ClickListener(){
+ @Override
+ public void clicked(InputEvent event, float x, float y) {
+ playClick();
+ }
+ });
+
+ exitButton = new TextButton("EXIT", skin);
+ exitButton.setSize(width/2.5f, width/6);
+ exitButton.setPosition(width/2f, height/3f);
+ exitButton.addListener(new ClickListener(){
+ @Override
+ public void clicked(InputEvent event, float x, float y) {
+ exitClick();
+ }
+ });
+
+ logo.setPosition(width/2 - width/4, width/4);
+ logo.setSize(width/2, width/2);
+
+ String scoreString = score == 0 ? "" : "Score:" + Float.toString(score);
+
+ scoreLabel = new Label(scoreString, skin, "label");
+ scoreLabel.setPosition(width/16, 7 * height/8);
+ scoreLabel.setFontScale(5);
+
+ String howToString = state == MenuState.WIN ? "Congrats! You have won." : "Collect the blue spheres, avoid red ones. Grow! \nSPACE to move. A,D to rotate, SCROLL to zoom.";
+
+ howToLabel = new Label(howToString, skin, "label");
+ howToLabel.setPosition(width/12, height/8);
+ howToLabel.setFontScale(2.5f);
+
+ by = new Label("by J08nY", skin, "label");
+ by.setPosition(width/2 + width/4, width/2);
+
+
+ ui.addActor(logo);
+ ui.addActor(by);
+ ui.addActor(scoreLabel);
+ ui.addActor(howToLabel);
+ ui.addActor(playButton);
+ ui.addActor(exitButton);
+ }
+
+ @Override
+ public void show() {
+ resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
+ Gdx.input.setInputProcessor(ui);
+ }
+
+ @Override
+ public void render(float delta) {
+ Gdx.gl.glClearColor(1,1,1,1);
+ Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+
+ ui.draw();
+ }
+
+ public void playClick(){
+ this.finish();
+ if(this.world != null)
+ this.world.dispose();
+ this.setNext(new World(this));
+ }
+
+ public void exitClick(){
+ this.finish();
+ if(this.world != null)
+ this.world.dispose();
+ this.setNext(new Exit());
+ }
+
+ @Override
+ public void tick(long tickCount) {
+ ui.act(1/SphaeraGame.TPS);
+ }
+
+ @Override
+ public void resize(int width, int height) {
+
+ }
+
+ @Override
+ public void pause() {
+
+ }
+
+ @Override
+ public void resume() {
+
+ }
+
+ @Override
+ public void hide() {
+ Gdx.gl.glClearColor(1,1,1,1);
+ Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+ }
+
+ @Override
+ public void dispose() {
+ if(ui != null)
+ ui.dispose();
+ }
+
+ public enum MenuState{
+ START, PAUSE, POST, WIN;
+ }
+
+ @Override
+ public GameState next() {
+ switch(state){
+ case PAUSE:
+ //world or exit
+ break;
+ case POST:
+ //world or exit
+ break;
+ case START:
+ //world or exit
+ break;
+ default:
+ break;
+ }
+
+ return super.next();
+ }
+}