#define MSG_ID_VEL (1) collections { group { name: "prefs_edje"; max: 450 450; min: 50 50; parts { part { name: "bg"; type: RECT; scale: 1; description { state: "default" 0.0; min: 450 450; max: 450 450; color: 255 255 255 0; align: 0.0 0.0; } } part { name: "square1"; type: RECT; scale: 1; description { state: "default" 0.0; min: 50 50; max: 50 50; color: 0 0 255 255; align: 0.0 0.5; } description { state: "invert" 0.0; inherit: "default" 0.0; color: 0 255 0 255; align: 1 0.5; } } part { name: "square2"; type: RECT; description { state: "default" 0.0; min: 50 50; max: 50 50; color: 0 255 0 255; align: 0.5 0.0; } description { state: "invert" 0.0; inherit: "default" 0.0; color: 0 0 255 255; align: 0.5 1.0; } } } program { name: "animation_start"; signal: "start"; source: "animation"; after: "animation,clear"; } program { name: "call_animation,state1"; script { cancel_anim(anim_id); set_int(anim_id, anim(get_float(global_speed), "animation_1", 0)); set_int(anim_n, 1); } } program { name: "call_animation,state2"; script { cancel_anim(anim_id); set_int(anim_id, anim(get_float(global_speed), "animation_2", 0)); set_int(anim_n, 2); } } program { name: "animation,stop"; signal: "stop"; source: "animation"; script { cancel_anim(get_int(anim_id)); } } program { name: "animation,clear"; script { cancel_anim(get_int(anim_id)); if (get_int(anim_n) == 2) set_float(anim_pos, (get_float(anim_pos) - 1) * ( -1)); } after: "call_animation,state1"; } script { public global_speed; public anim_id; public anim_pos; public anim_n; public message(Msg_Type:type, id, ...) { if ((type == MSG_FLOAT) && (id == MSG_ID_VEL)) set_float(global_speed, Float:getarg(2)); } public animation_1(val, Float:pos) { if (pos >= get_float(anim_pos) && get_int(anim_n) == 1) { set_tween_state(PART:"square1", pos, "default", 0.0, "invert", 0.0); set_tween_state(PART:"square2", pos, "default", 0.0, "invert", 0.0); set_float(anim_pos, pos); } if (pos >= 1) { run_program(PROGRAM:"call_animation,state2"); set_float(anim_pos, 0.0); } } public animation_2(val, Float:pos) { if (pos >= get_float(anim_pos) && get_int(anim_n) == 2) { set_tween_state(PART:"square1", pos, "invert", 0.0, "default", 0.0); set_tween_state(PART:"square2", pos, "invert", 0.0, "default", 0.0); set_float(anim_pos, pos); } if (pos >= 1) { run_program(PROGRAM:"call_animation,state1"); set_float(anim_pos, 0.0); } } } } #undef MSG_ID_VEL