diff --git a/fcore/level/level-update.sml b/fcore/level/level-update.sml index d2300da..7bdbab4 100644 --- a/fcore/level/level-update.sml +++ b/fcore/level/level-update.sml @@ -17,31 +17,40 @@ struct val enemyTree = Enemy.generateTree enemies val player = Player.checkEnemyCollisions (player, enemies, enemyTree) - - val (player, enemies, fallingEnemies) = - PlayerAttack.attackEnemies (player, enemies, enemyTree, fallingEnemies) - - val projectiles = #projectiles player - val (fallingEnemies, enemies) = - PlayerAttack.projectileHitEnemy - (projectiles, enemies, enemyTree, fallingEnemies) - - val enemies = Enemy.update - (enemies, walls, wallTree, platforms, platformTree, player, graph) - - val fallingEnemies = FallingEnemies.update fallingEnemies - - val mode = - { player = player - , walls = walls - , wallTree = wallTree - , platforms = platforms - , platformTree = platformTree - , enemies = enemies - , graph = graph - , fallingEnemies = fallingEnemies - } in - {mode = GameType.LEVEL mode, userKeys = userKeys, saveKeys = false} + if #health player > 0 then + let + val (player, enemies, fallingEnemies) = + PlayerAttack.attackEnemies + (player, enemies, enemyTree, fallingEnemies) + + val projectiles = #projectiles player + val (fallingEnemies, enemies) = + PlayerAttack.projectileHitEnemy + (projectiles, enemies, enemyTree, fallingEnemies) + + val enemies = Enemy.update + (enemies, walls, wallTree, platforms, platformTree, player, graph) + + val fallingEnemies = FallingEnemies.update fallingEnemies + + val mode = + { player = player + , walls = walls + , wallTree = wallTree + , platforms = platforms + , platformTree = platformTree + , enemies = enemies + , graph = graph + , fallingEnemies = fallingEnemies + } + in + {mode = GameType.LEVEL mode, userKeys = userKeys, saveKeys = false} + end + else + { mode = GameType.TITLE (TitleType.initial) + , userKeys = userKeys + , saveKeys = false + } end end diff --git a/fcore/level/player/player.sml b/fcore/level/player/player.sml index 2acd8a3..022e0e4 100644 --- a/fcore/level/player/player.sml +++ b/fcore/level/player/player.sml @@ -309,18 +309,18 @@ struct val newRecoil = RECOIL_RIGHT 0 val newAttacked = ATTACKED 0 in - W_RECOIL newRecoil :: W_ATTACKED newAttacked - :: W_FACING FACING_LEFT :: W_Y_AXIS FALLING - :: W_X_AXIS STAY_STILL :: acc + W_HEALTH (#health player - 1) :: W_RECOIL newRecoil + :: W_ATTACKED newAttacked :: W_FACING FACING_LEFT + :: W_Y_AXIS FALLING :: W_X_AXIS STAY_STILL :: acc end else let val newRecoil = RECOIL_LEFT 0 val newAttacked = ATTACKED 0 in - W_RECOIL newRecoil :: W_ATTACKED newAttacked - :: W_FACING FACING_RIGHT :: W_Y_AXIS FALLING - :: W_X_AXIS STAY_STILL :: acc + W_HEALTH (#health player - 1) :: W_RECOIL newRecoil + :: W_ATTACKED newAttacked :: W_FACING FACING_RIGHT + :: W_Y_AXIS FALLING :: W_X_AXIS STAY_STILL :: acc end fun fold (enemyID, (enemies, player: player), patches) = @@ -353,15 +353,6 @@ struct end end) - structure AttackEnemies = - MakeQuadTreeFold - (struct - type env = unit - type state = defeated_enemies list - - fun fold (_, (), defeatedList) = {angle = 1} :: defeatedList - end) - fun runPhysicsAndInput (game: LevelType.level_type, input) = let val player = #player game