mirror of
https://github.com/libretro/RetroArch
synced 2025-04-09 21:45:45 +00:00
(menu_animation) Avoid pushing dead animation subjects
This commit is contained in:
parent
4e2e97edaf
commit
e6a2c3102d
@ -310,6 +310,137 @@ bool menu_animation_push(
|
|||||||
enum menu_animation_easing_type easing_enum,
|
enum menu_animation_easing_type easing_enum,
|
||||||
tween_cb cb)
|
tween_cb cb)
|
||||||
{
|
{
|
||||||
|
struct tween t;
|
||||||
|
|
||||||
|
if (!subject)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
t.alive = 1;
|
||||||
|
t.duration = duration;
|
||||||
|
t.running_since = 0;
|
||||||
|
t.initial_value = *subject;
|
||||||
|
t.target_value = target_value;
|
||||||
|
t.subject = subject;
|
||||||
|
t.cb = cb;
|
||||||
|
|
||||||
|
switch (easing_enum)
|
||||||
|
{
|
||||||
|
case EASING_LINEAR:
|
||||||
|
t.easing = &easing_linear;
|
||||||
|
break;
|
||||||
|
/* Quad */
|
||||||
|
case EASING_IN_QUAD:
|
||||||
|
t.easing = &easing_in_quad;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_QUAD:
|
||||||
|
t.easing = &easing_out_quad;
|
||||||
|
break;
|
||||||
|
case EASING_IN_OUT_QUAD:
|
||||||
|
t.easing = &easing_in_out_quad;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_IN_QUAD:
|
||||||
|
t.easing = &easing_out_in_quad;
|
||||||
|
break;
|
||||||
|
/* Cubic */
|
||||||
|
case EASING_IN_CUBIC:
|
||||||
|
t.easing = &easing_in_cubic;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_CUBIC:
|
||||||
|
t.easing = &easing_out_cubic;
|
||||||
|
break;
|
||||||
|
case EASING_IN_OUT_CUBIC:
|
||||||
|
t.easing = &easing_in_out_cubic;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_IN_CUBIC:
|
||||||
|
t.easing = &easing_out_in_cubic;
|
||||||
|
break;
|
||||||
|
/* Quart */
|
||||||
|
case EASING_IN_QUART:
|
||||||
|
t.easing = &easing_in_quart;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_QUART:
|
||||||
|
t.easing = &easing_out_quart;
|
||||||
|
break;
|
||||||
|
case EASING_IN_OUT_QUART:
|
||||||
|
t.easing = &easing_in_out_quart;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_IN_QUART:
|
||||||
|
t.easing = &easing_out_in_quart;
|
||||||
|
break;
|
||||||
|
/* Quint */
|
||||||
|
case EASING_IN_QUINT:
|
||||||
|
t.easing = &easing_in_quint;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_QUINT:
|
||||||
|
t.easing = &easing_out_quint;
|
||||||
|
break;
|
||||||
|
case EASING_IN_OUT_QUINT:
|
||||||
|
t.easing = &easing_in_out_quint;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_IN_QUINT:
|
||||||
|
t.easing = &easing_out_in_quint;
|
||||||
|
break;
|
||||||
|
/* Sine */
|
||||||
|
case EASING_IN_SINE:
|
||||||
|
t.easing = &easing_in_sine;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_SINE:
|
||||||
|
t.easing = &easing_out_sine;
|
||||||
|
break;
|
||||||
|
case EASING_IN_OUT_SINE:
|
||||||
|
t.easing = &easing_in_out_sine;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_IN_SINE:
|
||||||
|
t.easing = &easing_out_in_sine;
|
||||||
|
break;
|
||||||
|
/* Expo */
|
||||||
|
case EASING_IN_EXPO:
|
||||||
|
t.easing = &easing_in_expo;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_EXPO:
|
||||||
|
t.easing = &easing_out_expo;
|
||||||
|
break;
|
||||||
|
case EASING_IN_OUT_EXPO:
|
||||||
|
t.easing = &easing_in_out_expo;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_IN_EXPO:
|
||||||
|
t.easing = &easing_out_in_expo;
|
||||||
|
break;
|
||||||
|
/* Circ */
|
||||||
|
case EASING_IN_CIRC:
|
||||||
|
t.easing = &easing_in_circ;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_CIRC:
|
||||||
|
t.easing = &easing_out_circ;
|
||||||
|
break;
|
||||||
|
case EASING_IN_OUT_CIRC:
|
||||||
|
t.easing = &easing_in_out_circ;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_IN_CIRC:
|
||||||
|
t.easing = &easing_out_in_circ;
|
||||||
|
break;
|
||||||
|
/* Bounce */
|
||||||
|
case EASING_IN_BOUNCE:
|
||||||
|
t.easing = &easing_in_bounce;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_BOUNCE:
|
||||||
|
t.easing = &easing_out_bounce;
|
||||||
|
break;
|
||||||
|
case EASING_IN_OUT_BOUNCE:
|
||||||
|
t.easing = &easing_in_out_bounce;
|
||||||
|
break;
|
||||||
|
case EASING_OUT_IN_BOUNCE:
|
||||||
|
t.easing = &easing_out_in_bounce;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
t.easing = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ignore born dead tweens */
|
||||||
|
if (!t.easing || t.duration == 0 || t.initial_value == t.target_value)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (anim->size >= anim->capacity)
|
if (anim->size >= anim->capacity)
|
||||||
{
|
{
|
||||||
anim->capacity++;
|
anim->capacity++;
|
||||||
@ -317,129 +448,7 @@ bool menu_animation_push(
|
|||||||
anim->capacity * sizeof(struct tween));
|
anim->capacity * sizeof(struct tween));
|
||||||
}
|
}
|
||||||
|
|
||||||
anim->list[anim->size].alive = 1;
|
anim->list[anim->size++] = t;
|
||||||
anim->list[anim->size].duration = duration;
|
|
||||||
anim->list[anim->size].running_since = 0;
|
|
||||||
anim->list[anim->size].initial_value = *subject;
|
|
||||||
anim->list[anim->size].target_value = target_value;
|
|
||||||
anim->list[anim->size].subject = subject;
|
|
||||||
anim->list[anim->size].cb = cb;
|
|
||||||
|
|
||||||
switch (easing_enum)
|
|
||||||
{
|
|
||||||
case EASING_LINEAR:
|
|
||||||
anim->list[anim->size].easing = &easing_linear;
|
|
||||||
break;
|
|
||||||
/* Quad */
|
|
||||||
case EASING_IN_QUAD:
|
|
||||||
anim->list[anim->size].easing = &easing_in_quad;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_QUAD:
|
|
||||||
anim->list[anim->size].easing = &easing_out_quad;
|
|
||||||
break;
|
|
||||||
case EASING_IN_OUT_QUAD:
|
|
||||||
anim->list[anim->size].easing = &easing_in_out_quad;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_IN_QUAD:
|
|
||||||
anim->list[anim->size].easing = &easing_out_in_quad;
|
|
||||||
break;
|
|
||||||
/* Cubic */
|
|
||||||
case EASING_IN_CUBIC:
|
|
||||||
anim->list[anim->size].easing = &easing_in_cubic;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_CUBIC:
|
|
||||||
anim->list[anim->size].easing = &easing_out_cubic;
|
|
||||||
break;
|
|
||||||
case EASING_IN_OUT_CUBIC:
|
|
||||||
anim->list[anim->size].easing = &easing_in_out_cubic;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_IN_CUBIC:
|
|
||||||
anim->list[anim->size].easing = &easing_out_in_cubic;
|
|
||||||
break;
|
|
||||||
/* Quart */
|
|
||||||
case EASING_IN_QUART:
|
|
||||||
anim->list[anim->size].easing = &easing_in_quart;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_QUART:
|
|
||||||
anim->list[anim->size].easing = &easing_out_quart;
|
|
||||||
break;
|
|
||||||
case EASING_IN_OUT_QUART:
|
|
||||||
anim->list[anim->size].easing = &easing_in_out_quart;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_IN_QUART:
|
|
||||||
anim->list[anim->size].easing = &easing_out_in_quart;
|
|
||||||
break;
|
|
||||||
/* Quint */
|
|
||||||
case EASING_IN_QUINT:
|
|
||||||
anim->list[anim->size].easing = &easing_in_quint;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_QUINT:
|
|
||||||
anim->list[anim->size].easing = &easing_out_quint;
|
|
||||||
break;
|
|
||||||
case EASING_IN_OUT_QUINT:
|
|
||||||
anim->list[anim->size].easing = &easing_in_out_quint;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_IN_QUINT:
|
|
||||||
anim->list[anim->size].easing = &easing_out_in_quint;
|
|
||||||
break;
|
|
||||||
/* Sine */
|
|
||||||
case EASING_IN_SINE:
|
|
||||||
anim->list[anim->size].easing = &easing_in_sine;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_SINE:
|
|
||||||
anim->list[anim->size].easing = &easing_out_sine;
|
|
||||||
break;
|
|
||||||
case EASING_IN_OUT_SINE:
|
|
||||||
anim->list[anim->size].easing = &easing_in_out_sine;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_IN_SINE:
|
|
||||||
anim->list[anim->size].easing = &easing_out_in_sine;
|
|
||||||
break;
|
|
||||||
/* Expo */
|
|
||||||
case EASING_IN_EXPO:
|
|
||||||
anim->list[anim->size].easing = &easing_in_expo;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_EXPO:
|
|
||||||
anim->list[anim->size].easing = &easing_out_expo;
|
|
||||||
break;
|
|
||||||
case EASING_IN_OUT_EXPO:
|
|
||||||
anim->list[anim->size].easing = &easing_in_out_expo;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_IN_EXPO:
|
|
||||||
anim->list[anim->size].easing = &easing_out_in_expo;
|
|
||||||
break;
|
|
||||||
/* Circ */
|
|
||||||
case EASING_IN_CIRC:
|
|
||||||
anim->list[anim->size].easing = &easing_in_circ;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_CIRC:
|
|
||||||
anim->list[anim->size].easing = &easing_out_circ;
|
|
||||||
break;
|
|
||||||
case EASING_IN_OUT_CIRC:
|
|
||||||
anim->list[anim->size].easing = &easing_in_out_circ;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_IN_CIRC:
|
|
||||||
anim->list[anim->size].easing = &easing_out_in_circ;
|
|
||||||
break;
|
|
||||||
/* Bounce */
|
|
||||||
case EASING_IN_BOUNCE:
|
|
||||||
anim->list[anim->size].easing = &easing_in_bounce;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_BOUNCE:
|
|
||||||
anim->list[anim->size].easing = &easing_out_bounce;
|
|
||||||
break;
|
|
||||||
case EASING_IN_OUT_BOUNCE:
|
|
||||||
anim->list[anim->size].easing = &easing_in_out_bounce;
|
|
||||||
break;
|
|
||||||
case EASING_OUT_IN_BOUNCE:
|
|
||||||
anim->list[anim->size].easing = &easing_out_in_bounce;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
anim->list[anim->size].easing = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
anim->size++;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user