DEADSOFTWARE

05ec7444fd79243e9ebbd35d129de5d668dd2f85
[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 java.io.Serializable
8 import javax.annotation.OverridingMethodsMustInvokeSuper
10 abstract class Container @JvmOverloads constructor(
11 val size: Int,
12 gameItemsHolder: GameItemsHolder,
13 initialItems: List<InventoryItem>? = null,
14 ) : Serializable, Saveable {
16 private val _items = Array(size) { index ->
17 initialItems?.getOrNull(index) ?: gameItemsHolder.fallbackItem.toInventoryItem()
18 }
20 val items get() = _items.asList() as MutableList<InventoryItem>
22 @OverridingMethodsMustInvokeSuper
23 open fun initItems(gameItemsHolder: GameItemsHolder) {
24 _items.forEach { it.init(gameItemsHolder) }
25 }
27 abstract fun update(gameItemsHolder: GameItemsHolder)
29 abstract override fun getSaveData(): SaveDataDto.ContainerSaveDataDto
31 companion object {
32 fun fromSaveData(saveData: SaveDataDto.ContainerSaveDataDto, gameItemsHolder: GameItemsHolder): Container {
33 return when (saveData) {
34 is SaveDataDto.FurnaceSaveData -> Furnace.fromSaveData(saveData, gameItemsHolder)
35 is SaveDataDto.ChestSaveData -> Chest.fromSaveData(saveData, gameItemsHolder)
37 is SaveDataDto.InventorySaveData -> {
38 throw IllegalArgumentException("Cannot load Container from InventorySaveData")
39 }
40 }
41 }
42 }
43 }