add enemy to falling list when they are defeated
This commit is contained in:
@@ -5,35 +5,40 @@ struct
|
|||||||
MakeQuadTreeFold
|
MakeQuadTreeFold
|
||||||
(struct
|
(struct
|
||||||
type env = unit
|
type env = unit
|
||||||
type state = PlayerType.defeated_enemies list * EnemyMap.t
|
type state = FallingEnemyMap.t * EnemyMap.t
|
||||||
|
|
||||||
open EnemyType
|
open EnemyType
|
||||||
|
|
||||||
fun defeatEnemy (enemyID, enemyMap, defeatedList) =
|
fun defeatEnemy (enemyID, enemyMap, fallingMap) =
|
||||||
let
|
case EnemyMap.get (enemyID, enemyMap) of
|
||||||
val defeatedList = {angle = 1} :: defeatedList
|
SOME (enemy: EnemyType.enemy) =>
|
||||||
val enemyMap = EnemyMap.remove (enemyID, enemyMap)
|
let
|
||||||
in
|
val {x, y, variant, ...} = enemy
|
||||||
(defeatedList, enemyMap)
|
val fallenEnemy = {x = x, y = y, variant = variant}
|
||||||
end
|
val fallingMap = FallingEnemyMap.add (enemyID, fallenEnemy, fallingMap)
|
||||||
|
val enemyMap = EnemyMap.remove (enemyID, enemyMap)
|
||||||
|
in
|
||||||
|
(fallingMap, enemyMap)
|
||||||
|
end
|
||||||
|
| NONE => (fallingMap, enemyMap)
|
||||||
|
|
||||||
fun shieldSlimeAttacked (enemyID, enemy, enemyMap, defeatedList) =
|
fun shieldSlimeAttacked (enemyID, enemy, enemyMap, fallingMap) =
|
||||||
if #shieldOn enemy then (defeatedList, enemyMap)
|
if #shieldOn enemy then (fallingMap, enemyMap)
|
||||||
else defeatEnemy (enemyID, enemyMap, defeatedList)
|
else defeatEnemy (enemyID, enemyMap, fallingMap)
|
||||||
|
|
||||||
fun onPlayerAttack (enemyID, enemy, enemyMap, defeatedList) =
|
fun onPlayerAttack (enemyID, enemy, enemyMap, fallingMap) =
|
||||||
case #variant enemy of
|
case #variant enemy of
|
||||||
PATROL_SLIME => defeatEnemy (enemyID, enemyMap, defeatedList)
|
PATROL_SLIME => defeatEnemy (enemyID, enemyMap, fallingMap)
|
||||||
| FOLLOW_SLIME => defeatEnemy (enemyID, enemyMap, defeatedList)
|
| FOLLOW_SLIME => defeatEnemy (enemyID, enemyMap, fallingMap)
|
||||||
| STRAIGHT_BAT => defeatEnemy (enemyID, enemyMap, defeatedList)
|
| STRAIGHT_BAT => defeatEnemy (enemyID, enemyMap, fallingMap)
|
||||||
| SHIELD_SLIME =>
|
| SHIELD_SLIME =>
|
||||||
shieldSlimeAttacked (enemyID, enemy, enemyMap, defeatedList)
|
shieldSlimeAttacked (enemyID, enemy, enemyMap, fallingMap)
|
||||||
|
|
||||||
fun fold (enemyID, (), (defeatedList, enemyMap)) =
|
fun fold (enemyID, (), (fallingMap, enemyMap)) =
|
||||||
case EnemyMap.get (enemyID, enemyMap) of
|
case EnemyMap.get (enemyID, enemyMap) of
|
||||||
SOME enemy =>
|
SOME enemy =>
|
||||||
onPlayerAttack (enemyID, enemy, enemyMap, defeatedList)
|
onPlayerAttack (enemyID, enemy, enemyMap, fallingMap)
|
||||||
| NONE => (defeatedList, enemyMap)
|
| NONE => (fallingMap, enemyMap)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
structure PlayerAttackFalling =
|
structure PlayerAttackFalling =
|
||||||
@@ -57,9 +62,6 @@ struct
|
|||||||
val width = Constants.projectileWidth
|
val width = Constants.projectileWidth
|
||||||
val height = Constants.projectileHeight
|
val height = Constants.projectileHeight
|
||||||
|
|
||||||
val (defeatedList, enemyMap) = PlayerAttackEnemy.foldRegion
|
|
||||||
(projectileX, projectileY, width, height, (), ([], enemyMap), enemyTree)
|
|
||||||
|
|
||||||
val fallingTree = FallingEnemies.generateTree fallingMap
|
val fallingTree = FallingEnemies.generateTree fallingMap
|
||||||
val (defeatedList, fallingMap) = PlayerAttackFalling.foldRegion
|
val (defeatedList, fallingMap) = PlayerAttackFalling.foldRegion
|
||||||
( projectileX
|
( projectileX
|
||||||
@@ -67,11 +69,15 @@ struct
|
|||||||
, width
|
, width
|
||||||
, height
|
, height
|
||||||
, ()
|
, ()
|
||||||
, (defeatedList, fallingMap)
|
, ([], fallingMap)
|
||||||
, fallingTree
|
, fallingTree
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val (fallingMap, enemyMap) = PlayerAttackEnemy.foldRegion
|
||||||
|
(projectileX, projectileY, width, height, (), (fallingMap, enemyMap), enemyTree)
|
||||||
|
|
||||||
val defeatedList = Vector.fromList defeatedList
|
val defeatedList = Vector.fromList defeatedList
|
||||||
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user