X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmobs%2FPig.kt;h=b080e4078730713b897e8a45f1e1ba3655b81239;hb=76a3b56287b1262f78f3b43a4aac5660338d67ad;hp=b55f42934be9f2d8d100d72d7068aa6e055c2951;hpb=1c004c0ce7e183e773b5b486295c25e39732e899;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/mobs/Pig.kt b/core/src/ru/deadsoftware/cavedroid/game/mobs/Pig.kt index b55f429..b080e40 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/mobs/Pig.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/mobs/Pig.kt @@ -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 @@ -27,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, gameItemsHolder: GameItemsHolder, 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 { + return listOf(gameItemsHolder.getItem("porkchop_raw").toInventoryItem()) + } + override fun draw(spriteBatch: SpriteBatch, x: Float, y: Float, delta: Float) { updateAnimation(delta) @@ -45,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