diff --git a/fcore/game-update.sml b/fcore/game-update.sml index 8a5a7dc..3863b9d 100644 --- a/fcore/game-update.sml +++ b/fcore/game-update.sml @@ -18,8 +18,8 @@ struct val enemyTree = Enemy.generateTree enemies val player = Player.checkEnemyCollisions (player, enemies, enemyTree) - val (player, enemies) = - PlayerAttack.attackEnemies (player, enemies, enemyTree) + val (player, enemies, fallingEnemies) = + PlayerAttack.attackEnemies (player, enemies, enemyTree, fallingEnemies) val projectiles = #projectiles player val (fallingEnemies, enemies) = diff --git a/fcore/player/player-attack.sml b/fcore/player/player-attack.sml index 9517e00..73b0008 100644 --- a/fcore/player/player-attack.sml +++ b/fcore/player/player-attack.sml @@ -30,7 +30,22 @@ struct | NONE => (defeatedList, enemyMap) end) - fun attackEnemies (player: PlayerType.player, enemyMap, enemyTree) = + structure PlayerAttackFalling = + MakeQuadTreeFold + (struct + type env = unit + type state = PlayerType.defeated_enemies list * FallingEnemyMap.t + + fun fold (fallingID, (), (defeatedList, fallingMap)) = + let + val defeatedList = {angle = 1} :: defeatedList + val fallingMap = FallingEnemyMap.remove (fallingID, fallingMap) + in + (defeatedList, fallingMap) + end + end) + + fun attackEnemies (player: PlayerType.player, enemyMap, enemyTree, fallingMap) = let open PlayerType val {x, y, facing, mainAttack, ...} = player @@ -48,15 +63,26 @@ struct val (defeatedList, enemyMap) = PlayerAttackEnemy.foldRegion (x, y, length, height, (), ([], enemyMap), enemyTree) + val fallingTree = FallingEnemies.generateTree fallingMap + val (defeatedList, fallingMap) = PlayerAttackFalling.foldRegion + ( x + , y + , length + , height + , () + , (defeatedList, fallingMap) + , fallingTree + ) + val defeatedList = Vector.fromList defeatedList val defeatedList = Vector.concat [defeatedList, #enemies player] val player = PlayerPatch.withPatch (player, PlayerPatch.W_ENEMIES defeatedList) in - (player, enemyMap) + (player, enemyMap, fallingMap) end - | _ => (player, enemyMap) + | _ => (player, enemyMap, fallingMap) end (* - Handle collisions when player's projectile hits enemy - *)