DEADSOFTWARE

Remove java serialization
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / container / Container.kt
1 package ru.deadsoftware.cavedroid.game.objects.container
3 import ru.deadsoftware.cavedroid.game.GameItemsHolder
4 import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
5 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
6 import ru.deadsoftware.cavedroid.misc.Saveable
7 import javax.annotation.OverridingMethodsMustInvokeSuper
9 abstract class Container @JvmOverloads constructor(
10 val size: Int,
11 gameItemsHolder: GameItemsHolder,
12 initialItems: List<InventoryItem>? = null,
13 ) : Saveable {
15 private val _items = Array(size) { index ->
16 initialItems?.getOrNull(index) ?: gameItemsHolder.fallbackItem.toInventoryItem()
17 }
19 val items get() = _items.asList() as MutableList<InventoryItem>
21 @OverridingMethodsMustInvokeSuper
22 open fun initItems(gameItemsHolder: GameItemsHolder) {
23 _items.forEach { it.init(gameItemsHolder) }
24 }
26 abstract fun update(gameItemsHolder: GameItemsHolder)
28 abstract override fun getSaveData(): SaveDataDto.ContainerSaveDataDto
30 companion object {
31 fun fromSaveData(saveData: SaveDataDto.ContainerSaveDataDto, gameItemsHolder: GameItemsHolder): Container {
32 return when (saveData) {
33 is SaveDataDto.FurnaceSaveData -> Furnace.fromSaveData(saveData, gameItemsHolder)
34 is SaveDataDto.ChestSaveData -> Chest.fromSaveData(saveData, gameItemsHolder)
36 is SaveDataDto.InventorySaveData -> {
37 throw IllegalArgumentException("Cannot load Container from InventorySaveData")
38 }
39 }
40 }
41 }
42 }