Finish animation transition feature

This commit is contained in:
ElCeejo 2023-02-20 00:04:55 -08:00
parent 74d2e07e59
commit 6cd34a727d

View file

@ -418,35 +418,41 @@ end
-- Set mobs animation (if specified animation isn't already playing) -- Set mobs animation (if specified animation isn't already playing)
function mob:animate(animation, transition) function mob:animate(animation, transition)
if not animation then return end if not animation
or not self.animations[animation] then
return
end
-- Handle Transition Data
local transition_data = self._anim_transition or {} local transition_data = self._anim_transition or {}
if transition_data.child then local parent_anim = transition_data.parent
local parent, child = transition_data.parent, transition_data.child local child_anim = transition_data.child
if child_anim
and animation == parent_anim
and transition == child_anim then
local timer = transition_data.timer local timer = transition_data.timer
if animation == parent transition_data.timer = (timer > 0 and timer - self.dtime) or 0
and transition == child then if timer <= 0 then
timer = (timer > 0 and timer - self.dtime) or 0 animation = child_anim
transition_data.timer = timer
if timer <= 0 then
animation = child
transition_data = {}
end
end end
else else
transition_data = {} transition_data = {}
end end
self._anim_transition = transition_data self._anim_transition = transition_data
if not self.animations[animation] then return end
-- Set Animation
if not self._anim if not self._anim
or self._anim ~= animation or self._anim ~= animation
or (transition or (transition
and not transition_data.child) then and not transition_data.timer) then
local anim = self.animations[animation] local anim = self.animations[animation]
if anim[2] then anim = anim[random(#anim)] end if anim[2] then anim = anim[random(#anim)] end
self.object:set_animation(anim.range, anim.speed, anim.frame_blend, anim.loop) self.object:set_animation(anim.range, anim.speed, anim.frame_blend, anim.loop)
self._anim = animation self._anim = animation
if transition then -- Set Transition Data
minetest.chat_send_all("text") if transition
and (not transition_data.timer
or transition_data.timer > 0) then
local anim_length = (anim.range.y - anim.range.x) / anim.speed local anim_length = (anim.range.y - anim.range.x) / anim.speed
self._anim_transition = { self._anim_transition = {
parent = animation, parent = animation,