Event test script

To do: 
* object_rez
* email
* link_message
* not_at_target
* at_target
* remote_data
<lsl>
integer touch_start_pass = FALSE;
integer touch_over_pass = FALSE;
key ds_request;
integer control_state = 0;
key http_request;
string http_url="http://www.google.com";
integer collision_state = 0;
integer land_collision_state = 0;
integer rot_target_state = 0;
integer moving_state = 0;
default
{
 state_entry()
 {
 llSetStatus(STATUS_PHYSICS, FALSE);
 llSay(0, "Take me in to your inventory and then rez.");
 }
 
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_exit()
 {
 //llSay(0, "Initial state test success (on_rez, state_exit)");
 }
}
state test_touch
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry()
 {
 llSay(0, "Touch me!");
 touch_start_pass = FALSE;
 touch_over_pass = FALSE;
 }
 
 touch_start(integer num_detected)
 {
 touch_start_pass = TRUE;
 }
 
 touch(integer num_detected)
 {
 touch_over_pass = TRUE;
 }
 
 touch_end(integer num_detected)
 {
 if (touch_start_pass && touch_over_pass)
 {
 state test_money;
 }
 else
 {
 llSay(0, "Touch test failed.");
 }
 }
 state_exit()
 {
 llSay(0, "Touch test success");
 }
}
state test_money
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 state_entry()
 {
 llSay(0, "Give me some L$.");
 }
 
 money(key giver, integer amount) {
 state test_listen;
 }
 
 state_exit()
 {
 //llSay(0, "Money test success");
 }
 
}
state test_listen
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry()
 {
 llSay(0, "say, \"hello\"");
 llListen( 0, "", NULL_KEY, "" ); 
 }
 listen( integer channel, string name, key id, string message )
 {
 // TODO perhaps store the id of the person who kicked off the tests and check that against id
 if (channel == 0 && message == "hello")
 {
 state test_dataserver;
 }
 }
 
 state_exit()
 {
 //llSay(0, "Listen test passed");
 }
}
state test_dataserver
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 //llSay(0, "Looking up your SL creation date.");
 ds_request = llRequestAgentData(llGetOwner(), DATA_BORN); // request your SL creation date
 }
 
 dataserver(key queryid, string data) 
 {
 if( ds_request == queryid )
 {
 llSay(0, "You were born on " + data);
 state test_perms_and_controls;
 }
 }
 
 state_exit()
 {
 //llSay(0, "dataserver test passed");
 }
}
// TODO make this two seperate tests
state test_perms_and_controls
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry()
 {
 control_state = 0;
 llSay(0, "Grant permissions for control.");
 llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
 }
 run_time_permissions(integer perm)
 {
 if (perm & (PERMISSION_TAKE_CONTROLS))
 {
 llTakeControls(CONTROL_FWD|CONTROL_BACK|CONTROL_LEFT|CONTROL_RIGHT, TRUE, FALSE);
 llSay(0, "Press Forward (you may need to to go mouse look)");
 }
 }
 
 control(key id, integer held, integer change)
 {
 if ((held & change & CONTROL_FWD) && control_state == 0)
 {
 llSay(0, "Press Left");
 ++control_state;
 }
 if ((held & change & CONTROL_LEFT) && control_state == 1)
 {
 llSay(0, "Press Back");
 ++control_state;
 } 
 if ((held & change & CONTROL_BACK) && control_state == 2)
 {
 llSay(0, "Press Right");
 ++control_state;
 } 
 if ((held & change & CONTROL_RIGHT) && control_state == 3)
 {
 llReleaseControls();
 state test_timer;
 } 
 
 }
 
 state_exit()
 {
 //llSay(0, "control and perms test");
 }
} 
state test_timer
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 //llSay(0, "Timer test start");
 llSetTimerEvent(1.0);
 }
 
 timer() 
 {
 llSetTimerEvent(0.0);
 state test_http;
 } 
 
 state_exit()
 {
 //llSay(0, "Timer test end");
 }
}
state test_http
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 //llSay(0, "http test start");
 http_request = llHTTPRequest(http_url, [] ,"");
 }
 
 http_response(key id,integer status, list meta, string body)
 {
 if(http_request == id)
 {
 state test_land_collision;
 }
 } 
 
 state_exit()
 {
 //llSay(0, "http test end");
 }
}
state test_land_collision
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 //llSay(0, "land collision test start");
 llSetStatus(STATUS_PHYSICS, TRUE);
 land_collision_state = 0;
 }
 
 land_collision_start(vector pos)
 {
 //llSay(0, "land_collision_start");
 if (land_collision_state == 0)
 {
 ++land_collision_state;
 }
 }
 land_collision(vector pos)
 {
 //llSay(0, "land_collision");
 if (land_collision_state == 1)
 {
 ++land_collision_state;
 }
 }
 
 land_collision_end(vector pos)
 {
 //llSay(0, "land_collision_end");
 if (land_collision_state == 2)
 {
 llSetStatus(STATUS_PHYSICS, FALSE);
 state test_rot_target;
 }
 }
 
 state_exit()
 {
 //llSay(0, "land collision test end");
 } 
}
state test_rot_target
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 //llSay(0, "test_rot_target");
 integer rot_handle = llRotTarget(<0,0,0,1>, 0); 
 rot_target_state = 0;
 }
 
 not_at_rot_target()
 {
 //llSay(0, "not_at_rot_target");
 if (rot_target_state == 0)
 {
 integer rot_handle = llRotTarget(<0,0,0,1>, 7); 
 rot_target_state = 1;
 }
 }
 
 at_rot_target(integer tnum, rotation targetrot, rotation ourrot)
 {
 //llSay(0, "at_rot_target");
 if (rot_target_state == 1)
 {
 rot_target_state = 2;
 state test_collision;
 } 
 }
 
 state_exit()
 {
 //llSay(0, "rot_target test end");
 } 
}
state test_collision
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 llSay(0, "Walk in to the box");
 llSetStatus(STATUS_PHYSICS, TRUE);
 collision_state = 0;
 }
 
 collision_start(integer num_detected)
 {
 //llSay(0, "collision_start");
 if (collision_state == 0)
 {
 ++collision_state;
 }
 }
 collision(integer num_detected)
 {
 //llSay(0, "collision");
 if (collision_state == 1)
 {
 ++collision_state;
 }
 }
 
 collision_end(integer num_detected)
 {
 //llSay(0, "collision_end");
 if (collision_state == 2)
 {
 llSetStatus(STATUS_PHYSICS, FALSE);
 state test_attach;
 }
 }
 
 state_exit()
 {
 //llSay(0, "land collision test end");
 } 
}
state test_attach
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 llSay(0, "Attach to yourself");
 }
 
 attach(key attached)
 {
 if (attached == NULL_KEY) 
 {
 state test_change;
 }
 else
 {
 llSay(0, "Drop me.");
 }
 }
 
 state_exit()
 {
 //llSay(0, "land collision test end");
 } 
}
state test_change
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 llSetColor(<1,1,1>, ALL_SIDES);
 }
 
 changed(integer change)
 {
 if (change & CHANGED_COLOR)
 {
 state test_moving;
 }
 }
 
 state_exit()
 {
 } 
}
state test_moving
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 llSay(0, "Move me, then place somewhere flat");
 moving_state = 0;
 llSetStatus(STATUS_PHYSICS, TRUE);
 }
 
 state_exit()
 {
 llSetStatus(STATUS_PHYSICS, FALSE);
 } 
 
 moving_start() 
 {
 moving_state = 1;
 }
 
 moving_end() 
 {
 if (moving_state == 1)
 {
 state test_sensor;
 }
 } 
}
state test_sensor
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 
 state_entry() 
 {
 llSay(0, "Move avatar at least away 1m");
 llSensor("", NULL_KEY, AGENT, 1, PI); 
 }
 
 state_exit()
 {
 
 } 
 
 sensor(integer total_number)
 {
 state test_end;
 } 
 
 no_sensor() 
 {
 llSensor("", NULL_KEY, AGENT, 10, PI); 
 }
}
state test_end
{
 on_rez(integer start_param)
 {
 state test_touch;
 }
 state_entry()
 {
 llSay(0, "All states/tests completed. Success!");
 } 
}
</lsl>