/* This example shows how to use soft bodies. * * Soft bodies have an attribute to change how much it will * deforms when colliding. It's called "hardness", and can * be set to any value between 0.0 (soft) and 1.0 (hard). * By default, all the soft bodies are hard (1.0). * * This example will make a box and a sphere collide * many times against the floor and will be placed at * top of the screen again. They will have their hardness * modified each time, going from the default to a very * soft state. * * It can be tested with edje_player * $ edje_player physics_soft_bodies.edj */ collections { images { image: "bubble-blue.png" COMP; } group { name: "example_group"; parts { part { name: "background"; type: RECT; physics_body: NONE; description { state: "default" 0.0; color: 255 255 255 255; /* white */ rel1.relative: 0.0 0.0; rel2.relative: 1.0 1.0; } } part { name: "red_box"; type: RECT; physics_body: SOFT_BOX; description { state: "default" 0.0; color: 255 0 0 255; /* red */ rel1.relative: 0.75 0.1; rel2.relative: 0.95 0.3; aspect: 1 1; physics { ignore_part_pos: 0; restitution: 0.85; } } description { state: "soft" 0.0; inherit: "default" 0.0; physics { hardness: 0.8; } } description { state: "very_soft" 0.0; inherit: "default" 0.0; physics { hardness: 0.4; } } } part { name: "blue_circle"; type: IMAGE; physics_body: SOFT_CYLINDER; description { state: "default" 0.0; rel1.relative: 0.25 0.1; rel2.relative: 0.45 0.3; aspect: 1 1; image { normal: "bubble-blue.png"; } physics { ignore_part_pos: 0; restitution: 0.85; hardness: 1; } } description { state: "soft" 0.0; inherit: "default" 0.0; physics.hardness: 0.8; } description { state: "very_soft" 0.0; inherit: "default" 0.0; physics.hardness: 0.4; } } part { name: "floor"; type: RECT; physics_body: BOUNDARY_BOTTOM; description { state: "default" 0.0; visible: 0; physics { restitution: 0.7; } } } part { name: "right_wall"; type: RECT; physics_body: BOUNDARY_RIGHT; description { state: "default" 0.0; visible: 0; physics { restitution: 1.0; } } } part { name: "left_wall"; type: RECT; physics_body: BOUNDARY_LEFT; description { state: "default" 0.0; visible: 0; physics { restitution: 1.0; } } } } programs { program { name: "stop,go_soft"; signal: "load"; in: 3 0; action: PHYSICS_STOP; target: "red_box"; target: "blue_circle"; after: "go_soft"; } program { name: "go_soft"; action: STATE_SET "soft" 0.0; target: "red_box"; target: "blue_circle"; after: "stop,go_very_soft"; } program { name: "stop,go_very_soft"; in: 3 0; action: PHYSICS_STOP; target: "red_box"; target: "blue_circle"; after: "go_very_soft"; } program { name: "go_very_soft"; action: STATE_SET "very_soft" 0.0; target: "red_box"; target: "blue_circle"; after: "stop,go_default"; } program { name: "stop,go_default"; in: 3 0; action: PHYSICS_STOP; target: "red_box"; target: "blue_circle"; after: "go_default"; } program { name: "go_default"; action: STATE_SET "default" 0.0; target: "red_box"; target: "blue_circle"; after: "stop,go_soft"; } } } }