#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "ephysics_test.h"
typedef struct _Velocity_Data Velocity_Data;
struct _Velocity_Data {
Test_Data base;
double old_vx;
double old_vy;
double old_vaz;
double last_time;
};
{
if (strcmp(ev->
key,
"Up") == 0)
else if (strcmp(ev->
key,
"Down") == 0)
else if (strcmp(ev->
key,
"Right") == 0)
else if (strcmp(ev->
key,
"Left") == 0)
}
static void
_update_vel_cb(
void *data,
EPhysics_Body *body,
void *event_info __UNUSED__)
{
Velocity_Data *velocity_data = data;
double vx, vy, ax, ay, vaz, aaz;
double time_now, delta_time;
char buff[64];
if (!velocity_data->last_time)
delta_time = time_now - velocity_data->last_time;
velocity_data->last_time = time_now;
vx = (vx > 0 || vx <= -0.01) ? vx : 0;
vy = (vy > 0 || vy <= -0.01) ? vy : 0;
aaz = (vaz - velocity_data->old_vaz) / delta_time;
velocity_data->old_vaz = vaz;
ax = (vx - velocity_data->old_vx) / delta_time;
velocity_data->old_vx = vx;
ay = (vy - velocity_data->old_vy) / delta_time;
velocity_data->old_vy = vy;
if (first_call) return;
DBG(
"Delta Time: %0.3lf", delta_time);
snprintf(buff, sizeof(buff), "Linear velocity: %.2f, %.2f", vx, vy);
snprintf(buff, sizeof(buff), "Linear acceleration: %.2f, %.2f", ax, ay);
DBG(
"Vx: %0.3lf p/s Ax: %0.3lf p/s/s", vx, ax);
DBG(
"Vy: %0.3lf p/s Ay: %0.3lf p/s/s", vy, ay);
snprintf(buff, sizeof(buff), "Angular velocity: %.2f", vaz);
snprintf(buff, sizeof(buff), "Angular acceleration: %.2f", aaz);
DBG(
"Va: %0.3lf d/s Aa: %0.3lf d/s/s", vaz, aaz);
}
static void
_world_populate(Velocity_Data *velocity_data)
{
shadow, PACKAGE_DATA_DIR "/" EPHYSICS_TEST_THEME ".edj", "shadow-ball");
velocity_data->base.evas_objs, shadow);
sphere, PACKAGE_DATA_DIR "/" EPHYSICS_TEST_THEME ".edj", "red-ball");
velocity_data->base.evas_objs, sphere);
update_object_cb, shadow);
_update_vel_cb, velocity_data);
_update_vel_cb, velocity_data);
sphere_body);
velocity_data->body = sphere_body;
}
static void
_restart(
void *data,
Evas_Object *obj __UNUSED__,
const char *emission __UNUSED__,
const char *source __UNUSED__)
{
Velocity_Data *velocity_data = data;
velocity_data->body);
test_clean((Test_Data *)velocity_data);
_world_populate(velocity_data);
velocity_data->old_vx = 0;
velocity_data->old_vy = 0;
velocity_data->old_vaz = 0;
velocity_data->last_time = 0;
velocity_data->body);
}
static void
_win_del(
void *data,
Evas *e __UNUSED__,
Evas_Object *obj __UNUSED__,
void *event_info __UNUSED__)
{
Velocity_Data *velocity_data = data;
test_clean((Test_Data *)velocity_data);
free(velocity_data);
}
void
test_velocity(
void *data __UNUSED__,
Evas_Object *obj __UNUSED__,
void *event_info __UNUSED__)
{
Velocity_Data *velocity_data;
return;
velocity_data = calloc(1, sizeof(Velocity_Data));
if (!velocity_data)
{
ERR(
"Failed to create test data");
return;
}
test_win_add((Test_Data *)velocity_data,
"Velocity Getters",
EINA_FALSE);
_win_del, velocity_data);
"test-theme", _restart, velocity_data);
"ephysics_test");
"ephysics_test");
"ephysics_test");
WIDTH - 100, FLOOR_Y - 40, DEPTH);
velocity_data->base.world = world;
_world_populate(velocity_data);
velocity_data->body);
}