[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / actions / updateblock / UpdateRequiresBlockAction.kt
diff --git a/core/src/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateRequiresBlockAction.kt b/core/src/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateRequiresBlockAction.kt
index 2e273731dce10ed28357f045e8cfdb833be0d07c..53f56e3ff682181133244d3eb0f3098e782b4687 100644 (file)
package ru.deadsoftware.cavedroid.game.actions.updateblock
import ru.deadsoftware.cavedroid.game.GameScope
+import ru.deadsoftware.cavedroid.game.mobs.FallingBlock
+import ru.deadsoftware.cavedroid.game.mobs.MobsController
import ru.deadsoftware.cavedroid.game.world.GameWorld
+import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUpdateBlockAction
+import ru.deadsoftware.cavedroid.misc.utils.px
import javax.inject.Inject
@GameScope
+@BindUpdateBlockAction(stringKey = UpdateRequiresBlockAction.ACTION_KEY)
class UpdateRequiresBlockAction @Inject constructor(
private val gameWorld: GameWorld,
+ private val mobsController: MobsController,
) : IUpdateBlockAction {
override fun update(x: Int, y: Int) {
- if (!gameWorld.getForeMapBlock(x, y + 1).collision) {
- gameWorld.destroyForeMap(x, y)
+ if (gameWorld.getForeMap(x, y + 1).params.hasCollision.not()) {
+ val block = gameWorld.getForeMap(x, y)
+
+ if (block.params.isFallable) {
+ gameWorld.resetForeMap(x, y)
+ FallingBlock(block.params.key, x.px, y.px)
+ .attachToController(mobsController)
+ } else {
+ gameWorld.destroyForeMap(x, y)
+ }
}
}