DEADSOFTWARE

MainComponent in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / mobs / Pig.kt
index 68c457ee05887ee81521ac93bffe0740e8e84688..b080e4078730713b897e8a45f1e1ba3655b81239 100644 (file)
@@ -1,10 +1,10 @@
 package ru.deadsoftware.cavedroid.game.mobs
 
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
-import com.badlogic.gdx.math.MathUtils
 import com.badlogic.gdx.math.Vector2
 import ru.deadsoftware.cavedroid.game.GameItemsHolder
-import ru.deadsoftware.cavedroid.game.world.GameWorld
+import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
+import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
 import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getBackgroundLeg
 import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getBody
@@ -13,7 +13,7 @@ import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getLeftLegRelati
 import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getLegsRelativeY
 import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getRightLegRelativeX
 
-class Pig(x: Float, y: Float) : Mob(x, y, WIDTH, HEIGHT, randomDir(), Type.MOB, MAX_HEALTH) {
+class Pig(x: Float, y: Float) : PeacefulMob(x, y, WIDTH, HEIGHT, randomDir(), MAX_HEALTH) {
 
     override fun getSpeed(): Float {
         return SPEED
@@ -38,14 +38,8 @@ class Pig(x: Float, y: Float) : Mob(x, y, WIDTH, HEIGHT, randomDir(), Type.MOB,
         }
     }
 
-    override fun ai(world: GameWorld, gameItemsHolder: GameItemsHolder, mobsController: MobsController, delta: Float) {
-        if (MathUtils.randomBoolean(delta)) {
-            if (velocity.x != 0f) {
-                velocity.x = 0f
-            } else {
-                changeDir()
-            }
-        }
+    override fun getDrop(gameItemsHolder: GameItemsHolder): List<InventoryItem> {
+        return listOf(gameItemsHolder.getItem("porkchop_raw").toInventoryItem())
     }
 
     override fun draw(spriteBatch: SpriteBatch, x: Float, y: Float, delta: Float) {
@@ -61,13 +55,52 @@ class Pig(x: Float, y: Float) : Mob(x, y, WIDTH, HEIGHT, randomDir(), Type.MOB,
         spriteBatch.drawSprite(getForegroundLeg(), leftLegX, legY, anim, tint = tintColor)
         spriteBatch.drawSprite(getForegroundLeg(), rightLegX, legY, anim, tint = tintColor)
     }
+
+    override fun getSaveData(): SaveDataDto.PigSaveData {
+        return SaveDataDto.PigSaveData(
+            version = SAVE_DATA_VERSION,
+            x = x,
+            y = y,
+            width = width,
+            height = height,
+            velocityX = velocity.x,
+            velocityY = velocity.y,
+            type = mType,
+            animDelta = mAnimDelta,
+            anim = mAnim,
+            direction = mDirection,
+            dead = mDead,
+            canJump = mCanJump,
+            flyMode = mFlyMode,
+            maxHealth = mMaxHealth,
+            health = mHealth
+        )
+    }
     
-    
-    private companion object {
+    companion object {
+        private const val SAVE_DATA_VERSION = 1
+
         private const val WIDTH = 25f
         private const val HEIGHT = 18f
         private const val SPEED =  48f
         private const val JUMP_VELOCITY = -133.332f
         private const val MAX_HEALTH = 10
+
+        fun fromSaveData(saveData: SaveDataDto.PigSaveData): Pig {
+            saveData.verifyVersion(SAVE_DATA_VERSION)
+
+            return Pig(saveData.x, saveData.y).apply {
+                velocity.x = saveData.velocityX
+                velocity.y = saveData.velocityY
+                mAnimDelta = saveData.animDelta
+                mAnim = saveData.anim
+                mDirection = saveData.direction
+                mDead = saveData.dead
+                mCanJump = saveData.canJump
+                mFlyMode = saveData.flyMode
+                mMaxHealth = saveData.maxHealth
+                mHealth = saveData.health
+            }
+        }
     }
 }
\ No newline at end of file