DEADSOFTWARE

MainComponent in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / container / Container.kt
index 1e13c640cda5f1cdd8e64dc816e81881b85a6504..3938ef70142d5b593347f4c02a820adc3f1b3775 100644 (file)
@@ -1,24 +1,40 @@
 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 javax.annotation.OverridingMethodsMustInvokeSuper
+import ru.deadsoftware.cavedroid.misc.Saveable
 
-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>
 
-    @OverridingMethodsMustInvokeSuper
     open fun initItems(gameItemsHolder: GameItemsHolder) {
         _items.forEach { it.init(gameItemsHolder) }
     }
 
     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