DEADSOFTWARE

New saving fromat and rewrite in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameModule.java
1 package ru.deadsoftware.cavedroid.game;
3 import dagger.Module;
4 import dagger.Provides;
5 import ru.deadsoftware.cavedroid.MainConfig;
6 import ru.deadsoftware.cavedroid.game.mobs.MobsController;
7 import ru.deadsoftware.cavedroid.game.model.block.Block;
8 import ru.deadsoftware.cavedroid.game.objects.drop.DropController;
9 import ru.deadsoftware.cavedroid.game.objects.container.ContainerController;
10 import ru.deadsoftware.cavedroid.game.save.GameSaveData;
11 import ru.deadsoftware.cavedroid.game.save.GameSaveLoader;
12 import ru.deadsoftware.cavedroid.game.ui.TooltipManager;
13 import ru.deadsoftware.cavedroid.game.world.GameWorld;
15 import javax.annotation.CheckForNull;
17 @Module
18 public class GameModule {
20 @CheckForNull
21 private static GameSaveData data;
23 public static boolean loaded = false;
25 private static void load(MainConfig mainConfig, GameItemsHolder gameItemsHolder, TooltipManager tooltipManager) {
26 if (loaded) {
27 return;
28 }
29 data = GameSaveLoader.INSTANCE.load(mainConfig, gameItemsHolder, tooltipManager);
30 loaded = true;
31 }
33 private static void makeDataNullIfEmpty() {
34 if (data != null && data.isEmpty()) {
35 data = null;
36 }
37 }
39 @Provides
40 @GameScope
41 public static DropController provideDropController(MainConfig mainConfig,
42 GameItemsHolder gameItemsHolder,
43 TooltipManager tooltipManager) {
44 load(mainConfig, gameItemsHolder, tooltipManager);
45 DropController controller = data != null ? data.retrieveDropController() : new DropController();
46 makeDataNullIfEmpty();
47 controller.initDrops(gameItemsHolder);
48 return controller;
49 }
51 @Provides
52 @GameScope
53 public static ContainerController provideFurnaceController(MainConfig mainConfig,
54 DropController dropController,
55 GameItemsHolder gameItemsHolder,
56 TooltipManager tooltipManager) {
57 load(mainConfig, gameItemsHolder, tooltipManager);
58 ContainerController controller = data != null
59 ? data.retrieveContainerController()
60 : new ContainerController(dropController, gameItemsHolder);
61 makeDataNullIfEmpty();
62 controller.init(dropController, gameItemsHolder);
63 return controller;
64 }
66 @Provides
67 @GameScope
68 public static MobsController provideMobsController(MainConfig mainConfig,
69 GameItemsHolder gameItemsHolder,
70 TooltipManager tooltipManager) {
71 load(mainConfig, gameItemsHolder, tooltipManager);
72 MobsController controller = data != null
73 ? data.retrieveMobsController()
74 : new MobsController(gameItemsHolder, tooltipManager);
75 makeDataNullIfEmpty();
76 controller.getPlayer().initInventory(gameItemsHolder, tooltipManager);
77 return controller;
78 }
80 @Provides
81 @GameScope
82 public static GameWorld provideGameWorld(MainConfig mainConfig,
83 DropController dropController,
84 MobsController mobsController,
85 GameItemsHolder gameItemsHolder,
86 ContainerController containerController,
87 TooltipManager tooltipManager) {
88 load(mainConfig, gameItemsHolder, tooltipManager);
89 Block[][] fm = data != null ? data.retrieveForeMap() : null;
90 Block[][] bm = data != null ? data.retrieveBackMap() : null;
91 makeDataNullIfEmpty();
92 return new GameWorld(dropController, mobsController, gameItemsHolder, containerController, fm, bm);
93 }
95 }