Create MENU_ANIMATION_CTL_IDEAL_DELTA_TIME_GET

This commit is contained in:
twinaphex 2016-02-25 16:05:30 +01:00
parent c32e828c6f
commit 1d84894e09
5 changed files with 40 additions and 13 deletions

View File

@ -432,7 +432,8 @@ end:
static void mui_render(void *data) static void mui_render(void *data)
{ {
size_t i = 0; size_t i = 0;
float delta_time, dt; menu_animation_ctx_delta_t delta;
float delta_time;
unsigned bottom, width, height, header_height; unsigned bottom, width, height, header_height;
mui_handle_t *mui = (mui_handle_t*)data; mui_handle_t *mui = (mui_handle_t*)data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
@ -443,8 +444,11 @@ static void mui_render(void *data)
video_driver_get_size(&width, &height); video_driver_get_size(&width, &height);
menu_animation_ctl(MENU_ANIMATION_CTL_DELTA_TIME, &delta_time); menu_animation_ctl(MENU_ANIMATION_CTL_DELTA_TIME, &delta_time);
dt = delta_time / IDEAL_DT;
menu_animation_ctl(MENU_ANIMATION_CTL_UPDATE, &dt); delta.current = delta_time;
if (menu_animation_ctl(MENU_ANIMATION_CTL_IDEAL_DELTA_TIME_GET, &delta))
menu_animation_ctl(MENU_ANIMATION_CTL_UPDATE, &delta.ideal);
menu_display_ctl(MENU_DISPLAY_CTL_SET_WIDTH, &width); menu_display_ctl(MENU_DISPLAY_CTL_SET_WIDTH, &width);
menu_display_ctl(MENU_DISPLAY_CTL_SET_HEIGHT, &height); menu_display_ctl(MENU_DISPLAY_CTL_SET_HEIGHT, &height);

View File

@ -1743,9 +1743,10 @@ static void xmb_draw_cursor(xmb_handle_t *xmb,
static void xmb_render(void *data) static void xmb_render(void *data)
{ {
float delta_time, dt; float delta_time;
size_t i, selection; size_t i, selection;
unsigned end, height = 0; menu_animation_ctx_delta_t delta;
unsigned end, height = 0;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
xmb_handle_t *xmb = (xmb_handle_t*)data; xmb_handle_t *xmb = (xmb_handle_t*)data;
@ -1753,8 +1754,11 @@ static void xmb_render(void *data)
return; return;
menu_animation_ctl(MENU_ANIMATION_CTL_DELTA_TIME, &delta_time); menu_animation_ctl(MENU_ANIMATION_CTL_DELTA_TIME, &delta_time);
dt = delta_time / IDEAL_DT;
menu_animation_ctl(MENU_ANIMATION_CTL_UPDATE, &dt); delta.current = delta_time;
if (menu_animation_ctl(MENU_ANIMATION_CTL_IDEAL_DELTA_TIME_GET, &delta))
menu_animation_ctl(MENU_ANIMATION_CTL_UPDATE, &delta.ideal);
video_driver_get_size(NULL, &height); video_driver_get_size(NULL, &height);

View File

@ -24,6 +24,8 @@
#include "../configuration.h" #include "../configuration.h"
#include "../performance.h" #include "../performance.h"
#define IDEAL_DT (1.0 / 60.0 * 1000000.0)
struct tween struct tween
{ {
bool alive; bool alive;
@ -510,6 +512,7 @@ static bool menu_animation_push(menu_animation_t *anim, void *data)
return true; return true;
} }
bool menu_animation_ctl(enum menu_animation_ctl_state state, void *data) bool menu_animation_ctl(enum menu_animation_ctl_state state, void *data)
{ {
static menu_animation_t anim; static menu_animation_t anim;
@ -686,6 +689,15 @@ bool menu_animation_ctl(enum menu_animation_ctl_state state, void *data)
animation_is_active = true; animation_is_active = true;
} }
break; break;
case MENU_ANIMATION_CTL_IDEAL_DELTA_TIME_GET:
{
menu_animation_ctx_delta_t *delta =
(menu_animation_ctx_delta_t*)data;
if (!delta)
return false;
delta->ideal = delta->current / IDEAL_DT;
}
break;
case MENU_ANIMATION_CTL_PUSH: case MENU_ANIMATION_CTL_PUSH:
return menu_animation_push(&anim, data); return menu_animation_push(&anim, data);
case MENU_ANIMATION_CTL_NONE: case MENU_ANIMATION_CTL_NONE:

View File

@ -21,10 +21,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <boolean.h> #include <boolean.h>
#ifndef IDEAL_DT
#define IDEAL_DT (1.0 / 60.0 * 1000000.0)
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -45,7 +41,8 @@ enum menu_animation_ctl_state
MENU_ANIMATION_CTL_KILL_BY_TAG, MENU_ANIMATION_CTL_KILL_BY_TAG,
MENU_ANIMATION_CTL_KILL_BY_SUBJECT, MENU_ANIMATION_CTL_KILL_BY_SUBJECT,
MENU_ANIMATION_CTL_TICKER, MENU_ANIMATION_CTL_TICKER,
MENU_ANIMATION_CTL_PUSH MENU_ANIMATION_CTL_PUSH,
MENU_ANIMATION_CTL_IDEAL_DELTA_TIME_GET
}; };
enum menu_animation_easing_type enum menu_animation_easing_type
@ -94,6 +91,12 @@ enum menu_animation_easing_type
EASING_OUT_IN_BOUNCE EASING_OUT_IN_BOUNCE
}; };
typedef struct menu_animation_ctx_delta
{
float current;
float ideal;
} menu_animation_ctx_delta_t;
typedef struct menu_animation_ctx_tag typedef struct menu_animation_ctx_tag
{ {
int id; int id;

View File

@ -1267,6 +1267,7 @@ static unsigned menu_input_frame_build(retro_input_t trigger_input)
unsigned menu_input_frame_retropad(retro_input_t input, unsigned menu_input_frame_retropad(retro_input_t input,
retro_input_t trigger_input) retro_input_t trigger_input)
{ {
menu_animation_ctx_delta_t delta;
float delta_time; float delta_time;
static bool initial_held = true; static bool initial_held = true;
static bool first_held = false; static bool first_held = false;
@ -1328,7 +1329,10 @@ unsigned menu_input_frame_retropad(retro_input_t input,
menu_animation_ctl(MENU_ANIMATION_CTL_DELTA_TIME, &delta_time); menu_animation_ctl(MENU_ANIMATION_CTL_DELTA_TIME, &delta_time);
menu_input->delay.count += delta_time / IDEAL_DT; delta.current = delta_time;
if (menu_animation_ctl(MENU_ANIMATION_CTL_IDEAL_DELTA_TIME_GET, &delta))
menu_input->delay.count += delta.ideal;
if (menu_input->keyboard.display) if (menu_input->keyboard.display)
{ {