DEADSOFTWARE

Add food
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / model / item / Item.kt
index fe2bc46bad46030cd43eb0a74f284fa4bd8f4629..9b2c62de4794111b4edab8bb332af7a0a99f5809 100644 (file)
@@ -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,40 +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(
@@ -60,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(
@@ -67,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