DEADSOFTWARE

Implement DI for menu and refactor #13
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / menu / MenuProc.java
1 package ru.deadsoftware.cavedroid.menu;
3 import com.badlogic.gdx.Gdx;
4 import com.badlogic.gdx.utils.ObjectMap;
5 import ru.deadsoftware.cavedroid.CaveGame;
6 import ru.deadsoftware.cavedroid.MainConfig;
7 import ru.deadsoftware.cavedroid.menu.objects.Button;
8 import ru.deadsoftware.cavedroid.menu.submenus.Menu;
9 import ru.deadsoftware.cavedroid.menu.submenus.MenuMain;
10 import ru.deadsoftware.cavedroid.menu.submenus.MenuNewGame;
11 import ru.deadsoftware.cavedroid.misc.Renderer;
13 import javax.inject.Inject;
15 import static ru.deadsoftware.cavedroid.misc.Assets.*;
17 @MenuScope
18 public class MenuProc extends Renderer {
20 public class Input {
21 private void startNewGame(int gameMode) {
22 mMainConfig.getCaveGame().newGame();
23 }
25 public void newGameClicked() {
26 mCurrentMenu = mMenuNewGame;
27 }
29 public void loadGameClicked() {
30 mMainConfig.getCaveGame().loadGame();
31 }
33 public void quitClicked() {
34 Gdx.app.exit();
35 }
37 public void survivalClicked() {
38 startNewGame(0);
39 }
41 public void creativeClicked() {
42 startNewGame(1);
43 }
45 public void backClicked() {
46 mCurrentMenu = mMenuMain;
47 }
48 }
50 private final MainConfig mMainConfig;
52 private final MenuMain mMenuMain;
53 private final MenuNewGame mMenuNewGame;
55 private Menu mCurrentMenu;
57 @Inject
58 public MenuProc(MainConfig mainConfig) {
59 super(mainConfig.getWidth(), mainConfig.getHeight());
61 mMainConfig = mainConfig;
63 Input menuInput = new Input();
65 mMenuMain = new MenuMain(getWidth(), getHeight(), this::drawButton, mainConfig, menuInput);
66 mMenuNewGame = new MenuNewGame(getWidth(), getHeight(), this::drawButton, mainConfig, menuInput);
68 mCurrentMenu = mMenuMain;
69 }
71 private void drawButton(Button button) {
72 spriter.draw(textureRegions.get("button_" + button.getType()), button.getX(), button.getY());
73 setFontColor(255, 255, 255);
74 drawString(button.getLabel(),
75 (button.getX() + button.getWidth() / 2) - (float) getStringWidth(button.getLabel()) / 2,
76 (button.getY() + button.getHeight() / 2) - (float) getStringHeight(button.getLabel()) / 2);
77 }
79 @Override
80 public boolean touchUp(int screenX, int screenY, int pointer, int mb) {
81 screenX *= getWidth() / Gdx.graphics.getWidth();
82 screenY *= getHeight() / Gdx.graphics.getHeight();
83 for (ObjectMap.Entry<String, Button> entry : mCurrentMenu.getButtons()) {
84 Button button = entry.value;
85 if (button.getRect().contains(screenX, screenY)) {
86 if (button.getType() > 0) {
87 button.clicked();
88 }
89 break;
90 }
91 }
92 return false;
93 }
95 @Override
96 public void render(float delta) {
97 spriter.begin();
98 mCurrentMenu.draw(spriter);
99 drawString("CaveDroid " + CaveGame.VERSION, 0,
100 getHeight() - getStringHeight("CaveDroid " + CaveGame.VERSION) * 1.5f);
101 spriter.end();
104 public void reset() {
105 mCurrentMenu = mMenuMain;