DEADSOFTWARE

Remove java serialization
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / container / ContainerController.kt
index 3facb6f542e980806b3cc03e4e58e7280de7b98f..d2159f1cf72f3498016b8c457395e96c5f20b5ca 100644 (file)
@@ -4,24 +4,23 @@ import com.badlogic.gdx.Gdx
 import ru.deadsoftware.cavedroid.game.GameItemsHolder
 import ru.deadsoftware.cavedroid.game.GameScope
 import ru.deadsoftware.cavedroid.game.model.block.Block
+import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem.Companion.isNoneOrNull
 import ru.deadsoftware.cavedroid.game.objects.drop.DropController
+import ru.deadsoftware.cavedroid.misc.Saveable
 import ru.deadsoftware.cavedroid.misc.utils.px
-import java.io.Serializable
 import javax.inject.Inject
 
 @GameScope
 class ContainerController @Inject constructor(
     _dropController: DropController,
     _gameItemsHolder: GameItemsHolder
-) : Serializable {
+) : Saveable {
 
     @Suppress("UNNECESSARY_LATEINIT")
-    @Transient
     private lateinit var dropController: DropController
 
     @Suppress("UNNECESSARY_LATEINIT")
-    @Transient
     private lateinit var gameItemsHolder: GameItemsHolder
 
     private val containerMap = mutableMapOf<String, Container>()
@@ -79,8 +78,35 @@ class ContainerController @Inject constructor(
         }
     }
 
+    override fun getSaveData(): SaveDataDto.ContainerControllerSaveData {
+        return SaveDataDto.ContainerControllerSaveData(
+            version = SAVE_DATA_VERSION,
+            containerMap = containerMap.mapValues { (_, container) -> container.getSaveData() },
+        )
+    }
+
     companion object {
+        private const val SAVE_DATA_VERSION = 1
         private const val TAG = "ContainerController"
+
+        fun fromSaveData(
+            saveData: SaveDataDto.ContainerControllerSaveData,
+            dropController: DropController,
+            gameItemsHolder: GameItemsHolder
+        ): ContainerController {
+            saveData.verifyVersion(SAVE_DATA_VERSION)
+
+            return ContainerController(
+                dropController,
+                gameItemsHolder
+            ).apply {
+                containerMap.putAll(
+                    saveData.containerMap.mapValues { (_, containerSaveData) ->
+                        Container.fromSaveData(containerSaveData, gameItemsHolder)
+                    }
+                )
+            }
+        }
     }
 
 }
\ No newline at end of file