DEADSOFTWARE

Remove java serialization
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / container / Container.kt
index 1e13c640cda5f1cdd8e64dc816e81881b85a6504..624f5d0c16865c17984ced324d48d99576624782 100644 (file)
@@ -1,16 +1,20 @@
 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>
 
@@ -21,4 +25,18 @@ abstract class Container(
 
     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