DEADSOFTWARE

Remove guava
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / container / Chest.kt
index be820bc3e2a19a73cf70b35ded134bd6683b82ae..a9e893be3cbad21c09b3eb81c9c40167c95b92e2 100644 (file)
@@ -1,14 +1,38 @@
 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 ru.deadsoftware.cavedroid.misc.Saveable
 
-class Chest(gameItemsHolder: GameItemsHolder) : Container(SIZE, gameItemsHolder) {
+class Chest @JvmOverloads constructor(
+    gameItemsHolder: GameItemsHolder,
+    initialItems: List<InventoryItem>? = null
+) : Container(SIZE, gameItemsHolder, initialItems), Saveable {
 
     override fun update(gameItemsHolder: GameItemsHolder) {
         // no-op
     }
 
+    override fun getSaveData(): SaveDataDto.ChestSaveData {
+        return SaveDataDto.ChestSaveData(
+            version = SAVE_DATA_VERSION,
+            size = size,
+            items = items.map(InventoryItem::getSaveData)
+        )
+    }
+
     companion object {
+        private const val SAVE_DATA_VERSION = 1
         private const val SIZE = 27
+
+        fun fromSaveData(saveData: SaveDataDto.ChestSaveData, gameItemsHolder: GameItemsHolder): Chest {
+            saveData.verifyVersion(SAVE_DATA_VERSION)
+
+            return Chest(
+                gameItemsHolder = gameItemsHolder,
+                initialItems = saveData.items.map { item -> InventoryItem.fromSaveData(item, gameItemsHolder) }
+            )
+        }
     }
 }
\ No newline at end of file