modular.segment

By: bdhtrn on Jan 19th, 2012  |  syntax: Linden Scripting  |  size: 1.53 KB  |  hits: 32  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. vector whereibelong;
  2. vector howiamsupposedtobe;
  3. string corename;
  4. integer datachan=-72492424;
  5.  
  6. goto(vector destination){
  7.     integer ok=0;
  8.     do{
  9.         if(llGetPos()!=destination)
  10.             llSetPrimitiveParams([PRIM_POSITION, destination]);
  11.         else    ok=1;
  12.     } while(ok==0);
  13. }
  14.  
  15. default{
  16.     on_rez(integer param){
  17.         if(param!=0)
  18.             datachan=param;
  19.     }
  20.     state_entry(){
  21.         llListen(datachan,"","","");
  22.     }
  23.     listen(integer chan,string who,key id,string msg){
  24.         if(msg=="compilelist"){
  25.             corename=who;
  26.             state compilemode;
  27.         }
  28.         else if(msg=="reorient")
  29.             state orientmode;
  30.         else if(msg=="x")
  31.             llDie();
  32.     }
  33. }
  34.  
  35. state compilemode{
  36.     state_entry(){
  37.         llSensor(corename,"",SCRIPTED,200,PI);
  38.     }
  39.     sensor(integer no){
  40.         vector originpos=llDetectedPos(0);
  41.         vector originrot=llRot2Euler(llDetectedRot(0))*RAD_TO_DEG;
  42.         whereibelong=originpos-llGetPos();
  43.         howiamsupposedtobe=originrot-llRot2Euler(llGetRot())*RAD_TO_DEG;
  44.         llShout(datachan,llGetObjectName());
  45.         state default;
  46.     }
  47. }
  48.  
  49. state orientmode{
  50.     state_entry(){
  51.         llSensor(corename,"",SCRIPTED,200,PI);
  52.     }
  53.     sensor(integer no){
  54.         vector poopPos=llDetectedPos(0);
  55.         vector poopRot=llRot2Euler(llDetectedRot(0))*RAD_TO_DEG;
  56.         goto(poopPos-(whereibelong*llDetectedRot(0)));
  57.         llSetRot(llEuler2Rot((poopRot-howiamsupposedtobe)*DEG_TO_RAD));
  58.         state default;
  59.     }
  60. }