X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fobjects%2Fcontainer%2FFurnace.kt;h=237006dc6959626ec939bcc81f12ed2826d8245a;hb=91283c3181af9700e20b5600f4e9017e0c31d33a;hp=1a75e89f83657b8222c2a7ba5e2e54f17bcf0508;hpb=cb0605053ce3de493b0d1f43cd7ec1e4a9cf0ac5;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/objects/container/Furnace.kt b/core/src/ru/deadsoftware/cavedroid/game/objects/container/Furnace.kt index 1a75e89..237006d 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/objects/container/Furnace.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/objects/container/Furnace.kt @@ -4,12 +4,17 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.math.MathUtils import com.badlogic.gdx.utils.TimeUtils 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.game.model.item.InventoryItem.Companion.isNoneOrNull import ru.deadsoftware.cavedroid.game.model.item.Item +import ru.deadsoftware.cavedroid.misc.Saveable + +class Furnace @JvmOverloads constructor( + gameItemsHolder: GameItemsHolder, + initialItems: List? = null +) : Container(SIZE, gameItemsHolder, initialItems), Saveable { -class Furnace(gameItemsHolder: GameItemsHolder) : Container(SIZE, gameItemsHolder) { - var fuel: InventoryItem get() = items[FUEL_INDEX] set(value) { @@ -30,7 +35,6 @@ class Furnace(gameItemsHolder: GameItemsHolder) : Container(SIZE, gameItemsHolde val isActive: Boolean get() = currentFuel != null - @Transient var currentFuel: Item? = null set(value) { currentFuelKey = value?.params?.key @@ -57,7 +61,7 @@ class Furnace(gameItemsHolder: GameItemsHolder) : Container(SIZE, gameItemsHolde } fun canSmelt(): Boolean { - return (result.isNoneOrNull() || (result.item.params.key == input.item.params.smeltProductKey) )&& + return (result.isNoneOrNull() || (result.item.params.key == input.item.params.smeltProductKey)) && !input.isNoneOrNull() && input.item.params.smeltProductKey != null && (!fuel.isNoneOrNull() || burnProgress > 0f) } @@ -118,7 +122,7 @@ class Furnace(gameItemsHolder: GameItemsHolder) : Container(SIZE, gameItemsHolde if (isActive && smeltProgress >= 1f) { val productKey = requireNotNull(input.item.params.smeltProductKey) val res = gameItemsHolder.getItem(productKey) - if (result.isNoneOrNull()) { + if (result.isNoneOrNull()) { result = res.toInventoryItem() } else { result.add() @@ -132,7 +136,21 @@ class Furnace(gameItemsHolder: GameItemsHolder) : Container(SIZE, gameItemsHolde } } + override fun getSaveData(): SaveDataDto.FurnaceSaveData { + return SaveDataDto.FurnaceSaveData( + version = SAVE_DATA_VERSION, + size = size, + currentFuelItemKey = currentFuelKey, + items = items.map(InventoryItem::getSaveData), + startBurnTimeMs = startBurnTimeMs, + startSmeltTimeMs = smeltStarTimeMs, + burnProgress = burnProgress, + smeltProgress = smeltProgress, + ) + } + companion object { + private const val SAVE_DATA_VERSION = 1 private const val SIZE = 3 private const val TAG = "Furnace" @@ -141,6 +159,23 @@ class Furnace(gameItemsHolder: GameItemsHolder) : Container(SIZE, gameItemsHolde const val RESULT_INDEX = 2 const val SMELTING_TIME_MS = 10000L + + fun fromSaveData(saveData: SaveDataDto.FurnaceSaveData, gameItemsHolder: GameItemsHolder): Furnace { + saveData.verifyVersion(SAVE_DATA_VERSION) + + return Furnace( + gameItemsHolder = gameItemsHolder, + initialItems = saveData.items.map { item -> + InventoryItem.fromSaveData(item, gameItemsHolder) + } + ).apply { + currentFuelKey = saveData.currentFuelItemKey + startBurnTimeMs = saveData.startSmeltTimeMs + smeltStarTimeMs = saveData.startSmeltTimeMs + burnProgress = saveData.burnProgress + smeltProgress = saveData.smeltProgress + } + } } } \ No newline at end of file