DEADSOFTWARE

New saving fromat and rewrite in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / mobs / Pig.kt
index 4f9d5fcef6caa2d48dd59cb8cdb291696a8c55f8..b080e4078730713b897e8a45f1e1ba3655b81239 100644 (file)
@@ -1,9 +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.world.GameWorld
+import ru.deadsoftware.cavedroid.game.GameItemsHolder
+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
@@ -12,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
@@ -26,17 +27,21 @@ class Pig(x: Float, y: Float) : Mob(x, y, WIDTH, HEIGHT, randomDir(), Type.MOB,
     override fun jump() {
         velocity.y = JUMP_VELOCITY
     }
-    
-    override fun ai(world: GameWorld, delta: Float) {
-        if (MathUtils.randomBoolean(delta)) {
-            if (velocity.x != 0f) {
-                velocity.x = 0f
-            } else {
-                changeDir()
+
+    override fun damage(damage: Int) {
+        super.damage(damage)
+
+        if (damage > 0) {
+            if (canJump()) {
+                jump()
             }
         }
     }
 
+    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) {
         updateAnimation(delta)
 
@@ -44,19 +49,58 @@ class Pig(x: Float, y: Float) : Mob(x, y, WIDTH, HEIGHT, randomDir(), Type.MOB,
         val rightLegX = x + getRightLegRelativeX(direction)
         val legY = y + getLegsRelativeY()
 
-        spriteBatch.drawSprite(getBackgroundLeg(), leftLegX, legY, -anim)
-        spriteBatch.drawSprite(getBackgroundLeg(), rightLegX, legY, -anim)
-        spriteBatch.drawSprite(getBody(direction), x, y)
-        spriteBatch.drawSprite(getForegroundLeg(), leftLegX, legY, anim)
-        spriteBatch.drawSprite(getForegroundLeg(), rightLegX, legY, anim)
+        spriteBatch.drawSprite(getBackgroundLeg(), leftLegX, legY, -anim, tint = tintColor)
+        spriteBatch.drawSprite(getBackgroundLeg(), rightLegX, legY, -anim, tint = tintColor)
+        spriteBatch.drawSprite(getBody(direction), x, y, tint = tintColor)
+        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 =  69.072f
+        private const val SPEED =  48f
         private const val JUMP_VELOCITY = -133.332f
-        private const val MAX_HEALTH = 10;
+        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