DEADSOFTWARE

Update version script
[cavedroid.git] / core / src / main / kotlin / 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
8 abstract class Container @JvmOverloads constructor(
9 val size: Int,
10 gameItemsHolder: GameItemsHolder,
11 initialItems: List<InventoryItem>? = null,
12 ) : Saveable {
14 private val _items = Array(size) { index ->
15 initialItems?.getOrNull(index) ?: gameItemsHolder.fallbackItem.toInventoryItem()
16 }
18 val items get() = _items.asList() as MutableList<InventoryItem>
20 open fun initItems(gameItemsHolder: GameItemsHolder) {
21 _items.forEach { it.init(gameItemsHolder) }
22 }
24 abstract fun update(gameItemsHolder: GameItemsHolder)
26 abstract override fun getSaveData(): SaveDataDto.ContainerSaveDataDto
28 companion object {
29 fun fromSaveData(saveData: SaveDataDto.ContainerSaveDataDto, gameItemsHolder: GameItemsHolder): Container {
30 return when (saveData) {
31 is SaveDataDto.FurnaceSaveData -> Furnace.fromSaveData(saveData, gameItemsHolder)
32 is SaveDataDto.ChestSaveData -> Chest.fromSaveData(saveData, gameItemsHolder)
34 is SaveDataDto.InventorySaveData -> {
35 throw IllegalArgumentException("Cannot load Container from InventorySaveData")
36 }
37 }
38 }
39 }
40 }