DEADSOFTWARE

Abstract falling block
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / actions / updateblock / UpdateRequiresBlockAction.kt
index 05d986357aa0086a67b24b19dcc0301133022c5d..53f56e3ff682181133244d3eb0f3098e782b4687 100644 (file)
@@ -1,19 +1,31 @@
 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.getForeMap(x, y + 1).params.hasCollision.not()) {
-            gameWorld.destroyForeMap(x, y)
+            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)
+            }
         }
     }