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 enemyTree = Enemy.generateTree enemies
val player = Player.checkEnemyCollisions (player, enemies, enemyTree) val player = Player.checkEnemyCollisions (player, enemies, enemyTree)
val (player, enemies) = val (player, enemies, fallingEnemies) =
PlayerAttack.attackEnemies (player, enemies, enemyTree) PlayerAttack.attackEnemies (player, enemies, enemyTree, fallingEnemies)
val projectiles = #projectiles player val projectiles = #projectiles player
val (fallingEnemies, enemies) = val (fallingEnemies, enemies) =

View File

@@ -30,7 +30,22 @@ struct
| NONE => (defeatedList, enemyMap) | NONE => (defeatedList, enemyMap)
end) 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 let
open PlayerType open PlayerType
val {x, y, facing, mainAttack, ...} = player val {x, y, facing, mainAttack, ...} = player
@@ -48,15 +63,26 @@ struct
val (defeatedList, enemyMap) = PlayerAttackEnemy.foldRegion val (defeatedList, enemyMap) = PlayerAttackEnemy.foldRegion
(x, y, length, height, (), ([], enemyMap), enemyTree) (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.fromList defeatedList
val defeatedList = Vector.concat [defeatedList, #enemies player] val defeatedList = Vector.concat [defeatedList, #enemies player]
val player = val player =
PlayerPatch.withPatch (player, PlayerPatch.W_ENEMIES defeatedList) PlayerPatch.withPatch (player, PlayerPatch.W_ENEMIES defeatedList)
in in
(player, enemyMap) (player, enemyMap, fallingMap)
end end
| _ => (player, enemyMap) | _ => (player, enemyMap, fallingMap)
end end
(* - Handle collisions when player's projectile hits enemy - *) (* - Handle collisions when player's projectile hits enemy - *)