add functionality for falling enemies to turn into player projectiles when attacked
This commit is contained in:
@@ -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) =
|
||||||
|
|||||||
@@ -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 - *)
|
||||||
|
|||||||
Reference in New Issue
Block a user