DEADSOFTWARE

Fix saves
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / model / item / Item.kt
1 package ru.deadsoftware.cavedroid.game.model.item
3 import com.badlogic.gdx.graphics.g2d.Sprite
4 import ru.deadsoftware.cavedroid.game.model.block.Block
5 import kotlin.contracts.ExperimentalContracts
6 import kotlin.contracts.contract
8 @OptIn(ExperimentalContracts::class)
9 sealed class Item {
11 abstract val params: CommonItemParams
12 abstract val sprite: Sprite
14 override fun hashCode(): Int {
15 return params.key.hashCode()
16 }
18 override fun equals(other: Any?): Boolean {
19 return params.key == (other as Item).params.key
20 }
22 fun isPlaceable(): Boolean {
23 contract { returns(true) implies (this@Item is Placeable) }
24 return this is Placeable
25 }
27 fun isTool(): Boolean {
28 contract { returns(true) implies (this@Item is Tool) }
29 return this is Tool
30 }
32 fun isUsable(): Boolean {
33 contract { returns(true) implies (this@Item is Placeable) }
34 return this is Placeable
35 }
37 @JvmOverloads
38 fun toInventoryItem(amount: Int = 1): InventoryItem {
39 return InventoryItem(this, amount)
40 }
42 sealed class Tool : Item() {
43 abstract val mobDamageMultiplier: Float
44 abstract val blockDamageMultiplier: Float
45 }
47 sealed class Usable : Item() {
48 abstract val useActionKey: String
49 }
51 data class Placeable(
52 override val params: CommonItemParams,
53 val block: Block
54 ) : Item() {
55 override val sprite: Sprite get() = block.sprite
56 }
58 data class Sword(
59 override val params: CommonItemParams,
60 override val sprite: Sprite,
61 override val mobDamageMultiplier: Float,
62 override val blockDamageMultiplier: Float,
63 ) : Tool()
65 data class Shovel(
66 override val params: CommonItemParams,
67 override val sprite: Sprite,
68 override val mobDamageMultiplier: Float,
69 override val blockDamageMultiplier: Float,
70 ) : Tool()
72 data class Bucket(
73 override val params: CommonItemParams,
74 override val sprite: Sprite,
75 override val useActionKey: String
76 ) : Usable()
78 }