From 222afb0cf07d40ae55825865d614143ca8145e00 Mon Sep 17 00:00:00 2001 From: David Leal Date: Sun, 28 Jan 2024 04:41:12 -0600 Subject: [PATCH] Allow overriding the loop flag on `player_api.set_animation` (#3097) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com> --- mods/player_api/api.lua | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mods/player_api/api.lua b/mods/player_api/api.lua index f8ff598a..6a572f55 100644 --- a/mods/player_api/api.lua +++ b/mods/player_api/api.lua @@ -71,7 +71,7 @@ function player_api.set_model(player, model_name) player_data.model = model_name -- Clear animation data as the model has changed -- (required for setting the `stand` animation not to be a no-op) - player_data.animation, player_data.animation_speed = nil, nil + player_data.animation, player_data.animation_speed, player_data.animation_loop = nil, nil, nil local model = models[model_name] if model then @@ -116,20 +116,27 @@ function player_api.set_texture(player, index, texture) player_api.set_textures(player, textures) end -function player_api.set_animation(player, anim_name, speed) +function player_api.set_animation(player, anim_name, speed, loop) local player_data = get_player_data(player) local model = models[player_data.model] if not (model and model.animations[anim_name]) then return end speed = speed or model.animation_speed - if player_data.animation == anim_name and player_data.animation_speed == speed then + if loop == nil then + loop = true + end + if player_data.animation == anim_name + and player_data.animation_speed == speed + and player_data.animation_loop == loop + then return end local previous_anim = model.animations[player_data.animation] or {} local anim = model.animations[anim_name] player_data.animation = anim_name player_data.animation_speed = speed + player_data.animation_loop = loop -- If necessary change the local animation (only seen by the client of *that* player) -- `override_local` <=> suspend local animations while this one is active -- (this is basically a hack, proper engine feature needed...) @@ -146,7 +153,7 @@ function player_api.set_animation(player, anim_name, speed) end end -- Set the animation seen by everyone else - player:set_animation(anim, speed, animation_blend) + player:set_animation(anim, speed, animation_blend, loop) -- Update related properties if they changed if anim._equals ~= previous_anim._equals then player:set_properties({