DEADSOFTWARE

New saving fromat and rewrite in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / mobs / FallingBlock.kt
1 package ru.deadsoftware.cavedroid.game.mobs
3 import com.badlogic.gdx.graphics.g2d.SpriteBatch
4 import ru.deadsoftware.cavedroid.game.GameItemsHolder
5 import ru.deadsoftware.cavedroid.game.model.block.Block
6 import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
7 import ru.deadsoftware.cavedroid.game.world.GameWorld
8 import ru.deadsoftware.cavedroid.misc.utils.bl
9 import ru.deadsoftware.cavedroid.misc.utils.px
11 class FallingBlock(
12 private val blockKey: String,
13 x: Float,
14 y: Float,
15 ) : Mob(x, y, 1.px, 1.px, Direction.RIGHT, Type.FALLING_BLOCK, Int.MAX_VALUE) {
17 @Transient
18 private var _block: Block? = null
20 init {
21 velocity.y = 1f
22 }
24 override fun changeDir() = Unit
26 override fun getSpeed() = 0f
28 override fun jump() = Unit
30 override fun ai(
31 gameWorld: GameWorld,
32 gameItemsHolder: GameItemsHolder,
33 mobsController: MobsController,
34 delta: Float
35 ) {
36 if (_block == null) {
37 _block = gameItemsHolder.getBlock(blockKey)
38 }
40 if (velocity.isZero) {
41 gameWorld.setForeMap(x.bl, y.bl, _block)
42 kill()
43 }
44 }
46 override fun draw(
47 spriteBatch: SpriteBatch,
48 x: Float,
49 y: Float,
50 delta: Float
51 ) {
52 _block?.draw(spriteBatch, x, y)
53 }
55 override fun getSaveData(): SaveDataDto.FallingBlockSaveData {
56 return SaveDataDto.FallingBlockSaveData(
57 version = SAVE_DATA_VERSION,
58 x = x,
59 y = y,
60 width = width,
61 height = height,
62 velocityX = velocity.x,
63 velocityY = velocity.y,
64 type = mType,
65 animDelta = mAnimDelta,
66 anim = mAnim,
67 direction = mDirection,
68 dead = mDead,
69 canJump = mCanJump,
70 flyMode = mFlyMode,
71 maxHealth = mMaxHealth,
72 health = mHealth,
73 blockKey = blockKey,
74 )
75 }
77 companion object {
78 private const val SAVE_DATA_VERSION = 1
80 fun fromSaveData(saveData: SaveDataDto.FallingBlockSaveData): FallingBlock {
81 saveData.verifyVersion(SAVE_DATA_VERSION)
83 return FallingBlock(saveData.blockKey, saveData.x, saveData.y).apply {
84 velocity.x = saveData.velocityX
85 velocity.y = saveData.velocityY
86 mAnimDelta = saveData.animDelta
87 mAnim = saveData.anim
88 mDirection = saveData.direction
89 mDead = saveData.dead
90 mCanJump = saveData.canJump
91 mFlyMode = saveData.flyMode
92 mMaxHealth = saveData.maxHealth
93 mHealth = saveData.health
94 }
95 }
96 }
97 }