//scan the room script by Ariane Brodie
//Dump it in any prim an attach it as a HUD;
//touching once will start a scan of the surrounding areas and
//point the camera at each person in the room
//touch to pause the scan, touch again to continue.
//when the tour is done, the camera will return to default
key agent;
vector pos;
vector rotz;
integer permissions;
list whoishere;
default
{
state_entry()
{
agent=llGetOwner();
llSetText("",<0,0,0>,0);
whoishere = [];
llSetCameraParams([CAMERA_ACTIVE, 0]); // 1 is active, 0 is inactive
llReleaseCamera(agent);
}
touch_start(integer total_number)
{
state cam_on;
}
}
state cam_on
{
state_entry()
{
llSensorRepeat("","",AGENT, 90, PI,5);
}
touch_start(integer total_number)
{
llSensorRemove();
state pause;
}
sensor(integer n)
{
integer i;
integer j;
rotation rot;
list temp;
string iSee = "";
string newpeople = "";
integer FoundOne = FALSE;
for(i=0;(i<n && FoundOne == FALSE);i++)
{
if(llDetectedKey(i) != llGetOwner())
{
pos = llDetectedPos(i);
rot = llDetectedRot(i);
rotz = llRot2Fwd(rot);
rotz.x = rotz.x * 2;
rotz.y = rotz.y * 2;
rotz.z = 1;
iSee = llDetectedName(i);
temp = llParseString2List(iSee,[],[]);
j = llListFindList(whoishere,temp);
if (j < 0) {
whoishere = llListInsertList(temp,whoishere,0);
FoundOne = TRUE;
}
else {
iSee = "";
}
}
}
if(iSee != "") {
llOwnerSay(iSee);
llSetText(iSee,<1,1,1>,1.0);
llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
}
else {
llOwnerSay("no more found");
llSetText("",<1,1,1>,1.0);
state default;
}
}
no_sensor()
{
llOwnerSay("none found");
llSetText("",<1,1,1>,1.0);
state default;
}
run_time_permissions(integer perm) {
permissions = perm;
if ((perm & PERMISSION_CONTROL_CAMERA) == PERMISSION_CONTROL_CAMERA) {
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 0.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
CAMERA_DISTANCE, 0.0, // ( 0.5 to 10) meters
CAMERA_FOCUS, pos, // region relative position
CAMERA_FOCUS_LAG, 0.0 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
// CAMERA_PITCH, 80.0, // (-45 to 80) degrees
CAMERA_POSITION, pos + rotz, // region relative position
CAMERA_POSITION_LAG, 0.0, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, ZERO_VECTOR // <-10,-10,-10> to <10,10,10> meters
]);
}
}
}
state pause
{
touch_start(integer total_number)
{
state cam_on;
}
}