[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / container / Container.kt
diff --git a/core/src/ru/deadsoftware/cavedroid/game/objects/container/Container.kt b/core/src/ru/deadsoftware/cavedroid/game/objects/container/Container.kt
index 1e13c640cda5f1cdd8e64dc816e81881b85a6504..624f5d0c16865c17984ced324d48d99576624782 100644 (file)
package ru.deadsoftware.cavedroid.game.objects.container
import ru.deadsoftware.cavedroid.game.GameItemsHolder
+import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
-import java.io.Serializable
+import ru.deadsoftware.cavedroid.misc.Saveable
import javax.annotation.OverridingMethodsMustInvokeSuper
-abstract class Container(
+abstract class Container @JvmOverloads constructor(
val size: Int,
- gameItemsHolder: GameItemsHolder
-) : Serializable {
+ gameItemsHolder: GameItemsHolder,
+ initialItems: List<InventoryItem>? = null,
+) : Saveable {
- private val _items = Array(size) { gameItemsHolder.fallbackItem.toInventoryItem() }
+ private val _items = Array(size) { index ->
+ initialItems?.getOrNull(index) ?: gameItemsHolder.fallbackItem.toInventoryItem()
+ }
val items get() = _items.asList() as MutableList<InventoryItem>
abstract fun update(gameItemsHolder: GameItemsHolder)
+ abstract override fun getSaveData(): SaveDataDto.ContainerSaveDataDto
+
+ companion object {
+ fun fromSaveData(saveData: SaveDataDto.ContainerSaveDataDto, gameItemsHolder: GameItemsHolder): Container {
+ return when (saveData) {
+ is SaveDataDto.FurnaceSaveData -> Furnace.fromSaveData(saveData, gameItemsHolder)
+ is SaveDataDto.ChestSaveData -> Chest.fromSaveData(saveData, gameItemsHolder)
+
+ is SaveDataDto.InventorySaveData -> {
+ throw IllegalArgumentException("Cannot load Container from InventorySaveData")
+ }
+ }
+ }
+ }
}
\ No newline at end of file