DEADSOFTWARE

MainComponent in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / model / item / Item.kt
index b56f068892af48aebac980418468edc02d51196d..9b2c62de4794111b4edab8bb332af7a0a99f5809 100644 (file)
@@ -35,29 +35,40 @@ sealed class Item {
         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
-    }
-
-    sealed class Usable : Item() {
-        abstract val useActionKey: String
+        abstract val level: Int
     }
 
     sealed class Placeable : Item() {
@@ -72,6 +83,12 @@ sealed class Item {
             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
@@ -90,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(
@@ -97,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