DEADSOFTWARE

Remove guava
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / mobs / MobsController.kt
index df2a6dec5eef62240a5708edf676af8008e003ee..4b2c209c22d6fe1dc44fc4e65b04e1bca4bbae7e 100644 (file)
@@ -3,19 +3,22 @@ package ru.deadsoftware.cavedroid.game.mobs
 import ru.deadsoftware.cavedroid.game.GameItemsHolder
 import ru.deadsoftware.cavedroid.game.GameScope
 import ru.deadsoftware.cavedroid.game.mobs.player.Player
-import java.io.Serializable
+import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
+import ru.deadsoftware.cavedroid.game.ui.TooltipManager
+import ru.deadsoftware.cavedroid.misc.Saveable
 import java.util.*
 import javax.inject.Inject
 
 @GameScope
 class MobsController @Inject constructor(
-    gameItemsHolder: GameItemsHolder
-) : Serializable {
+    gameItemsHolder: GameItemsHolder,
+    tooltipManager: TooltipManager,
+) : Saveable {
 
     private val _mobs = LinkedList<Mob>()
 
-    val player: Player =
-        Player(gameItemsHolder)
+    var player: Player = Player(gameItemsHolder, tooltipManager)
+        private set
 
     val mobs: List<Mob>
         get() = _mobs
@@ -24,7 +27,31 @@ class MobsController @Inject constructor(
         _mobs.add(mob)
     }
 
+    override fun getSaveData(): SaveDataDto.MobsControllerSaveData {
+        return SaveDataDto.MobsControllerSaveData(
+            version = SAVE_DATA_VERSION,
+            mobs = _mobs.map(Mob::getSaveData),
+            player = player.getSaveData(),
+        )
+    }
+
     companion object {
+        private const val SAVE_DATA_VERSION = 1
+
         private const val TAG = "MobsController"
+
+        fun fromSaveData(
+            saveData: SaveDataDto.MobsControllerSaveData,
+            gameItemsHolder: GameItemsHolder,
+            tooltipManager: TooltipManager
+        ): MobsController {
+            saveData.verifyVersion(SAVE_DATA_VERSION)
+
+            return MobsController(gameItemsHolder, tooltipManager)
+                .apply {
+                    _mobs.addAll(saveData.mobs.map { mob -> Mob.fromSaveData(mob) })
+                    player = Player.fromSaveData(saveData.player, gameItemsHolder, tooltipManager)
+                }
+        }
     }
 }
\ No newline at end of file