X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fobjects%2Fcontainer%2FContainerController.kt;h=d2159f1cf72f3498016b8c457395e96c5f20b5ca;hb=91283c3181af9700e20b5600f4e9017e0c31d33a;hp=3facb6f542e980806b3cc03e4e58e7280de7b98f;hpb=cb0605053ce3de493b0d1f43cd7ec1e4a9cf0ac5;p=cavedroid.git 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 3facb6f..d2159f1 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.kt @@ -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() @@ -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