DEADSOFTWARE

New saving fromat and rewrite in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameModule.java
index a72dbcd9e3fe06d09b908924510d0a0a3a0e0f49..29aac7df7e0f42be5364e1df21a5327fe3888697 100644 (file)
@@ -4,7 +4,12 @@ import dagger.Module;
 import dagger.Provides;
 import ru.deadsoftware.cavedroid.MainConfig;
 import ru.deadsoftware.cavedroid.game.mobs.MobsController;
-import ru.deadsoftware.cavedroid.game.objects.DropController;
+import ru.deadsoftware.cavedroid.game.model.block.Block;
+import ru.deadsoftware.cavedroid.game.objects.drop.DropController;
+import ru.deadsoftware.cavedroid.game.objects.container.ContainerController;
+import ru.deadsoftware.cavedroid.game.save.GameSaveData;
+import ru.deadsoftware.cavedroid.game.save.GameSaveLoader;
+import ru.deadsoftware.cavedroid.game.ui.TooltipManager;
 import ru.deadsoftware.cavedroid.game.world.GameWorld;
 
 import javax.annotation.CheckForNull;
@@ -13,10 +18,16 @@ import javax.annotation.CheckForNull;
 public class GameModule {
 
     @CheckForNull
-    private static GameSaver.Data data;
+    private static GameSaveData data;
 
-    public static void load(MainConfig mainConfig) {
-        data = GameSaver.load(mainConfig);
+    public static boolean loaded = false;
+
+    private static void load(MainConfig mainConfig, GameItemsHolder gameItemsHolder, TooltipManager tooltipManager) {
+        if (loaded) {
+            return;
+        }
+        data = GameSaveLoader.INSTANCE.load(mainConfig, gameItemsHolder, tooltipManager);
+        loaded = true;
     }
 
     private static void makeDataNullIfEmpty() {
@@ -27,27 +38,58 @@ public class GameModule {
 
     @Provides
     @GameScope
-    public static DropController provideDropController() {
+    public static DropController provideDropController(MainConfig mainConfig,
+                                                       GameItemsHolder gameItemsHolder,
+                                                       TooltipManager tooltipManager) {
+        load(mainConfig, gameItemsHolder, tooltipManager);
         DropController controller = data != null ? data.retrieveDropController() : new DropController();
         makeDataNullIfEmpty();
+        controller.initDrops(gameItemsHolder);
+        return controller;
+    }
+
+    @Provides
+    @GameScope
+    public static ContainerController provideFurnaceController(MainConfig mainConfig,
+                                                               DropController dropController,
+                                                               GameItemsHolder gameItemsHolder,
+                                                               TooltipManager tooltipManager) {
+        load(mainConfig, gameItemsHolder, tooltipManager);
+        ContainerController controller = data != null
+                ? data.retrieveContainerController()
+                : new ContainerController(dropController, gameItemsHolder);
+        makeDataNullIfEmpty();
+        controller.init(dropController, gameItemsHolder);
         return controller;
     }
 
     @Provides
     @GameScope
-    public static MobsController provideMobsController() {
-        MobsController controller = data != null ? data.retrieveMobsController() : new MobsController();
+    public static MobsController provideMobsController(MainConfig mainConfig,
+                                                       GameItemsHolder gameItemsHolder,
+                                                       TooltipManager tooltipManager) {
+        load(mainConfig, gameItemsHolder, tooltipManager);
+        MobsController controller = data != null
+                ? data.retrieveMobsController()
+                : new MobsController(gameItemsHolder, tooltipManager);
         makeDataNullIfEmpty();
+        controller.getPlayer().initInventory(gameItemsHolder, tooltipManager);
         return controller;
     }
 
     @Provides
     @GameScope
-    public static GameWorld provideGameWorld(DropController dropController, MobsController mobsController) {
-        int[][] fm = data != null ? data.retrieveForeMap() : null;
-        int[][] bm = data != null ? data.retrieveBackMap() : null;
+    public static GameWorld provideGameWorld(MainConfig mainConfig,
+                                             DropController dropController,
+                                             MobsController mobsController,
+                                             GameItemsHolder gameItemsHolder,
+                                             ContainerController containerController,
+                                             TooltipManager tooltipManager) {
+        load(mainConfig, gameItemsHolder, tooltipManager);
+        Block[][] fm = data != null ? data.retrieveForeMap() : null;
+        Block[][] bm = data != null ? data.retrieveBackMap() : null;
         makeDataNullIfEmpty();
-        return new GameWorld(dropController, mobsController, fm, bm);
+        return new GameWorld(dropController, mobsController, gameItemsHolder, containerController, fm, bm);
     }
 
 }