{
EPhysics_Body *body = data;
Evas_Event_Mouse_Down *mdown = event_info;
- Evas_Coord w, h, x, y, z, zz, d;
+ Evas_Coord w, h, x, y, z, d;
Eina_List *triangles;
int *ldata;
h = 80;
x = mdown->output.x - (w / 2);
y = mdown->output.y - (h / 2);
- zz = z + (d / 2);
d = d / 2;
- triangles = ephysics_body_soft_body_triangles_inside_get(body, x, y, zz,
+ triangles = ephysics_body_soft_body_triangles_inside_get(body, x, y, z,
w, h, d);
ephysics_body_soft_body_triangle_list_impulse_apply(body, triangles, 0, 0,
200);
_soft_ellipsoid_add(Test_Data *test_data, Evas_Object *front_face, Evas_Object *back_face)
{
EPhysics_Body *body;
- Evas_Coord w, h;
+ Evas_Coord x, y, w, h;
body = ephysics_body_soft_ellipsoid_add(test_data->world, 500);
EPHYSICS_BODY_SOFT_ELLIPSOID_FACE_BACK,
back_face, EINA_TRUE);
- ephysics_body_geometry_get(body, NULL, NULL, NULL, &w, &h, NULL);
- ephysics_body_resize(body, w, h, h);
+ ephysics_body_geometry_get(body, &x, &y, NULL, &w, &h, NULL);
+ ephysics_body_geometry_set(body, x, y, 30, w, h, h);
ephysics_body_linear_movement_enable_set(body, EINA_FALSE, EINA_FALSE,
EINA_FALSE);
{
EPhysics_Body *body = data;
Evas_Event_Mouse_Down *mdown = event_info;
- Evas_Coord w, h, x, y, z, zz, d;
+ Evas_Coord w, h, x, y, z, d;
Eina_List *triangles;
int *ldata;
h = 20;
x = mdown->output.x - (w / 2);
y = mdown->output.y - (h / 2);
- zz = z + (d / 2);
- d = z;
+ d = d / 2;
- triangles = ephysics_body_soft_body_triangles_inside_get(body, x, y, zz,
+ triangles = ephysics_body_soft_body_triangles_inside_get(body, x, y, z,
w, h, d);
ephysics_body_soft_body_triangle_list_impulse_apply(body, triangles, 0, 0,
10);
Evas_Coord w, h;
Eina_List *l;
Evas *evas;
+ Evas_Object *parent;
evas = evas_object_evas_get(obj);
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+ parent = evas_object_smart_parent_get(obj);
EINA_LIST_FOREACH(slices, l, slice_data)
{
slice = (EPhysics_Body_Soft_Body_Slice *) slice_data;
evas_object_event_callback_add(slice->evas_obj, EVAS_CALLBACK_DEL,
_ephysics_body_soft_body_slice_del_cb,
slice);
+
+ if (parent) evas_object_smart_member_add(slice->evas_obj, parent);
}
if (slice)
_ephysics_body_transform_set(EPhysics_Body *body, btTransform trans)
{
btTransform origin;
- btTransform dest;
if (body->type != EPHYSICS_BODY_TYPE_RIGID)
{
origin = _ephysics_body_transform_get(body);
- dest.setIdentity();
- dest.setOrigin(trans.getOrigin() / origin.getOrigin());
body->soft_body->translate(trans.getOrigin() - origin.getOrigin());
return;
}
{
double rate, sx, sy, sz;
btVector3 body_scale, center;
- btScalar radius;
btTransform trans;
rate = ephysics_world_rate_get(body->world);
body_scale = btVector3(sx, sy, sz);
if (body->type == EPHYSICS_BODY_TYPE_SOFT)
{
+ trans = _ephysics_body_transform_get(body);
+
body->soft_body->scale(btVector3(1, 1, 1) / body->scale);
body->soft_body->scale(body_scale);
- body->soft_body->getCollisionShape()->getBoundingSphere(center, radius);
- trans.setIdentity();
- trans.setOrigin(center);
+ _ephysics_body_transform_set(body, trans);
body->rigid_body->proceedToTransform(trans);
_ephysics_body_soft_body_constraints_rebuild(body);
if (body->type == EPHYSICS_BODY_TYPE_CLOTH)
_ephysics_body_transform_set(body, trans);
+ else if (body->type == EPHYSICS_BODY_TYPE_SOFT)
+ {
+ _ephysics_body_transform_set(body, trans);
+ body->rigid_body->proceedToTransform(trans);
+ body->rigid_body->getMotionState()->setWorldTransform(trans);
+ }
else
{
body->rigid_body->proceedToTransform(trans);
return;
DBG("Resizing body %p to w=%i, h=%i, d=%i", body, w, h, body->size.d);
+
ephysics_world_lock_take(body->world);
_ephysics_body_resize(body, w, h, body->size.d);
ephysics_world_lock_release(body->world);
ny = node->m_x.y();
nz = node->m_x.z();
- if ((nz > zz || nz < dd) || (nx < xx || nx > xx + ww) ||
+ if ((nz < zz || nz > zz + dd) || (nx < xx || nx > xx + ww) ||
(ny > yy || ny < yy - hh))
out++;
}
if (body->soft_body)
{
+ evas_object_geometry_get(body->evas_obj, &obj_x, &obj_y, &obj_w, &obj_h);
+ if (!obj_w && !obj_h) evas_object_resize(body->evas_obj, 1, 1);
+
evas_object_event_callback_add(body->evas_obj, EVAS_CALLBACK_RESTACK,
_ephysics_body_soft_body_evas_restack_cb, body);
_ephysics_body_soft_body_slices_init(body, body->evas_obj,