Divergent/mods/Tommy Gun Drop/gamedata/scripts/aol_sprint_cancel.script

50 lines
2.1 KiB
Plaintext
Raw Permalink Normal View History

2024-03-17 20:18:03 -04:00
-- The idea is to stop the walk2sprint animation if the player stops sprinting during the animation
-- Use my transition animations script as 'truth' for currently playing animation
-- Likely to break if multiple scripts are using actor_on_hud_animation_play, but should be good enough for transition animations specifically
local current_animation = ""
local stop_animation = false
-- Slightly cleaner string equivalence check that also checks for _empty counterparts
function isAnimationEqualTo(anim_name)
if current_animation == anim_name then
return true
elseif current_animation == anim_name .. "_empty" then
return true
end
return false
end
aol_anim_transitions_actor_on_hud_animation_play = aol_anim_transitions.actor_on_hud_animation_play
function aol_anim_transitions.actor_on_hud_animation_play(anm_table, item)
local prev_name = anm_table.anm_name
aol_anim_transitions_actor_on_hud_animation_play(anm_table, item)
-- Restore original animation (probably idle) if previous animation was cancelled
-- This should prevent sprint2walk from playing if its counterpart walk2sprint was cancelled
if stop_animation then
stop_animation = false
if (isAnimationEqualTo("anm_walk2sprint") or isAnimationEqualTo("anm_sprint2walk")) then
anm_table.anm_name = prev_name
end
end
current_animation = anm_table.anm_name
end
-- Detect if the player is not sprinting during the walk2sprint animation
-- Firebreath: added the elseif in because sometimes the player stops sprint animation
-- when interrupted by small obstacles like stairs
function actor_on_movement_changed(num)
if stop_animation then return end
if (not IsMoveState("mcSprint") and isAnimationEqualTo("anm_walk2sprint")) then
stop_animation = true
game.stop_hud_motion()
elseif (IsMoveState("mcSprint") and isAnimationEqualTo("anm_sprint2walk")) then
stop_animation = true
game.stop_hud_motion()
end
end
function on_game_start()
RegisterScriptCallback("actor_on_movement_changed",actor_on_movement_changed)
end