DEADSOFTWARE

Better handle renderer
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameProc.java
index 60be6ebb4d395b1a46ac71b70dc43fad880db34f..ea5296a4f226aa93c4d3bb594d0071de41c8ec91 100644 (file)
@@ -1,18 +1,18 @@
 package ru.deadsoftware.cavedroid.game;
 
-import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.utils.Disposable;
 import ru.deadsoftware.cavedroid.CaveGame;
 import ru.deadsoftware.cavedroid.GameScreen;
 import ru.deadsoftware.cavedroid.game.mobs.FallingGravel;
 import ru.deadsoftware.cavedroid.game.mobs.FallingSand;
 import ru.deadsoftware.cavedroid.game.mobs.Mob;
+import ru.deadsoftware.cavedroid.game.mobs.Player;
 import ru.deadsoftware.cavedroid.game.objects.Drop;
-import ru.deadsoftware.cavedroid.game.objects.Player;
 import ru.deadsoftware.cavedroid.misc.ControlMode;
 
+import javax.annotation.Nullable;
 import java.io.Serializable;
-import java.util.ArrayList;
+import java.util.LinkedList;
 
 public class GameProc implements Serializable, Disposable {
 
@@ -24,35 +24,34 @@ 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 Player player;
-    public ArrayList<Mob> mobs;
-    ArrayList<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);
         player = new Player(gameMode);
-        drops = new ArrayList<>();
-        mobs = new ArrayList<>();
+        drops = new LinkedList<>();
+        mobs = new LinkedList<>();
         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();
@@ -105,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();
+        }
     }
 }