integer CHANNEL = 42; // dialog channel
list MENU_MAIN = ["Floor 1", "Floor 2", "Floor 3", "Floor 4", "Floor 5", "Floor 6", "Floor 7"]; // the main menu
float BOTTOM = 27.300;
float FLOOR_HEIGHT = 10;
float SPEED = 1;
float target;
default
{
state_entry()
{
llListen(CHANNEL, "", NULL_KEY, ""); // listen for dialog answers (from multiple users)
llSitTarget(<0,-0.5,0.5>, llEuler2Rot(<0,0,-90>) );
llSetText("Sit Here to Ride Elevator",<0,0,0>,1.0);
target = BOTTOM;
}
listen(integer channel, string name, key id, string message)
{
integer idx = llListFindList(MENU_MAIN, [message]);
if( idx!=-1 )
{
llSay(0,"Elevator heading to " + message + "." );
target = BOTTOM + (idx*10);
state moving;
}
}
changed(integer Change)
{
llDialog(llAvatarOnSitTarget(), "Where to?", MENU_MAIN, CHANNEL);
}
}
state moving
{
state_entry()
{
llSetTimerEvent(0.1);
}
timer()
{
vector pos = llGetPos();
pos.x = 50.500;
pos.y = 90.740;
if( pos.z!=target )
{
if( pos.z>target )
{
pos.z = pos.z - SPEED;
}
else
{
pos.z = pos.z + SPEED;
}
}
if( llFabs(pos.z - target) < SPEED )
{
pos.z = target;
llSetTimerEvent(0);
llSetPos(pos);
llSay(0,"Elevator has reached its target." );
state default;
}
llSetPos(pos);
}
}
Share and Enjoy:
These icons link to social bookmarking sites where readers can share and discover new web pages.