parent
0d1b29e5e1
commit
c982de65d3
11 changed files with 612 additions and 87 deletions
@ -0,0 +1,217 @@ |
||||
/* It can be tested with edje_player slave mode |
||||
* $ edje_player -S -p physics_backcull.edj |
||||
* |
||||
* signal on backcull -> allow movement in all axes, enable backface cull |
||||
* signal off backcull -> allow movement in all axes, disable backface cull |
||||
* |
||||
* message 1 FLOAT_SET 3 50 -100 0 -> apply an impulse on red box with |
||||
* x = 50, y = -100, z = 0, for example |
||||
* message 2 FLOAT_SET 3 0 0 8.2 -> apply a torque impulse on red box with |
||||
* x = 4, y = 0, z = 0.8, for example |
||||
* message 3 FLOAT_SET 3 0 1 0 -> allow linear movement on axes x, y, z |
||||
* message 4 FLOAT_SET 3 0 1 0 -> allow angular movement on axes x, y, z |
||||
* message 5 STRING "linear" -> return a message with part's movement freedom |
||||
* for "linear" or "angular. |
||||
*/ |
||||
|
||||
#define ID_IMPULSE (1) |
||||
#define ID_TORQUE_IMPULSE (2) |
||||
#define ID_LIN_SET (3) |
||||
#define ID_ANG_SET (4) |
||||
#define ID_GET (5) |
||||
|
||||
collections { |
||||
|
||||
group { |
||||
name: "example_group"; |
||||
|
||||
script { |
||||
public message(Msg_Type:type, id, ...) { |
||||
if ((id == ID_IMPULSE) && (type == MSG_FLOAT_SET)) { |
||||
new Float:x, Float:y, Float:z; |
||||
new n = numargs(); |
||||
if (n < 5) return; |
||||
x = getfarg(2); |
||||
y = getfarg(3); |
||||
z = getfarg(4); |
||||
physics_impulse(PART:"red_box", x, y, z); |
||||
} |
||||
else if ((id == ID_TORQUE_IMPULSE) && (type == MSG_FLOAT_SET)) { |
||||
new Float:x, Float:y, Float:z; |
||||
new n = numargs(); |
||||
if (n < 5) return; |
||||
x = getfarg(2); |
||||
y = getfarg(3); |
||||
z = getfarg(4); |
||||
physics_torque_impulse(PART:"red_box", x, y, z); |
||||
} |
||||
else if ((id == ID_LIN_SET) && (type == MSG_FLOAT_SET)) { |
||||
new Float:x, Float:y, Float:z; |
||||
new n = numargs(); |
||||
if (n < 5) return; |
||||
x = getfarg(2); |
||||
y = getfarg(3); |
||||
z = getfarg(4); |
||||
custom_state(PART:"red_box", "default", 0.0); |
||||
set_state_val(PART:"red_box", STATE_PHYSICS_MOV_FREEDOM_LIN, |
||||
x, y, z); |
||||
set_state(PART:"red_box", "custom", 0.0); |
||||
} |
||||
else if ((id == ID_ANG_SET) && (type == MSG_FLOAT_SET)) { |
||||
new Float:x, Float:y, Float:z; |
||||
new n = numargs(); |
||||
if (n < 5) return; |
||||
x = getfarg(2); |
||||
y = getfarg(3); |
||||
z = getfarg(4); |
||||
custom_state(PART:"red_box", "default", 0.0); |
||||
set_state_val(PART:"red_box", STATE_PHYSICS_MOV_FREEDOM_ANG, |
||||
x, y, z); |
||||
set_state(PART:"red_box", "custom", 0.0); |
||||
} |
||||
else if ((id == ID_GET) && (type == MSG_STRING)) { |
||||
new Float:x, Float:y, Float:z; |
||||
new name[1024]; |
||||
getsarg(2, name, sizeof(name)); |
||||
if (!strcmp(name, "linear")) |
||||
{ |
||||
get_state_val(PART:"red_box", |
||||
STATE_PHYSICS_MOV_FREEDOM_LIN, x, y, z); |
||||
send_message(MSG_STRING_FLOAT_SET, 1, "Linear", x, y, z); |
||||
} |
||||
else if (!strcmp(name, "angular")) |
||||
{ |
||||
get_state_val(PART:"red_box", |
||||
STATE_PHYSICS_MOV_FREEDOM_ANG, x, y, z); |
||||
send_message(MSG_STRING_FLOAT_SET, 1, "Angular", x, y, z); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
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: RIGID_BOX; |
||||
description { |
||||
state: "default" 0.0; |
||||
color: 255 0 0 255; /* light red */ |
||||
rel1.relative: 0.45 0.1; |
||||
rel2.relative: 0.55 0.2; |
||||
aspect: 1 1; |
||||
physics { |
||||
mass: 30; |
||||
restitution: 0.85; |
||||
movement_freedom { |
||||
linear: 1 1 1; |
||||
angular: 1 1 1; |
||||
} |
||||
} |
||||
} |
||||
description { |
||||
state: "backface_culled" 0.0; |
||||
inherit: "default" 0.0; |
||||
physics.backface_cull: 1; |
||||
} |
||||
} |
||||
|
||||
part { |
||||
name: "floor"; |
||||
type: RECT; |
||||
physics_body: BOUNDARY_BOTTOM; |
||||
description { |
||||
state: "default" 0.0; |
||||
visible: 0; |
||||
physics { |
||||
restitution: 0.8; |
||||
} |
||||
} |
||||
} |
||||
|
||||
part { |
||||
name: "front"; |
||||
type: RECT; |
||||
physics_body: BOUNDARY_FRONT; |
||||
description { |
||||
state: "default" 0.0; |
||||
visible: 0; |
||||
physics { |
||||
restitution: 0.4; |
||||
} |
||||
} |
||||
} |
||||
|
||||
part { |
||||
name: "back"; |
||||
type: RECT; |
||||
physics_body: BOUNDARY_BACK; |
||||
description { |
||||
state: "default" 0.0; |
||||
visible: 0; |
||||
physics { |
||||
restitution: 0.4; |
||||
} |
||||
} |
||||
} |
||||
|
||||
part { |
||||
name: "left"; |
||||
type: RECT; |
||||
physics_body: BOUNDARY_LEFT; |
||||
description { |
||||
state: "default" 0.0; |
||||
visible: 0; |
||||
physics { |
||||
restitution: 0.4; |
||||
} |
||||
} |
||||
} |
||||
|
||||
part { |
||||
name: "right"; |
||||
type: RECT; |
||||
physics_body: BOUNDARY_RIGHT; |
||||
description { |
||||
state: "default" 0.0; |
||||
visible: 0; |
||||
physics { |
||||
restitution: 0.4; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
programs { |
||||
program { |
||||
name: "backcull,on"; |
||||
signal: "on"; |
||||
source: "backcull"; |
||||
action: STATE_SET "backface_culled" 0.0; |
||||
target: "red_box"; |
||||
} |
||||
|
||||
program { |
||||
name: "backcull,off"; |
||||
signal: "off"; |
||||
source: "backcull"; |
||||
action: STATE_SET "default" 0.0; |
||||
target: "red_box"; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
} |
Loading…
Reference in new issue