DEADSOFTWARE

ee626202a851f48839c3e7250883a9b1e17f9716
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / menu / MenuRenderer.java
1 package ru.deadsoftware.cavedroid.menu;
3 import com.badlogic.gdx.Gdx;
4 import com.badlogic.gdx.utils.Array;
5 import org.jetbrains.annotations.NotNull;
6 import ru.deadsoftware.cavedroid.CaveGame;
7 import ru.deadsoftware.cavedroid.GameScreen;
8 import ru.deadsoftware.cavedroid.game.GameItems;
9 import ru.deadsoftware.cavedroid.game.GameProc;
10 import ru.deadsoftware.cavedroid.game.GameSaver;
11 import ru.deadsoftware.cavedroid.menu.objects.Button;
12 import ru.deadsoftware.cavedroid.misc.InputHandlerGame;
13 import ru.deadsoftware.cavedroid.misc.states.AppState;
14 import ru.deadsoftware.cavedroid.misc.Assets;
15 import ru.deadsoftware.cavedroid.misc.Renderer;
16 import ru.deadsoftware.cavedroid.misc.states.GameState;
17 import ru.deadsoftware.cavedroid.misc.states.MenuState;
19 import static ru.deadsoftware.cavedroid.GameScreen.GP;
20 import static ru.deadsoftware.cavedroid.GameScreen.RENDERER;
22 public class MenuRenderer extends Renderer {
24 public Array<Button> menuMainBtns;
25 public Array<Button> menuNGBtns;
27 public MenuRenderer(int width) {
28 super(width, width * ((float) GameScreen.getHeight() / GameScreen.getWidth()));
29 //main menu
30 menuMainBtns = new Array<Button>();
31 menuMainBtns.add(new Button("New game", getWidth() / 2 - 100, getHeight() / 4));
32 menuMainBtns.add(new Button("Load game", getWidth() / 2 - 100, getHeight() / 4 + 30, GameSaver.exists() ? 1 : 0));
33 menuMainBtns.add(new Button("Quit", getWidth() / 2 - 100, getHeight() / 4 + 60));
34 //new game menu
35 menuNGBtns = new Array<Button>();
36 menuNGBtns.add(new Button("Survival", getWidth() / 2 - 100, getHeight() / 4, 0));
37 menuNGBtns.add(new Button("Creative", getWidth() / 2 - 100, getHeight() / 4 + 30));
38 menuNGBtns.add(new Button("Back", getWidth() / 2 - 100, getHeight() / 4 + 60));
40 }
42 private void newGame(int gameMode) {
43 GP = new GameProc(gameMode);
44 GP.player.respawn();
45 GameSaver.save(GP);
46 RENDERER = GP.renderer;
47 Gdx.input.setInputProcessor(new InputHandlerGame());
48 CaveGame.APP_STATE = AppState.GAME;
49 CaveGame.GAME_STATE = GameState.PLAY;
50 }
52 public void buttonClicked(@NotNull Button button) {
53 switch (button.getLabel().toLowerCase()) {
54 case "new game":
55 CaveGame.MENU_STATE = MenuState.NEW_GAME;
56 break;
57 case "load game":
58 CaveGame.APP_STATE = AppState.LOAD;
59 break;
60 case "quit":
61 Gdx.app.exit();
62 break;
63 case "survival":
64 newGame(0);
65 break;
66 case "creative":
67 newGame(1);
68 break;
69 case "back":
70 CaveGame.MENU_STATE = MenuState.MAIN;
71 break;
72 }
73 }
75 private void drawButton(Button button) {
76 spriter.draw(Assets.menuBtn[button.getType()], button.getX(), button.getY());
77 setFontColor(255, 255, 255);
78 drawString(button.getLabel(),
79 (button.getX() + button.getWidth() / 2) - (float) Assets.getStringWidth(button.getLabel()) / 2,
80 (button.getY() + button.getHeight() / 2) - (float) Assets.getStringHeight(button.getLabel()) / 2);
81 }
83 private void drawButtons(Array<Button> buttons) {
84 for (Button button : buttons) {
85 if (button.getType() > 0) {
86 if (button.getRect().contains(Gdx.input.getX() * getWidth() / GameScreen.getWidth(),
87 Gdx.input.getY() * getHeight() / GameScreen.getHeight()) &&
88 (!CaveGame.TOUCH || Gdx.input.isTouched()))
89 button.setType(2);
90 else button.setType(1);
91 }
92 drawButton(button);
93 }
94 }
96 private void drawLabel(String str) {
97 drawString(str);
98 }
100 @Override
101 public void render() {
102 spriter.begin();
103 for (int x = 0; x <= getWidth() / 16; x++) {
104 for (int y = 0; y <= getHeight() / 16; y++) {
105 spriter.draw(GameItems.getBlock(3).getTex(), x * 16, y * 16);
106 spriter.draw(Assets.shade, x * 16, y * 16);
109 spriter.draw(Assets.gameLogo, getWidth() / 2 - (float) Assets.gameLogo.getWidth() / 2, 8);
111 switch (CaveGame.MENU_STATE) {
112 case MAIN:
113 drawButtons(menuMainBtns);
114 break;
115 case NEW_GAME:
116 drawButtons(menuNGBtns);
117 break;
118 case LOADING:
119 drawLabel("Generating World...");
120 CaveGame.APP_STATE = AppState.GAME;
121 CaveGame.GAME_STATE = GameState.PLAY;
122 break;
123 case SAVING:
124 drawLabel("Saving Game...");
125 CaveGame.APP_STATE = AppState.MENU;
126 CaveGame.MENU_STATE = MenuState.MAIN;
127 break;
130 drawString("CaveDroid " + CaveGame.VERSION, 0,
131 getHeight() - Assets.getStringHeight("CaveDroid " + CaveGame.VERSION) * 1.5f);
132 spriter.end();