Skip to content

Commit

Permalink
Allow overriding the loop flag on player_api.set_animation (#3097)
Browse files Browse the repository at this point in the history
Co-authored-by: Lars Müller <[email protected]>
  • Loading branch information
Panquesito7 and appgurueu authored Jan 28, 2024
1 parent 472997b commit 222afb0
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions mods/player_api/api.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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...)
Expand All @@ -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({
Expand Down

0 comments on commit 222afb0

Please sign in to comment.