X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmodel%2Fitem%2FItem.kt;h=9b2c62de4794111b4edab8bb332af7a0a99f5809;hb=90daad1796cd59f11f12589686d9afe882ddb9b1;hp=a479a4f7280c2ad8d5fd936dd78546a01f13bf74;hpb=121928e90bdfa3a9d9c8bd708b9f8da28d3807c0;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 a479a4f..9b2c62d 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/model/item/Item.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/model/item/Item.kt @@ -2,6 +2,7 @@ package ru.deadsoftware.cavedroid.game.model.item import com.badlogic.gdx.graphics.g2d.Sprite import ru.deadsoftware.cavedroid.game.model.block.Block +import ru.deadsoftware.cavedroid.game.model.block.Block as BlockModel import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract @@ -19,35 +20,86 @@ sealed class Item { 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 } + fun isSlab(): Boolean { + contract { returns(true) implies (this@Item is Slab) } + return this is Slab + } + fun isTool(): Boolean { contract { returns(true) implies (this@Item is Tool) } return this is Tool } + fun isShears(): Boolean { + contract { returns(true) implies (this@Item is Shears) } + return this is Shears + } + fun isUsable(): Boolean { - contract { returns(true) implies (this@Item is Placeable) } - return this is Placeable + contract { returns(true) implies (this@Item is Usable) } + return this is Usable } - + + fun isFood(): Boolean { + contract { returns(true) implies (this@Item is Food) } + return this is Food + } + + @JvmOverloads + fun toInventoryItem(amount: Int = 1): InventoryItem { + return InventoryItem(this, amount) + } + + data class Normal( + override val params: CommonItemParams, + override val sprite: Sprite + ) : Item() + sealed class Tool : Item() { abstract val mobDamageMultiplier: Float abstract val blockDamageMultiplier: Float + abstract val level: Int } - sealed class Usable : Item() { - abstract val useActionKey: String + sealed class Placeable : Item() { + abstract val block: BlockModel + override val sprite: Sprite get() = block.sprite } - - data class Placeable( + + data class None( override val params: CommonItemParams, - val block: Block - ) : Item() { - override val sprite: Sprite get() = block.sprite + ): Item() { + override val sprite: Sprite + get() = throw IllegalAccessException("Trying to get sprite of None") + } + + data class Usable( + override val params: CommonItemParams, + override val sprite: Sprite, + val useActionKey: String + ) : Item() + + data class Block( + override val params: CommonItemParams, + override val block: BlockModel + ) : Placeable() + + data class Slab( + override val params: CommonItemParams, + val topPartBlock: BlockModel.Slab, + val bottomPartBlock: BlockModel.Slab + ) : Placeable() { + override val block get() = bottomPartBlock } data class Sword( @@ -55,6 +107,7 @@ sealed class Item { override val sprite: Sprite, override val mobDamageMultiplier: Float, override val blockDamageMultiplier: Float, + override val level: Int, ) : Tool() data class Shovel( @@ -62,12 +115,37 @@ sealed class Item { override val sprite: Sprite, override val mobDamageMultiplier: Float, override val blockDamageMultiplier: Float, + override val level: Int, ) : Tool() - - data class Bucket( + + data class Axe( + override val params: CommonItemParams, + override val sprite: Sprite, + override val mobDamageMultiplier: Float, + override val blockDamageMultiplier: Float, + override val level: Int, + ) : Tool() + + data class Pickaxe( + override val params: CommonItemParams, + override val sprite: Sprite, + override val mobDamageMultiplier: Float, + override val blockDamageMultiplier: Float, + override val level: Int, + ) : Tool() + + data class Shears( + override val params: CommonItemParams, + override val sprite: Sprite, + override val mobDamageMultiplier: Float, + override val blockDamageMultiplier: Float, + override val level: Int, + ) : Tool() + + data class Food( override val params: CommonItemParams, override val sprite: Sprite, - override val useActionKey: String - ) : Usable() + val heal: Int, + ) : Item() } \ No newline at end of file