Advertisement
salahzar

SalAlign 0.4

Nov 29th, 2014
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. vector pivotCenter;
  2. vector pivotScale;
  3. vector pivotScaleHalf;
  4. vector pivotMinCorner;
  5. vector pivotMaxCorner;
  6. rotation pivotRotation;
  7.  
  8. integer iCHANNEL;
  9. integer iBROADCAST=100;
  10.  
  11. list MOVEMENU=["M+X","M-X","M+Y","M-Y","M+Z","M-Z","BACK"]; // menu 1
  12. list CENTERMENU=["CX","CY","CZ","BACK" ]; // menu 2
  13. list TOUCHMENU=["T+X","T-X","T+Y","T-Y","T+Z","T-Z","BACK" ]; // menu 3
  14. list SIZEMENU=["SX","SY","SZ","BACK"]; // menu 4
  15. list ROTATEMENU=["RSAME","RX","RY","RZ","BACK" ]; // menu 5 various rotations
  16. list MAINMENU=["SET","MOVE","CENTER","SIZE","TOUCH","ROTATE","NUDGE","OPTIONS","FINISH" ]; // menu 0
  17.  
  18.  
  19. // NOT YET IMPLEMENTED
  20. list NUDGEMENU=["X+0.0001","X-0.0001","Y+0.0001","Y-0.0001","Z+0.0001","Z-0.0001","BACK"]; // menu 6
  21.  
  22. integer iMOVEMENU=1;
  23. integer iCENTERMENU=2;
  24. integer iTOUCHMENU=3;
  25. integer iSIZEMENU=4;
  26. integer iMAINMENU=0;
  27. integer iROTATEMENU=5;
  28. integer iNUDGEMENU=6;
  29.  
  30.  
  31. menu(key id,integer nextmenu)
  32. {
  33.     if(nextmenu==iMOVEMENU) llDialog(id,"MoveMenu:",MOVEMENU,iCHANNEL);
  34.     if(nextmenu==iCENTERMENU) llDialog(id,"CenterMenu:",CENTERMENU,iCHANNEL);
  35.     if(nextmenu==iTOUCHMENU) llDialog(id,"TouchMenu:",TOUCHMENU,iCHANNEL);
  36.     if(nextmenu==iSIZEMENU) llDialog(id,"SizeMenu:",SIZEMENU,iCHANNEL);
  37.     if(nextmenu==iROTATEMENU) llDialog(id,"RotateMenu:",ROTATEMENU,iCHANNEL);
  38.     if(nextmenu==iNUDGEMENU) llDialog(id,"NudgeMenu:",NUDGEMENU,iCHANNEL);
  39.     if(nextmenu==iMAINMENU)  llDialog(id,"Choose\nSET: set this obj as pivot\nCENTER: move to pivot center\nMOVE: move to pivot coord\nSIZE: same size as pivot\nTOUCH: go touching pivot",MAINMENU,iCHANNEL);
  40.  
  41.  
  42. }
  43.  
  44. move(vector x, key id, integer nextmenu)
  45. {
  46.     llSetPos(x);
  47.     menu(id,nextmenu);
  48.    
  49. }
  50.  
  51.  
  52. default
  53. {
  54.     state_entry()
  55.     {
  56.         llOwnerSay("Restarted");
  57.         // llListen(0,"",NULL_KEY,"");
  58.         llListen(iBROADCAST,"",NULL_KEY,"");
  59.        
  60.         iCHANNEL=(integer)llFrand(10000000);
  61.         llListen(iCHANNEL,"",NULL_KEY,"");
  62.        
  63.     }
  64.     listen(integer chan,string name,key id,string str)
  65.     {
  66.         // llOwnerSay("channel: "+(string)chan+" name: "+name+" key: "+(string)id+" str: "+str);
  67.         // be careful with FINISH
  68.         if(str=="FINISH")
  69.         {
  70.             llShout(iBROADCAST,str);
  71.             llRemoveInventory(llGetScriptName());
  72.             return;
  73.         }
  74.         if(chan==iCHANNEL)
  75.         {
  76.             if(str=="SET")
  77.             {
  78.  
  79.                 llShout(100,"SET"+(string)llGetPos()+"|"+(string)llGetScale()+"|"+(string)llGetRot());
  80.                 llOwnerSay("Launched SET command");
  81.                 return;
  82.             }
  83.  
  84.             if(str=="BACK") menu(id,iMAINMENU);
  85.            
  86.  
  87.             if(str=="MOVE")
  88.             {
  89.                 menu(id,iMOVEMENU);
  90.                 return;
  91.             }
  92.             vector myCenter=llGetPos();
  93.             vector myScale=llGetScale();
  94.             vector myScaleHalf=myScale/2;
  95.             vector mymincorner=myCenter-myScaleHalf;
  96.             vector mymaxcorner=myCenter+myScaleHalf;
  97.            
  98.             if(str=="M+X") move(<pivotMaxCorner.x-myScaleHalf.x,myCenter.y,myCenter.z>,id,iMOVEMENU);
  99.             if(str=="M-X") move(<pivotMinCorner.x+myScaleHalf.x,myCenter.y,myCenter.z>,id,iMOVEMENU);
  100.             if(str=="M+Y") move(<myCenter.x,pivotMaxCorner.y-myScaleHalf.y,myCenter.z>,id,iMOVEMENU);
  101.             if(str=="M-Y") move(<myCenter.x,pivotMinCorner.y+myScaleHalf.y,myCenter.z>,id,iMOVEMENU);
  102.             if(str=="M+Z") move(<myCenter.x,myCenter.y,pivotMaxCorner.z-myScaleHalf.z>,id,iMOVEMENU);
  103.             if(str=="M-Z") move(<myCenter.x,myCenter.y,pivotMinCorner.z+myScaleHalf.z>,id,iMOVEMENU);
  104.            
  105.             if(str=="CENTER")
  106.             {
  107.                 menu(id,iCENTERMENU);
  108.                
  109.                 return;
  110.             }
  111.             if(str=="CX") move(<pivotCenter.x,myCenter.y,myCenter.z>,id,iCENTERMENU);
  112.             if(str=="CY") move(<myCenter.x,pivotCenter.y,myCenter.z>,id,iCENTERMENU);
  113.             if(str=="CZ") move(<myCenter.x,myCenter.y,pivotCenter.z>,id,iCENTERMENU);
  114.            
  115.             if(str=="SIZE")
  116.             {
  117.                 menu(id,iSIZEMENU);
  118.                 return;
  119.             }
  120.            
  121.             if(str=="SX") {
  122.                 llSetScale(<pivotScale.x,myScale.y,myScale.z>);
  123.                 menu(id,iSIZEMENU);
  124.                 return;
  125.             }
  126.             if(str=="SY") {
  127.                 llSetScale(<myScale.x,pivotScale.y,myScale.z>);
  128.                 menu(id,iSIZEMENU);
  129.                 return;
  130.             }
  131.             if(str=="SZ") {
  132.                 llSetScale(<myScale.x,myScale.y,pivotScale.z>);
  133.                 menu(id,iSIZEMENU);
  134.                
  135.                 return;
  136.             }
  137.            
  138.             if(str=="TOUCH")
  139.             {
  140.                 menu(id,iTOUCHMENU);
  141.                 return;
  142.             }
  143.            
  144.             if(str=="T+X") move(<pivotMaxCorner.x+myScaleHalf.x,myCenter.y,myCenter.z>,id,iTOUCHMENU);
  145.             if(str=="T-X") move(<pivotMinCorner.x-myScaleHalf.x,myCenter.y,myCenter.z>,id,iTOUCHMENU);
  146.             if(str=="T+Y") move(<myCenter.x,pivotMaxCorner.y+myScaleHalf.y,myCenter.z>,id,iTOUCHMENU);
  147.             if(str=="T-Y") move(<myCenter.x,pivotMinCorner.y-myScaleHalf.y,myCenter.z>,id,iTOUCHMENU);
  148.             if(str=="T+Z") move(<myCenter.x,myCenter.y,pivotMaxCorner.z+myScaleHalf.z>,id,iTOUCHMENU);
  149.             if(str=="T-Z") move(<myCenter.x,myCenter.y,pivotMinCorner.z-myScaleHalf.z>,id,iTOUCHMENU);
  150.            
  151.            
  152.             if(str=="ROTATE") menu(id,iROTATEMENU);
  153.            
  154.            
  155.            
  156.             if(str=="RSAME") llSetRot(pivotRotation);
  157.             if(str=="RX"){
  158.                 rotation x_45 = llEuler2Rot( <45 * DEG_TO_RAD, 0, 0> );
  159.  
  160.                 rotation new_rot = llGetRot() * x_45;  // compute global rotation
  161.  
  162.                 llSetRot(new_rot);
  163.                 return;
  164.                
  165.             }
  166.            
  167.  
  168.             if(str=="RY"){
  169.                 rotation y_45 = llEuler2Rot( <0,45 * DEG_TO_RAD, 0> );
  170.  
  171.                 rotation new_rot = llGetRot() * y_45;  // compute global rotation
  172.  
  173.                 llSetRot(new_rot);
  174.                 return;
  175.                
  176.             }
  177.            
  178.             if(str=="RZ"){
  179.                 rotation z_45 = llEuler2Rot( <0,0,45 * DEG_TO_RAD> );
  180.  
  181.                 rotation new_rot = llGetRot() * z_45;  // compute global rotation
  182.  
  183.                 llSetRot(new_rot);
  184.                 return;
  185.                
  186.             }
  187.            
  188.             if(str=="NUDGE") menu(id,iNUDGEMENU);
  189.            
  190.             if(str=="X+0.0001") move(<myCenter.x+0.0001,myCenter.y,myCenter.z>,id,iNUDGEMENU);
  191.             if(str=="X-0.0001") move(<myCenter.x-0.0001,myCenter.y,myCenter.z>,id,iNUDGEMENU);
  192.             if(str=="Y+0.0001") move(<myCenter.x,myCenter.y+0.0001,myCenter.z>,id,iNUDGEMENU);
  193.             if(str=="Y-0.0001") move(<myCenter.x,myCenter.y-0.0001,myCenter.z>,id,iNUDGEMENU);
  194.             if(str=="Z+0.0001") move(<myCenter.x,myCenter.y,myCenter.z+0.0001>,id,iNUDGEMENU);
  195.             if(str=="Z-0.0001") move(<myCenter.x,myCenter.y,myCenter.z-0.0001>,id,iNUDGEMENU);
  196.            
  197.            
  198.            
  199.                        
  200.  
  201.            
  202.             return;
  203.         }
  204.         if(chan==iBROADCAST)
  205.         {
  206.             list rest=llParseStringKeepNulls(llGetSubString(str,3,-1),["|"],[]);
  207.             pivotCenter=(vector)llList2String(rest,0);
  208.             pivotScale=(vector)llList2String(rest,1);
  209.             pivotRotation=(rotation)llList2String(rest,2);
  210.             pivotScaleHalf=pivotScale/2;
  211.             pivotMinCorner=pivotCenter-pivotScaleHalf;
  212.             pivotMaxCorner=pivotCenter+pivotScaleHalf;
  213.             return;
  214.            
  215.         }
  216.        
  217.     }
  218.     // when touched set the position
  219.     touch_start(integer count)
  220.     {
  221.         key id=llDetectedKey(0);
  222.         menu(id,iMAINMENU);
  223.         // llDialog(id,"Choose",["SET","X","Y","Z" ],iCHANNEL);
  224.        
  225.     }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement