DEADSOFTWARE

Better handle renderer
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameProc.java
index ff6d1740534b89923916c4a91c1307fbcba96646..ea5296a4f226aa93c4d3bb594d0071de41c8ec91 100644 (file)
@@ -10,6 +10,7 @@ import ru.deadsoftware.cavedroid.game.mobs.Player;
 import ru.deadsoftware.cavedroid.game.objects.Drop;
 import ru.deadsoftware.cavedroid.misc.ControlMode;
 
+import javax.annotation.Nullable;
 import java.io.Serializable;
 import java.util.LinkedList;
 
@@ -23,22 +24,15 @@ public class GameProc implements Serializable, Disposable {
 
     static boolean DO_UPD = false;
     static int UPD_X = -1, UPD_Y = -1;
-
-    private transient GameFluidsThread fluidThread;
+    public final Player player;
+    public final LinkedList<Mob> mobs;
+    final LinkedList<Drop> drops;
     public transient GameWorld world;
     public transient GameRenderer renderer;
     public transient GameInput input;
-    transient GamePhysics physics;
-
     public ControlMode controlMode;
-    public final Player player;
-    public final LinkedList<Mob> mobs;
-    final LinkedList<Drop> drops;
-
-    public void resetRenderer() {
-        int scale = CaveGame.TOUCH ? 320 : 480;
-        renderer = new GameRenderer(scale, scale * GameScreen.getHeight() / GameScreen.getWidth());
-    }
+    transient GamePhysics physics;
+    @Nullable private transient GameFluidsThread fluidThread;
 
     public GameProc(int gameMode) {
         world = new GameWorld(WORLD_WIDTH, WORLD_HEIGHT);
@@ -48,10 +42,16 @@ public class GameProc implements Serializable, Disposable {
         physics = new GamePhysics();
         input = new GameInput();
         controlMode = CaveGame.TOUCH ? ControlMode.WALK : ControlMode.CURSOR;
-        resetRenderer();
+        renderer = resetRenderer();
         startFluidThread();
     }
 
+    public GameRenderer resetRenderer() {
+        int scale = CaveGame.TOUCH ? 320 : 480;
+        renderer =  new GameRenderer(scale, scale * GameScreen.getHeight() / GameScreen.getWidth());
+        return renderer;
+    }
+
     private void startFluidThread() {
         fluidThread = new GameFluidsThread();
         fluidThread.start();
@@ -104,11 +104,15 @@ public class GameProc implements Serializable, Disposable {
         physics.update();
         input.update();
         blockUpdater();
-        if (fluidThread == null || !fluidThread.isAlive()) startFluidThread();
+        if (fluidThread == null || !fluidThread.isAlive()) {
+            startFluidThread();
+        }
     }
 
     @Override
     public void dispose() {
-        fluidThread.interrupt();
+        if (fluidThread != null) {
+            fluidThread.interrupt();
+        }
     }
 }