From 1f726539daa22d097dcce18ddb8bf94dc9b44127 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 29 Aug 2025 12:46:41 +0100 Subject: [PATCH] record pressedTime when player is performing mainAttack --- fcore/level/level-update.sml | 2 +- fcore/level/player/player-type.sml | 2 +- fcore/level/player/player-vec.sml | 2 +- fcore/level/player/player.sml | 25 +++++++++++++++---------- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/fcore/level/level-update.sml b/fcore/level/level-update.sml index 7bdbab4..524292e 100644 --- a/fcore/level/level-update.sml +++ b/fcore/level/level-update.sml @@ -13,7 +13,7 @@ struct , fallingEnemies } = level - val player = Player.runPhysicsAndInput (level, input) + val player = Player.runPhysicsAndInput (level, input, time) val enemyTree = Enemy.generateTree enemies val player = Player.checkEnemyCollisions (player, enemies, enemyTree) diff --git a/fcore/level/player/player-type.sml b/fcore/level/player/player-type.sml index bc059b8..734e503 100644 --- a/fcore/level/player/player-type.sml +++ b/fcore/level/player/player-type.sml @@ -6,7 +6,7 @@ struct datatype main_attack = MAIN_NOT_ATTACKING - | MAIN_ATTACKING of int + | MAIN_ATTACKING of {animTimer: int, timePressed: Time.time} | MAIN_THROWING type defeated_enemies = {angle: int} diff --git a/fcore/level/player/player-vec.sml b/fcore/level/player/player-vec.sml index 860cb76..ad06052 100644 --- a/fcore/level/player/player-vec.sml +++ b/fcore/level/player/player-vec.sml @@ -148,7 +148,7 @@ struct fun helpGet (player: player, x, y, xOffset, yOffset, ratio, rx, ry, windowWidth, windowHeight) = case #mainAttack player of - MAIN_ATTACKING amt => + MAIN_ATTACKING {animTimer = amt, ...} => (case #facing player of FACING_RIGHT => let diff --git a/fcore/level/player/player.sml b/fcore/level/player/player.sml index 3a4249c..c37a259 100644 --- a/fcore/level/player/player.sml +++ b/fcore/level/player/player.sml @@ -91,11 +91,13 @@ struct end (* called only when player has no projectiles or was not previously attacking *) - fun helpGetMainAttackPatches (attackHeld, mainAttackPressed, charge, acc) = + fun helpGetMainAttackPatches (attackHeld, mainAttackPressed, charge, acc, time) = let val attack = - if attackHeld andalso not mainAttackPressed then MAIN_ATTACKING 0 - else MAIN_NOT_ATTACKING + if attackHeld andalso not mainAttackPressed then + MAIN_ATTACKING {animTimer = 0, timePressed = time} + else + MAIN_NOT_ATTACKING in W_MAIN_ATTACK_PRESSED (attackHeld andalso mainAttackPressed) :: W_MAIN_ATTACK attack :: acc @@ -153,6 +155,7 @@ struct , player , acc , mainAttackPressed + , time ) = case prevAttack of MAIN_NOT_ATTACKING => @@ -164,15 +167,16 @@ struct * and there is more than one enemy *) getThrowPatches (defeteadEnemies, projectiles, player, acc) else - helpGetMainAttackPatches (attackHeld, mainAttackPressed, charge, acc) - | MAIN_ATTACKING amt => + helpGetMainAttackPatches (attackHeld, mainAttackPressed, charge, acc, time) + | MAIN_ATTACKING {animTimer = amt, timePressed} => let val acc = if amt = Constants.mainAttackLimit then W_MAIN_ATTACK MAIN_NOT_ATTACKING :: acc else let val amt = amt + 1 - in W_MAIN_ATTACK (MAIN_ATTACKING amt) :: acc + val attack = MAIN_ATTACKING {animTimer = amt, timePressed = timePressed} + in W_MAIN_ATTACK attack :: acc end in W_MAIN_ATTACK_PRESSED true :: acc @@ -181,9 +185,9 @@ struct if attackHeld then acc else - helpGetMainAttackPatches (attackHeld, mainAttackPressed, charge, acc) + helpGetMainAttackPatches (attackHeld, mainAttackPressed, charge, acc, time) - fun getInputPatches (player: player, input: FrameInputType.t, wallTree) = + fun getInputPatches (player: player, input: FrameInputType.t, wallTree, time) = let val { x @@ -218,6 +222,7 @@ struct , player , acc , mainAttackPressed + , time ) val acc = getJumpPatches (player, jumpHeld, downHeld, acc, wallTree) @@ -361,7 +366,7 @@ struct end end) - fun runPhysicsAndInput (game: LevelType.level_type, input) = + fun runPhysicsAndInput (game: LevelType.level_type, input, time) = let val {player, walls, wallTree, platforms, platformTree, ...} = game @@ -378,7 +383,7 @@ struct * It's important to apply the recoil patches after handling input * because we want to act on the latest recoil state straight away. *) case #recoil player of - NO_RECOIL => getInputPatches (player, input, wallTree) + NO_RECOIL => getInputPatches (player, input, wallTree, time) | _ => [] val patches =