DEADSOFTWARE

Add my repo for automultibind
[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.ui.TooltipManager;
11 import ru.deadsoftware.cavedroid.game.world.GameWorld;
13 import javax.annotation.CheckForNull;
15 @Module
16 public class GameModule {
18 @CheckForNull
19 private static GameSaver.Data data;
21 public static boolean loaded = false;
23 private static void load(MainConfig mainConfig, GameItemsHolder gameItemsHolder) {
24 if (loaded) {
25 return;
26 }
27 data = GameSaver.load(mainConfig, gameItemsHolder);
28 loaded = true;
29 }
31 private static void makeDataNullIfEmpty() {
32 if (data != null && data.isEmpty()) {
33 data = null;
34 }
35 }
37 @Provides
38 @GameScope
39 public static DropController provideDropController(MainConfig mainConfig, GameItemsHolder gameItemsHolder) {
40 load(mainConfig, gameItemsHolder);
41 DropController controller = data != null ? data.retrieveDropController() : new DropController();
42 makeDataNullIfEmpty();
43 controller.initDrops(gameItemsHolder);
44 return controller;
45 }
47 @Provides
48 @GameScope
49 public static ContainerController provideFurnaceController(MainConfig mainConfig, DropController dropController, GameItemsHolder gameItemsHolder) {
50 load(mainConfig, gameItemsHolder);
51 ContainerController controller = data != null ? data.retrieveFurnaceController() : new ContainerController(dropController, gameItemsHolder);
52 makeDataNullIfEmpty();
53 controller.init(dropController, gameItemsHolder);
54 return controller;
55 }
57 @Provides
58 @GameScope
59 public static MobsController provideMobsController(MainConfig mainConfig,
60 GameItemsHolder gameItemsHolder,
61 TooltipManager tooltipManager) {
62 load(mainConfig, gameItemsHolder);
63 MobsController controller = data != null
64 ? data.retrieveMobsController()
65 : new MobsController(gameItemsHolder, tooltipManager);
66 makeDataNullIfEmpty();
67 controller.getPlayer().initInventory(gameItemsHolder, tooltipManager);
68 return controller;
69 }
71 @Provides
72 @GameScope
73 public static GameWorld provideGameWorld(MainConfig mainConfig,
74 DropController dropController,
75 MobsController mobsController,
76 GameItemsHolder gameItemsHolder,
77 ContainerController containerController) {
78 load(mainConfig, gameItemsHolder);
79 Block[][] fm = data != null ? data.retrieveForeMap() : null;
80 Block[][] bm = data != null ? data.retrieveBackMap() : null;
81 makeDataNullIfEmpty();
82 return new GameWorld(dropController, mobsController, gameItemsHolder, containerController, fm, bm);
83 }
85 }