X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmodel%2Fitem%2FItem.kt;h=80a96251442ebd6bafb924b22044d4b24df703eb;hb=fd73b6dd24b9fe55c0bc8f52f8aa1104a5fe3cb0;hp=42dae7ea68eee2c0b47098c3805ae68416d28dae;hpb=476b65903ad1082a1847eb2a8076ab1039358790;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/model/item/Item.kt b/core/src/ru/deadsoftware/cavedroid/game/model/item/Item.kt index 42dae7e..80a9625 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/model/item/Item.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/model/item/Item.kt @@ -1,5 +1,6 @@ package ru.deadsoftware.cavedroid.game.model.item +import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.g2d.Sprite import ru.deadsoftware.cavedroid.game.model.block.Block import kotlin.contracts.ExperimentalContracts @@ -11,6 +12,19 @@ sealed class Item { abstract val params: CommonItemParams abstract val sprite: Sprite + override fun hashCode(): Int { + return params.key.hashCode() + } + + override fun equals(other: Any?): Boolean { + return params.key == (other as Item).params.key + } + + fun isNone(): Boolean { + contract { returns(true) implies (this@Item is None) } + return this is None + } + fun isPlaceable(): Boolean { contract { returns(true) implies (this@Item is Placeable) } return this is Placeable @@ -25,6 +39,11 @@ sealed class Item { contract { returns(true) implies (this@Item is Placeable) } return this is Placeable } + + @JvmOverloads + fun toInventoryItem(amount: Int = 1): InventoryItem { + return InventoryItem(this, amount) + } sealed class Tool : Item() { abstract val mobDamageMultiplier: Float @@ -34,7 +53,14 @@ sealed class Item { sealed class Usable : Item() { abstract val useActionKey: String } - + + data class None( + override val params: CommonItemParams, + ): Item() { + override val sprite: Sprite + get() = throw IllegalAccessException("Trying to get sprite of None") + } + data class Placeable( override val params: CommonItemParams, val block: Block