diff options
Diffstat (limited to 'core/src/sk/neuromancer/sphaera/rewrite/Menu.java')
| -rwxr-xr-x | core/src/sk/neuromancer/sphaera/rewrite/Menu.java | 232 |
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(); + } +} |
