#ifndef _EPHYSICS_PRIVATE_H
#define _EPHYSICS_PRIVATE_H
#include <Elementary.h>
#include <Evas.h>
#ifdef EPHYSICS_LOG_COLOR
#undef EPHYSICS_LOG_COLOR
#endif
#define EPHYSICS_LOG_COLOR EINA_COLOR_BLUE
#ifdef ERR
# undef ERR
#endif
#define ERR(...) EINA_LOG_DOM_ERR(_ephysics_test_log_dom, __VA_ARGS__)
#ifdef DBG
# undef DBG
#endif
#define DBG(...) EINA_LOG_DOM_DBG(_ephysics_test_log_dom, __VA_ARGS__)
#ifdef INF
# undef INF
#endif
#define INF(...) EINA_LOG_DOM_INFO(_ephysics_test_log_dom, __VA_ARGS__)
#ifdef WRN
# undef WRN
#endif
#define WRN(...) EINA_LOG_DOM_WARN(_ephysics_test_log_dom, __VA_ARGS__)
#ifdef CRI
# undef CRI
#endif
#define CRI(...) EINA_LOG_DOM_CRIT(_ephysics_test_log_dom, __VA_ARGS__)
#define EPHYSICS_TEST_THEME "ephysics_test"
#define WIDTH (512)
#define HEIGHT (384)
#define DEPTH (100)
#define SHADOW_ALPHA_ID (1)
#define FLOOR_Y (344)
#define FLOOR_WIDTH (750)
#define SH_THRESHOLD (200)
#ifdef __cplusplus
extern "C" {
#endif
extern int _ephysics_test_log_dom;
typedef struct _Test_Data Test_Data;
struct _Test_Data {
void *data;
};
Test_Data *test_data_new(void);
void test_data_del(Test_Data *test_data);
void test_clean(Test_Data *test_data);
void test_win_add(Test_Data *test_data,
const char *title,
Eina_Bool autodel);
void update_object_cb(
void *data,
EPhysics_Body *body,
void *event_info);
#ifdef __cplusplus
}
#endif
#endif
#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);
}