DEADSOFTWARE

Add my repo for automultibind
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / CaveGame.java
index 57704d98f94f56d186c6c2c845f0dfd2f699d8d6..9ca34b8e0507a5a42523accf769469847185661a 100644 (file)
 package ru.deadsoftware.cavedroid;
 
+import com.badlogic.gdx.Application;
 import com.badlogic.gdx.Game;
 import com.badlogic.gdx.Gdx;
-import ru.deadsoftware.cavedroid.misc.states.AppState;
-import ru.deadsoftware.cavedroid.misc.states.GameState;
-import ru.deadsoftware.cavedroid.misc.states.MenuState;
+import com.badlogic.gdx.Graphics;
+import ru.deadsoftware.cavedroid.game.GameScreen;
+import ru.deadsoftware.cavedroid.misc.Assets;
+import ru.deadsoftware.cavedroid.misc.utils.AssetLoader;
+import ru.deadsoftware.cavedroid.prefs.PreferencesStore;
+
+import javax.annotation.Nullable;
 
 public class CaveGame extends Game {
 
-    public static final String VERSION = "alpha 0.4";
+    private static final String TAG = "CaveGame";
+
+    public static final String VERSION = "alpha 0.9.2";
+
+    private final MainConfig mMainConfig;
+    private final MainComponent mMainComponent;
+    private final AssetLoader mAssetLoader;
+
+    private final String mGameFolder;
+    private final boolean mTouch;
+    private boolean mDebug;
+
+    @Nullable
+    private final String mAssetsPackPath;
 
-    public static AppState APP_STATE;
-    public static GameState GAME_STATE;
-    public static MenuState MENU_STATE;
+    public CaveGame(String gameFolder,
+                    boolean touch,
+                    PreferencesStore preferencesStore,
+                    @Nullable String assetsPackPath) {
+        mGameFolder = gameFolder;
+        mTouch = touch;
+        mAssetsPackPath = assetsPackPath;
 
-    public static String GAME_FOLDER;
-    public static boolean TOUCH;
+        mMainComponent = DaggerMainComponent
+                .builder()
+                .caveGame(this)
+                .preferencesStore(preferencesStore)
+                .build();
 
-    public CaveGame(String gameFolder) {
-        this(gameFolder, false);
+        mMainConfig = mMainComponent.getMainConfig();
+        mAssetLoader = mMainComponent.getAssetLoader();
     }
 
-    public CaveGame(String gameFolder, boolean touch) {
-        GAME_FOLDER = gameFolder;
-        TOUCH = touch;
-        APP_STATE = AppState.MENU;
-        MENU_STATE = MenuState.MAIN;
-        GAME_STATE = GameState.PLAY;
+    public void setDebug(boolean debug) {
+        mDebug = debug;
+    }
+
+    private void initConfig() {
+        int width = 480;
+        int height = (int) (width * ((float) Gdx.graphics.getHeight() / Gdx.graphics.getWidth()));
+
+        mMainConfig.setMainComponent(mMainComponent);
+        mMainConfig.setGameFolder(mGameFolder);
+        mMainConfig.setTouch(mTouch);
+        mMainConfig.setWidth(width);
+        mMainConfig.setHeight(height);
+        mMainConfig.setShowInfo(mDebug);
+        mMainConfig.setAssetsPackPath(mAssetsPackPath);
+
+        if (mDebug) {
+            Gdx.app.setLogLevel(Application.LOG_DEBUG);
+        } else {
+            Gdx.app.setLogLevel(Application.LOG_ERROR);
+        }
+
+        mMainConfig.setFullscreenToggleListener((value) -> {
+            if (value) {
+                Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
+            } else {
+                Gdx.graphics.setWindowedMode(width, height);
+            }
+        });
+    }
+
+    public void newGame(int gameMode) {
+        GameScreen gameScreen = mMainComponent.getGameScreen();
+        gameScreen.newGame(gameMode);
+        setScreen(gameScreen);
+    }
+
+    public void loadGame() {
+        GameScreen gameScreen = mMainComponent.getGameScreen();
+        gameScreen.loadGame();
+        setScreen(gameScreen);
+    }
+
+    public void quitGame() {
+        if (screen != null) {
+            screen.dispose();
+        }
+        setScreen(mMainComponent.getMenuScreen());
     }
 
     @Override
     public void create() {
-        Gdx.app.log("CaveGame", GAME_FOLDER);
-        Gdx.files.absolute(GAME_FOLDER).mkdirs();
-        setScreen(new GameScreen());
+        Gdx.files.absolute(mGameFolder).mkdirs();
+        initConfig();
+
+        Gdx.app.debug(TAG, mGameFolder);
+        Assets.load(mAssetLoader);
+        setScreen(mMainComponent.getMenuScreen());
     }
 
+    @Override
+    public void dispose() {
+        if (screen != null) {
+            screen.dispose();
+        }
+        Assets.dispose();
+    }
 }