DEADSOFTWARE

Implement DI for menu and refactor #13
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / menu / MenuProc.java
index 989a5d1d35bdf431aa0b7354d21711a91934da4a..f96d4d42756545c2d13cfc20de9a74655f986c15 100644 (file)
@@ -1,31 +1,71 @@
 package ru.deadsoftware.cavedroid.menu;
 
+import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.utils.ObjectMap;
 import ru.deadsoftware.cavedroid.CaveGame;
-import ru.deadsoftware.cavedroid.GameScreen;
+import ru.deadsoftware.cavedroid.MainConfig;
 import ru.deadsoftware.cavedroid.menu.objects.Button;
 import ru.deadsoftware.cavedroid.menu.submenus.Menu;
 import ru.deadsoftware.cavedroid.menu.submenus.MenuMain;
 import ru.deadsoftware.cavedroid.menu.submenus.MenuNewGame;
 import ru.deadsoftware.cavedroid.misc.Renderer;
-import ru.deadsoftware.cavedroid.misc.states.AppState;
-import ru.deadsoftware.cavedroid.misc.states.GameState;
-import ru.deadsoftware.cavedroid.misc.states.MenuState;
+
+import javax.inject.Inject;
 
 import static ru.deadsoftware.cavedroid.misc.Assets.*;
 
+@MenuScope
 public class MenuProc extends Renderer {
 
-    private MenuMain mainMenu;
-    private MenuNewGame newGameMenu;
+    public class Input {
+        private void startNewGame(int gameMode) {
+            mMainConfig.getCaveGame().newGame();
+        }
+
+        public void newGameClicked() {
+            mCurrentMenu = mMenuNewGame;
+        }
+
+        public void loadGameClicked() {
+            mMainConfig.getCaveGame().loadGame();
+        }
+
+        public void quitClicked() {
+            Gdx.app.exit();
+        }
+
+        public void survivalClicked() {
+            startNewGame(0);
+        }
+
+        public void creativeClicked() {
+            startNewGame(1);
+        }
+
+        public void backClicked() {
+            mCurrentMenu = mMenuMain;
+        }
+    }
+
+    private final MainConfig mMainConfig;
+
+    private final MenuMain mMenuMain;
+    private final MenuNewGame mMenuNewGame;
+
+    private Menu mCurrentMenu;
+
+    @Inject
+    public MenuProc(MainConfig mainConfig) {
+        super(mainConfig.getWidth(), mainConfig.getHeight());
 
-    private Menu currentMenu;
+        mMainConfig = mainConfig;
 
-    public MenuProc(int width) {
-        super(width, width * GameScreen.getHeight() / GameScreen.getWidth());
-        mainMenu = new MenuMain(getWidth(), getHeight(), this::drawButton);
-        newGameMenu = new MenuNewGame(getWidth(), getHeight(), this::drawButton);
-        currentMenu = mainMenu;
+        Input menuInput = new Input();
+
+        mMenuMain = new MenuMain(getWidth(), getHeight(), this::drawButton, mainConfig, menuInput);
+        mMenuNewGame = new MenuNewGame(getWidth(), getHeight(), this::drawButton, mainConfig, menuInput);
+
+        mCurrentMenu = mMenuMain;
     }
 
     private void drawButton(Button button) {
@@ -36,32 +76,11 @@ public class MenuProc extends Renderer {
                 (button.getY() + button.getHeight() / 2) - (float) getStringHeight(button.getLabel()) / 2);
     }
 
-    private void update() {
-        switch (CaveGame.MENU_STATE) {
-            case MAIN:
-                currentMenu = mainMenu;
-                break;
-            case NEW_GAME:
-                currentMenu = newGameMenu;
-                break;
-            case LOADING:
-                drawString("Generating World...");
-                CaveGame.APP_STATE = AppState.GAME;
-                CaveGame.GAME_STATE = GameState.PLAY;
-                break;
-            case SAVING:
-                drawString("Saving Game...");
-                CaveGame.APP_STATE = AppState.MENU;
-                CaveGame.MENU_STATE = MenuState.MAIN;
-                break;
-        }
-    }
-
     @Override
     public boolean touchUp(int screenX, int screenY, int pointer, int mb) {
-        screenX *= getWidth() / GameScreen.getWidth();
-        screenY *= getHeight() / GameScreen.getHeight();
-        for (ObjectMap.Entry<String, Button> entry : currentMenu.getButtons()) {
+        screenX *= getWidth() / Gdx.graphics.getWidth();
+        screenY *= getHeight() / Gdx.graphics.getHeight();
+        for (ObjectMap.Entry<String, Button> entry : mCurrentMenu.getButtons()) {
             Button button = entry.value;
             if (button.getRect().contains(screenX, screenY)) {
                 if (button.getType() > 0) {
@@ -74,12 +93,15 @@ public class MenuProc extends Renderer {
     }
 
     @Override
-    public void render() {
-        update();
+    public void render(float delta) {
         spriter.begin();
-        currentMenu.draw(spriter);
+        mCurrentMenu.draw(spriter);
         drawString("CaveDroid " + CaveGame.VERSION, 0,
                 getHeight() - getStringHeight("CaveDroid " + CaveGame.VERSION) * 1.5f);
         spriter.end();
     }
+
+    public void reset() {
+        mCurrentMenu = mMenuMain;
+    }
 }