[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / container / ContainerController.kt
diff --git a/core/src/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.kt b/core/src/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.kt
index 3facb6f542e980806b3cc03e4e58e7280de7b98f..d2159f1cf72f3498016b8c457395e96c5f20b5ca 100644 (file)
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>()
}
}
+ 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