add functionality for falling enemies to turn into player projectiles when attacked

This commit is contained in:
2025-02-15 02:02:48 +00:00
parent b8934e3add
commit 219b37053b
2 changed files with 31 additions and 5 deletions

View File

@@ -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) =

View File

@@ -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 - *)