Files
sml-projects/game-sml/fcore/level/level-update.sml
Humza Shahid da8790f0b6 Add 'game-sml/' from commit '113c3e67abe635f714f972a1e2ab0e4b24ff10f4'
git-subtree-dir: game-sml
git-subtree-mainline: aa5357714d
git-subtree-split: 113c3e67ab
2026-04-24 00:38:14 +01:00

56 lines
1.6 KiB
Standard ML

structure LevelUpdate =
struct
fun update (level, input, userKeys, time) =
let
val
{ player
, walls
, wallTree
, platforms
, platformTree
, enemies
, graph
, fallingEnemies
} = level
val player = Player.runPhysicsAndInput (level, input, time)
val enemyTree = Enemy.generateTree enemies
val player = Player.checkEnemyCollisions (player, enemies, enemyTree)
in
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, time)
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