DEADSOFTWARE

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