DEADSOFTWARE

Refactor input handrling
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameProc.java
index 44a46878cff367a12cc83ed0b8b8619be6b16c54..94cd34ba9729bac41f22b0c6df010b5b9ac0c3f9 100644 (file)
@@ -1,41 +1,73 @@
 package ru.deadsoftware.cavedroid.game;
 
+import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.utils.Disposable;
+import com.badlogic.gdx.utils.Timer;
+import ru.deadsoftware.cavedroid.MainConfig;
+import ru.deadsoftware.cavedroid.game.mobs.MobsController;
+import ru.deadsoftware.cavedroid.game.mobs.Player;
+import ru.deadsoftware.cavedroid.game.world.GameWorldBlocksLogicControllerTask;
+import ru.deadsoftware.cavedroid.game.world.GameWorldFluidsLogicControllerTask;
+import ru.deadsoftware.cavedroid.game.world.GameWorldMobDamageControllerTask;
 
 import javax.inject.Inject;
 
 @GameScope
 public class GameProc implements Disposable {
 
-    public static final int MAX_CREATIVE_SCROLL = GameItems.getItemsSize() / 8;
-
-    private final GameWorld mGameWorld;
     private final GamePhysics mGamePhysics;
-    private final GameInput mGameInput;
     private final GameRenderer mGameRenderer;
+    private final MobsController mMobsController;
+    private final GameWorldFluidsLogicControllerTask mGameWorldFluidsLogicControllerTask;
+    private final GameWorldBlocksLogicControllerTask mGameWorldBlocksLogicControllerTask;
+    private final GameWorldMobDamageControllerTask mGameWorldMobDamageControllerTask;
+
+    private final Timer mWorldLogicTimer = new Timer();
 
     @Inject
-    public GameProc(GameWorld gameWorld,
+    public GameProc(MainConfig mainConfig,
                     GamePhysics gamePhysics,
-                    GameInput gameInput,
-                    GameRenderer gameRenderer) {
-        mGameWorld = gameWorld;
+                    GameRenderer gameRenderer,
+                    MobsController mobsController,
+                    GameWorldFluidsLogicControllerTask gameWorldFluidsLogicControllerTask,
+                    GameWorldBlocksLogicControllerTask gameWorldBlocksLogicControllerTask,
+                    GameWorldMobDamageControllerTask gameWorldMobDamageControllerTask
+    ) {
         mGamePhysics = gamePhysics;
-        mGameInput = gameInput;
         mGameRenderer = gameRenderer;
+        mMobsController = mobsController;
+        mGameWorldFluidsLogicControllerTask = gameWorldFluidsLogicControllerTask;
+        mGameWorldBlocksLogicControllerTask = gameWorldBlocksLogicControllerTask;
+        mGameWorldMobDamageControllerTask = gameWorldMobDamageControllerTask;
 
-        mGameWorld.startFluidsThread();
+        mobsController.getPlayer().controlMode = mainConfig.isTouch() ? Player.ControlMode.WALK : Player.ControlMode.CURSOR;
+
+        mWorldLogicTimer.scheduleTask(gameWorldFluidsLogicControllerTask, 0,
+                GameWorldFluidsLogicControllerTask.FLUID_UPDATE_INTERVAL_SEC);
+        mWorldLogicTimer.scheduleTask(gameWorldBlocksLogicControllerTask, 0,
+                GameWorldBlocksLogicControllerTask.WORLD_BLOCKS_LOGIC_UPDATE_INTERVAL_SEC);
+        mWorldLogicTimer.scheduleTask(gameWorldMobDamageControllerTask, 0,
+                GameWorldMobDamageControllerTask.ENVIRONMENTAL_MOB_DAMAGE_INTERVAL_SEC);
+    }
+
+    public void setPlayerGameMode(int gameMode) {
+        mMobsController.getPlayer().gameMode = gameMode;
     }
 
     public void update(float delta) {
-        mGamePhysics.update();
-        mGameInput.update();
-        mGameWorld.update();
+        mGamePhysics.update(delta);
         mGameRenderer.render(delta);
     }
 
+    public void show() {
+        Gdx.input.setInputProcessor(mGameRenderer);
+    }
+
     @Override
     public void dispose() {
-        mGameWorld.dispose();
+        mWorldLogicTimer.stop();
+        mGameWorldFluidsLogicControllerTask.cancel();
+        mGameWorldBlocksLogicControllerTask.cancel();
+        mGameWorldMobDamageControllerTask.cancel();
     }
 }