Browse Source

Allow overriding the loop flag on `player_api.set_animation` (#3097)

Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
David Leal 3 months ago
parent
commit
222afb0cf0
1 changed files with 11 additions and 4 deletions
  1. 11 4
      mods/player_api/api.lua

+ 11 - 4
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({