DEADSOFTWARE

Fix saves
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameModule.java
index 0637f595f819b790b7ac8791ef4db5bcf07042ac..29175da1968fba60e36f64a8ebb8ec746c73b630 100644 (file)
@@ -4,6 +4,7 @@ import dagger.Module;
 import dagger.Provides;
 import ru.deadsoftware.cavedroid.MainConfig;
 import ru.deadsoftware.cavedroid.game.mobs.MobsController;
+import ru.deadsoftware.cavedroid.game.model.block.Block;
 import ru.deadsoftware.cavedroid.game.objects.DropController;
 import ru.deadsoftware.cavedroid.game.world.GameWorld;
 
@@ -15,8 +16,14 @@ public class GameModule {
     @CheckForNull
     private static GameSaver.Data data;
 
-    public static void load(MainConfig mainConfig) {
-        data = GameSaver.load(mainConfig);
+    public static boolean loaded = false;
+
+    private static void load(MainConfig mainConfig, GameItemsHolder gameItemsHolder) {
+        if (loaded) {
+            return;
+        }
+        data = GameSaver.load(mainConfig, gameItemsHolder);
+        loaded = true;
     }
 
     private static void makeDataNullIfEmpty() {
@@ -27,30 +34,35 @@ public class GameModule {
 
     @Provides
     @GameScope
-    public static DropController provideDropController() {
+    public static DropController provideDropController(MainConfig mainConfig, GameItemsHolder gameItemsHolder) {
+        load(mainConfig, gameItemsHolder);
         DropController controller = data != null ? data.retrieveDropController() : new DropController();
         makeDataNullIfEmpty();
+        controller.initDrops(gameItemsHolder);
         return controller;
     }
 
     @Provides
     @GameScope
-    public static MobsController provideMobsController(GameItemsHolder gameItemsHolder) {
+    public static MobsController provideMobsController(MainConfig mainConfig, GameItemsHolder gameItemsHolder) {
+        load(mainConfig, gameItemsHolder);
         MobsController controller = data != null ? data.retrieveMobsController() : new MobsController(gameItemsHolder);
         makeDataNullIfEmpty();
+        controller.getPlayer().initInventory(gameItemsHolder);
         return controller;
     }
 
     @Provides
     @GameScope
-    public static GameWorld provideGameWorld(DropController dropController,
+    public static GameWorld provideGameWorld(MainConfig mainConfig,
+                                             DropController dropController,
                                              MobsController mobsController,
                                              GameItemsHolder gameItemsHolder) {
-        // TODO: 4/20/24 RE-enable saves
-//        int[][] fm = data != null ? data.retrieveForeMap() : null;
-//        int[][] bm = data != null ? data.retrieveBackMap() : null;
+        load(mainConfig, gameItemsHolder);
+        Block[][] fm = data != null ? data.retrieveForeMap() : null;
+        Block[][] bm = data != null ? data.retrieveBackMap() : null;
         makeDataNullIfEmpty();
-        return new GameWorld(dropController, mobsController, gameItemsHolder, null, null);
+        return new GameWorld(dropController, mobsController, gameItemsHolder, fm, bm);
     }
 
 }