Divergent/mods/Pretty Reanimated Pistols/gamedata/scripts/uni_anim_detectors.script

76 lines
2.4 KiB
Plaintext
Raw Permalink Normal View History

2024-03-17 20:18:03 -04:00
local common = animation_common
common.add_flag("QUICK_DETECTOR")
-- Compatibility for FDDA: Use '_quick' if an FDDA animation is about to play
playing_fdda_anim = false
if enhanced_animations then
fdda_anim_prepare = enhanced_animations.anim_prepare
function enhanced_animations.anim_prepare()
playing_fdda_anim = true
fdda_anim_prepare()
end
fdda_call_my_slot_back = enhanced_animations.call_my_slot_back
function enhanced_animations.call_my_slot_back()
local result = fdda_call_my_slot_back()
if result == true then
playing_fdda_anim = false
end
return result
end
fdda_bp_call_my_slot_back = zzz_ea_addon_backpack.call_my_slot_back
function zzz_ea_addon_backpack.call_my_slot_back()
local result = fdda_bp_call_my_slot_back()
if result == true then
playing_fdda_anim = false
end
return result
end
end
-- Animation: Append with '_quick' for detectors if:
-- - weapon in main hand is reloading or unjamming
-- - player is climbing
---@param anm_table any
---@param item game_object
local function anm_quick_detector(anm_table, item)
-- cancel if parent is not player
local parent = item:parent()
if not parent then return end
if parent:id() ~= AC_ID then return end
-- cancel if item is not detector
local player_detector = db.actor:active_detector()
if not player_detector then return end
if item:id() ~= player_detector:id() then return end
-- Add 'quick' if previous anim was also quick (intended for holster-draw pairs)
if common.get_flag("QUICK_DETECTOR") then
if string.find(anm_table.anm_name, "show") then
common.mutate_anim(anm_table, "_quick", item:section())
end
common.remove_flag("QUICK_DETECTOR")
return
end
local is_state_valid = {
[7] = true, -- reload
[8] = true, -- misfire
}
-- Add 'quick' suffix if above conditions are fulfilled
local player_wpn = db.actor:active_item()
if (
string.find(anm_table.anm_name, "hide")
and (
player_wpn and is_state_valid[player_wpn:get_state()]
or IsMoveState("mcClimb")
or playing_fdda_anim
)
) then
common.mutate_anim(anm_table, "_quick", item:section())
common.set_flag("QUICK_DETECTOR")
end
end
common.add_anim_mutator(anm_quick_detector, 5)