#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");
   evas_object_move(shadow, WIDTH / 3, FLOOR_Y);
   evas_object_resize(shadow, 54, 3);
      velocity_data->base.evas_objs, shadow);
      sphere, PACKAGE_DATA_DIR "/" EPHYSICS_TEST_THEME ".edj", "red-ball");
   evas_object_move(sphere, WIDTH / 3, FLOOR_Y - 54);
   evas_object_resize(sphere, 54, 54);
      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);
}