Advertisement
Guest User

Untitled

a guest
Mar 12th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. float interval = 0.05;
  2. integer maxturning = 10;
  3. float turnangleinc = 9;
  4. integer turninginc;
  5.  
  6. integer initialized;
  7. integer turning;
  8. integer center = -1;
  9. integer touchedcenterindex;
  10. integer edgeindex = -1;
  11. integer middle;
  12. integer iscenter;
  13. integer centerlink;
  14.  
  15. string links;
  16. list centerindices = [4, 10, 12, 14, 16, 22];
  17. string edges;
  18.  
  19. list euleraxes = [<0, 0, 1>, <0, 1, 0>, <-1, 0, 0>, <1, 0, 0>, <0, -1, 0>, <0, 0, -1>];
  20. vector euleraxis;
  21. rotation axisrot;
  22.  
  23. string c = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+=";
  24.  
  25. integer yr;
  26. integer ygr;
  27. integer yg;
  28. integer yog;
  29. integer yo;
  30. integer ybo;
  31. integer yb;
  32. integer yrb;
  33. integer y;
  34. integer r;
  35. integer gr;
  36. integer g;
  37. integer og;
  38. integer o;
  39. integer bo;
  40. integer b;
  41. integer rb;
  42. integer wrg;
  43. integer wr;
  44. integer wbr;
  45. integer wb;
  46. integer w;
  47. integer wob;
  48. integer wo;
  49. integer wgo;
  50. integer wg;
  51.  
  52. findparts()
  53. {
  54.     integer i;
  55.     for(i = 2; i < llGetNumberOfPrims() + 1; i++)
  56.     {
  57.         string name = llGetLinkName(i);
  58.  
  59.         if(name == "yr")
  60.             yr = i;
  61.         else if(name == "ygr")
  62.             ygr = i;
  63.         else if(name == "yg")
  64.             yg = i;
  65.         else if(name == "yog")
  66.             yog = i;
  67.         else if(name == "yo")
  68.             yo = i;
  69.         else if(name == "ybo")
  70.             ybo = i;
  71.         else if(name == "yb")
  72.             yb = i;
  73.         else if(name == "yrb")
  74.             yrb = i;
  75.         else if(name == "y")
  76.             y = i;
  77.         else if(name == "r")
  78.             r = i;
  79.         else if(name == "gr")
  80.             gr = i;
  81.         else if(name == "g")
  82.             g = i;
  83.         else if(name == "og")
  84.             og = i;
  85.         else if(name == "o")
  86.             o = i;
  87.         else if(name == "bo")
  88.             bo = i;
  89.         else if(name == "b")
  90.             b = i;
  91.         else if(name == "rb")
  92.             rb = i;
  93.         else if(name == "wrg")
  94.             wrg = i;
  95.         else if(name == "wr")
  96.             wr = i;
  97.         else if(name == "wbr")
  98.             wbr = i;
  99.         else if(name == "wb")
  100.             wb = i;
  101.         else if(name == "w")
  102.             w = i;
  103.         else if(name == "wob")
  104.             wob = i;
  105.         else if(name == "wo")
  106.             wo = i;
  107.         else if(name == "wgo")
  108.             wgo = i;
  109.         else if(name == "wg")
  110.             wg = i;
  111.     }
  112.    
  113.     links =
  114.         dec2a(ybo) + dec2a(yb) + dec2a(yrb) +//  0  1  2
  115.         dec2a(yo) + dec2a(y) + dec2a(yr) +   //  3  4  5
  116.         dec2a(yog) + dec2a(yg) + dec2a(ygr) +//  6  7  8
  117.        
  118.         dec2a(bo) + dec2a(b) + dec2a(rb) +   //  9 10 11
  119.         dec2a(o) + dec2a(1) + dec2a(r) +     // 12 13 14
  120.         dec2a(og) + dec2a(g) + dec2a(gr) +   // 15 16 17
  121.        
  122.         dec2a(wob) + dec2a(wb) + dec2a(wbr) +// 18 19 20
  123.         dec2a(wo) + dec2a(w) + dec2a(wr) +   // 21 22 23
  124.         dec2a(wgo) + dec2a(wg) + dec2a(wrg)  // 24 25 26
  125.         ;
  126.        
  127. }
  128.  
  129. integer a2dec(string a)
  130. {
  131.     return ( (llSubStringIndex(c, llGetSubString(a, 0, 0))<<6) + llSubStringIndex(c, llGetSubString(a, 1, 1)) );
  132. }
  133.  
  134. string dec2a(integer dec)
  135. {
  136.     integer idec = (integer)dec;
  137.     integer d1 = idec>>6;
  138.     integer d0 = idec - (d1<<6);    
  139.     return llGetSubString(c, d1, d1) + llGetSubString(c, d0, d0);
  140. }
  141.  
  142. initturning()
  143. {
  144.     string rinks;
  145.    
  146.     euleraxis = llList2Vector(euleraxes, iscenter);
  147.     axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
  148.    
  149.     if(center == 4)//y)
  150.     {
  151.         edges =
  152.             llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
  153.             llGetSubString(links, 3, 3) + llGetSubString(links, 5, 5) +    
  154.             llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8);  
  155.            
  156.         if(turninginc > 0)
  157.         {
  158.             rinks =
  159.                 llGetSubString(links, 6, 6) + llGetSubString(links, 3, 3) + llGetSubString(links, 0, 0) +
  160.                 llGetSubString(links, 7, 7) + llGetSubString(links, 4, 4) + llGetSubString(links, 1, 1) +    
  161.                 llGetSubString(links, 8, 8) + llGetSubString(links, 5, 5) + llGetSubString(links, 2, 2) +
  162.                 llGetSubString(links, 9, 26);  
  163.         }
  164.         else
  165.         {
  166.             rinks =
  167.                 llGetSubString(links, 2, 2) + llGetSubString(links, 5, 5) + llGetSubString(links, 8, 8) +
  168.                 llGetSubString(links, 1, 1) + llGetSubString(links, 4, 4) + llGetSubString(links, 7, 8) +    
  169.                 llGetSubString(links, 0, 0) + llGetSubString(links, 3, 3) + llGetSubString(links, 6, 8) +
  170.                 llGetSubString(links, 9, 26);
  171.         }
  172.     }
  173.     else if(center == 10)//b)
  174.     {
  175.         edges =
  176.             llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +    
  177.             llGetSubString(links, 11, 11) + llGetSubString(links, 9, 9) +
  178.             llGetSubString(links, 20, 20) + llGetSubString(links, 19, 19) + llGetSubString(links, 18, 18);
  179.            
  180.         if(turninginc > 0)
  181.         {
  182.             rinks =
  183.                 llGetSubString(links, 2, 2) + llGetSubString(links, 11, 11) + llGetSubString(links, 20, 20) + llGetSubString(links, 3, 8) +
  184.                 llGetSubString(links, 1, 1) + llGetSubString(links, 10, 10) + llGetSubString(links, 19, 19) + llGetSubString(links, 12, 17) +
  185.                 llGetSubString(links, 0, 0) + llGetSubString(links, 9, 9) + llGetSubString(links, 18, 18) + llGetSubString(links, 21, 26);
  186.  
  187.         }
  188.         else
  189.         {
  190.             rinks =
  191.                 llGetSubString(links, 18, 18) + llGetSubString(links, 9, 9) + llGetSubString(links, 0, 0) + llGetSubString(links, 3, 8) +
  192.                 llGetSubString(links, 19, 19) + llGetSubString(links, 10, 10) + llGetSubString(links, 1, 1) + llGetSubString(links, 12, 17) +
  193.                 llGetSubString(links, 20, 20) + llGetSubString(links, 11, 11) + llGetSubString(links, 2, 2) + llGetSubString(links, 21, 26);
  194.         }                  
  195.     }
  196.     else if(center == 12)//o)
  197.     {
  198.         edges =
  199.             llGetSubString(links, 0, 0) + llGetSubString(links, 3, 3) + llGetSubString(links, 6, 6) +    
  200.             llGetSubString(links, 9, 9) + llGetSubString(links, 15, 15) +    
  201.             llGetSubString(links, 18, 18) + llGetSubString(links, 21, 21) + llGetSubString(links, 24, 24);
  202.            
  203.         if(turninginc > 0)
  204.         {            
  205.             rinks =
  206.                 llGetSubString(links, 18, 18) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
  207.                 llGetSubString(links, 9, 9) + llGetSubString(links, 4, 4) + llGetSubString(links, 5, 5) +
  208.                 llGetSubString(links, 0, 0) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
  209.                
  210.                 llGetSubString(links, 21, 21) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
  211.                 llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
  212.                 llGetSubString(links, 3, 3) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17) +
  213.                
  214.                 llGetSubString(links, 24, 24) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
  215.                 llGetSubString(links, 15, 15) + llGetSubString(links, 22, 22) + llGetSubString(links, 23, 23) +
  216.                 llGetSubString(links, 6, 6) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
  217.         }
  218.         else
  219.         {
  220.             rinks =
  221.                 llGetSubString(links, 6, 6) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
  222.                 llGetSubString(links, 15, 15) + llGetSubString(links, 4, 4) + llGetSubString(links, 5, 5) +
  223.                 llGetSubString(links, 24, 24) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
  224.                
  225.                 llGetSubString(links, 3, 3) + llGetSubString(links, 10, 19) + llGetSubString(links, 11, 11) +
  226.                 llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
  227.                 llGetSubString(links, 21, 21) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17) +
  228.                
  229.                 llGetSubString(links, 0, 0) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
  230.                 llGetSubString(links, 9, 9) + llGetSubString(links, 22, 22) + llGetSubString(links, 23, 23) +
  231.                 llGetSubString(links, 18, 18) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
  232.         }
  233.     }
  234.     else if(center == 14)//r)
  235.     {
  236.         edges =
  237.             llGetSubString(links, 8, 8) + llGetSubString(links, 5, 5) + llGetSubString(links, 2, 2) +    
  238.             llGetSubString(links, 11, 11) + llGetSubString(links, 17, 17) +    
  239.             llGetSubString(links, 26, 26) + llGetSubString(links, 23, 23) + llGetSubString(links, 20, 20);  
  240.            
  241.         if(turninginc > 0)
  242.         {            
  243.             rinks =
  244.                 llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 8, 8) +
  245.                 llGetSubString(links, 3, 3) + llGetSubString(links, 4, 4) + llGetSubString(links, 17, 17) +
  246.                 llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 26, 26) +
  247.                
  248.                 llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 5, 5) +
  249.                 llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
  250.                 llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 23, 23) +
  251.                
  252.                 llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 2, 2) +
  253.                 llGetSubString(links, 21, 21) + llGetSubString(links, 22, 22) + llGetSubString(links, 11, 11) +
  254.                 llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 20, 20);
  255.         }
  256.         else
  257.         {
  258.             rinks =
  259.                 llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 20, 20) +
  260.                 llGetSubString(links, 3, 3) + llGetSubString(links, 4, 4) + llGetSubString(links, 11, 11) +
  261.                 llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 2, 2) +
  262.                
  263.                 llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 23, 23) +
  264.                 llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
  265.                 llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 5, 5) +
  266.                
  267.                 llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 26, 26) +
  268.                 llGetSubString(links, 21, 21) + llGetSubString(links, 22, 22) + llGetSubString(links, 17, 17) +
  269.                 llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 8, 8);
  270.         }                  
  271.     }    
  272.     else if(center == 16)//g)
  273.     {
  274.         edges =
  275.             llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +    
  276.             llGetSubString(links, 15, 15) + llGetSubString(links, 17, 17) +    
  277.             llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
  278.            
  279.         if(turninginc > 0)
  280.         {
  281.             rinks =
  282.                 llGetSubString(links, 0, 5) + llGetSubString(links, 24, 24) + llGetSubString(links, 15, 15) + llGetSubString(links, 6, 6) +
  283.                 llGetSubString(links, 9, 14) + llGetSubString(links, 25, 25) + llGetSubString(links, 16, 16) + llGetSubString(links, 7, 7) +
  284.                 llGetSubString(links, 18, 23) + llGetSubString(links, 26, 26) + llGetSubString(links, 17, 17) + llGetSubString(links, 8, 8);
  285.  
  286.         }
  287.         else
  288.         {
  289.             rinks =
  290.                 llGetSubString(links, 0, 5) + llGetSubString(links, 8, 8) + llGetSubString(links, 17, 17) + llGetSubString(links, 26, 26) +
  291.                 llGetSubString(links, 9, 14) + llGetSubString(links, 7, 7) + llGetSubString(links, 16, 16) + llGetSubString(links, 25, 25) +
  292.                 llGetSubString(links, 18, 23) + llGetSubString(links, 6, 6) + llGetSubString(links, 15, 15) + llGetSubString(links, 24, 24);
  293.         }        
  294.     }    
  295.     else if(center == 22)//w)
  296.     {
  297.         edges =
  298.             llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +    
  299.             llGetSubString(links, 21, 21) + llGetSubString(links, 23, 23) +    
  300.             llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
  301.            
  302.         if(turninginc > 0)
  303.         {
  304.             rinks =
  305.                 llGetSubString(links, 0, 17) +
  306.                 llGetSubString(links, 20, 20) + llGetSubString(links, 23, 23) + llGetSubString(links, 26, 26) +
  307.                 llGetSubString(links, 19, 19) + llGetSubString(links, 22, 22) + llGetSubString(links, 25, 25) +    
  308.                 llGetSubString(links, 18, 18) + llGetSubString(links, 21, 21) + llGetSubString(links, 24, 24);  
  309.         }
  310.         else
  311.         {
  312.             rinks =
  313.                 llGetSubString(links, 0, 17) +
  314.                 llGetSubString(links, 24, 24) + llGetSubString(links, 21, 21) + llGetSubString(links, 18, 18) +
  315.                 llGetSubString(links, 25, 25) + llGetSubString(links, 22, 22) + llGetSubString(links, 19, 19) +    
  316.                 llGetSubString(links, 26, 26) + llGetSubString(links, 23, 23) + llGetSubString(links, 20, 20);
  317.         }                    
  318.     }
  319.     else if(middle == 0)
  320.     {
  321.         euleraxis = llList2Vector(euleraxes, 1);
  322.         axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
  323.         edges =
  324.             llGetSubString(links, 3, 3) + llGetSubString(links, 4, 4) + llGetSubString(links, 5, 5) +
  325.             llGetSubString(links, 12, 12) + llGetSubString(links, 14, 14) +
  326.             llGetSubString(links, 21, 21) + llGetSubString(links, 22, 22) + llGetSubString(links, 23, 23);
  327.            
  328.         rinks =
  329.             llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
  330.             llGetSubString(links, 5, 5) + llGetSubString(links, 14, 14) + llGetSubString(links, 23, 23) +
  331.             llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
  332.            
  333.             llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
  334.             llGetSubString(links, 4, 4) + llGetSubString(links, 13, 13) + llGetSubString(links, 22, 22) +
  335.             llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17) +
  336.            
  337.             llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
  338.             llGetSubString(links, 3, 3) + llGetSubString(links, 12, 12) + llGetSubString(links, 21, 21) +
  339.             llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);            
  340.     }
  341.     else if(middle == 1)
  342.     {
  343.         euleraxis = llList2Vector(euleraxes, 1);
  344.         axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
  345.         edges =
  346.             llGetSubString(links, 3, 3) + llGetSubString(links, 4, 4) + llGetSubString(links, 5, 5) +
  347.             llGetSubString(links, 12, 12) + llGetSubString(links, 14, 14) +
  348.             llGetSubString(links, 21, 21) + llGetSubString(links, 22, 22) + llGetSubString(links, 23, 23);        
  349.            
  350.         rinks =
  351.             llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
  352.             llGetSubString(links, 21, 21) + llGetSubString(links, 12, 12) + llGetSubString(links, 3, 3) +
  353.             llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
  354.            
  355.             llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
  356.             llGetSubString(links, 22, 22) + llGetSubString(links, 13, 13) + llGetSubString(links, 4, 4) +
  357.             llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17) +
  358.            
  359.             llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
  360.             llGetSubString(links, 23, 23) + llGetSubString(links, 14, 14) + llGetSubString(links, 5, 5) +
  361.             llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);            
  362.     }
  363.     else if(middle == 2)
  364.     {
  365.         euleraxis = llList2Vector(euleraxes, 3);
  366.         axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
  367.        
  368.         edges =
  369.             llGetSubString(links, 7, 7) + llGetSubString(links, 4, 4) + llGetSubString(links, 1, 1) +
  370.             llGetSubString(links, 16, 16) + llGetSubString(links, 10, 10) +
  371.             llGetSubString(links, 25, 25) + llGetSubString(links, 22, 22) + llGetSubString(links, 19, 19);
  372.            
  373.         rinks =
  374.             llGetSubString(links, 0, 0) + llGetSubString(links, 7, 7) + llGetSubString(links, 2, 2) +
  375.             llGetSubString(links, 3, 3) + llGetSubString(links, 16, 16) + llGetSubString(links, 5, 5) +
  376.             llGetSubString(links, 6, 6) + llGetSubString(links, 25, 25) + llGetSubString(links, 8, 8) +
  377.            
  378.             llGetSubString(links, 9, 9) + llGetSubString(links, 4, 4) + llGetSubString(links, 11, 11) +
  379.             llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
  380.             llGetSubString(links, 15, 15) + llGetSubString(links, 22, 22) + llGetSubString(links, 17, 17) +
  381.            
  382.             llGetSubString(links, 18, 18) + llGetSubString(links, 1, 1) + llGetSubString(links, 20, 20) +
  383.             llGetSubString(links, 21, 21) + llGetSubString(links, 10, 10) + llGetSubString(links, 23, 23) +
  384.             llGetSubString(links, 24, 24) + llGetSubString(links, 19, 19) + llGetSubString(links, 26, 26);            
  385.     }
  386.     else if(middle == 3)
  387.     {
  388.         euleraxis = llList2Vector(euleraxes, 3);
  389.         axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
  390.        
  391.         edges =
  392.             llGetSubString(links, 7, 7) + llGetSubString(links, 4, 4) + llGetSubString(links, 1, 1) +
  393.             llGetSubString(links, 16, 16) + llGetSubString(links, 10, 10) +
  394.             llGetSubString(links, 25, 25) + llGetSubString(links, 22, 22) + llGetSubString(links, 19, 19);
  395.            
  396.         rinks =
  397.             llGetSubString(links, 0, 0) + llGetSubString(links, 19, 19) + llGetSubString(links, 2, 2) +
  398.             llGetSubString(links, 3, 3) + llGetSubString(links, 10, 10) + llGetSubString(links, 5, 5) +
  399.             llGetSubString(links, 6, 6) + llGetSubString(links, 1, 1) + llGetSubString(links, 8, 8) +
  400.            
  401.             llGetSubString(links, 9, 9) + llGetSubString(links, 22, 22) + llGetSubString(links, 11, 11) +
  402.             llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
  403.             llGetSubString(links, 15, 15) + llGetSubString(links, 4, 4) + llGetSubString(links, 17, 17) +
  404.            
  405.             llGetSubString(links, 18, 18) + llGetSubString(links, 25, 25) + llGetSubString(links, 20, 20) +
  406.             llGetSubString(links, 21, 21) + llGetSubString(links, 16, 16) + llGetSubString(links, 23, 23) +
  407.             llGetSubString(links, 24, 24) + llGetSubString(links, 7, 7) + llGetSubString(links, 26, 26);            
  408.     }
  409.     else if(middle == 4)
  410.     {
  411.         euleraxis = llList2Vector(euleraxes, 0);
  412.         axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
  413.        
  414.         edges =
  415.             llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
  416.             llGetSubString(links, 12, 12) + llGetSubString(links, 14, 14) +
  417.             llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17);
  418.            
  419.         rinks =
  420.             llGetSubString(links, 0, 8) +
  421.             llGetSubString(links, 15, 15) + llGetSubString(links, 12, 12) + llGetSubString(links, 9, 9) +
  422.             llGetSubString(links, 16, 16) + llGetSubString(links, 13, 13) + llGetSubString(links, 10, 10) +
  423.             llGetSubString(links, 17, 17) + llGetSubString(links, 14, 14) + llGetSubString(links, 11, 11) +
  424.             llGetSubString(links, 18, 26);
  425.     }
  426.     else if(middle == 5)
  427.     {
  428.         euleraxis = llList2Vector(euleraxes, 0);
  429.         axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
  430.        
  431.         edges =
  432.             llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
  433.             llGetSubString(links, 12, 12) + llGetSubString(links, 14, 14) +
  434.             llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17);
  435.            
  436.         rinks =
  437.             llGetSubString(links, 0, 8) +
  438.             llGetSubString(links, 11, 11) + llGetSubString(links, 14, 14) + llGetSubString(links, 17, 17) +
  439.             llGetSubString(links, 10, 10) + llGetSubString(links, 13, 13) + llGetSubString(links, 16, 16) +
  440.             llGetSubString(links, 9, 9) + llGetSubString(links, 12, 12) + llGetSubString(links, 15, 15) +
  441.             llGetSubString(links, 18, 26);
  442.     }
  443.  
  444.     if(rinks)
  445.     {
  446.         links = rinks;
  447.         rinks = "";
  448.     }
  449. }
  450.  
  451. run()
  452. {
  453.     float originalsize = 1.000000;
  454.     vector size = llList2Vector(llGetLinkPrimitiveParams(1, [PRIM_SIZE]), 0);
  455.     float scale = size.x/originalsize;
  456.  
  457.     list resetposs = [
  458.         <-0.50000, 0.50000, 0.50000>,
  459.         <0.00000, 0.50000, 0.50000>,
  460.         <0.50000, 0.50000, 0.50000>,
  461.         <-0.50000, 0.00000, 0.50000>,
  462.         <0.00000, 0.00000, 0.50000>,
  463.         <0.50000, 0.00000, 0.50000>,
  464.         <-0.50000, -0.50000, 0.50000>,
  465.         <0.00000, -0.50000, 0.50000>,
  466.         <0.50000, -0.50000, 0.50000>,
  467.         <-0.50000, 0.50000, 0.00000>,
  468.         <0.00000, 0.50000, 0.00000>,
  469.         <0.50000, 0.50000, 0.00000>,
  470.         <-0.50000, 0.00000, 0.00000>,
  471.         <0, 0, 0>,
  472.         <0.50000, 0.00000, 0.00000>,
  473.         <-0.50000, -0.50000, 0.00000>,
  474.         <0.00000, -0.50000, 0.00000>,
  475.         <0.50000, -0.50000, 0.00000>,
  476.         <-0.50000, 0.50000, -0.50000>,
  477.         <0.00000, 0.50000, -0.50000>,
  478.         <0.50000, 0.50000, -0.50000>,
  479.         <-0.50000, 0.00000, -0.50000>,
  480.         <0.00000, 0.00000, -0.50000>,
  481.         <0.50000, 0.00000, -0.50000>,
  482.         <-0.50000, -0.50000, -0.50000>,
  483.         <0.00000, -0.50000, -0.50000>,
  484.         <0.50000, -0.50000, -0.50000>
  485.         ];
  486.        
  487.     list params;
  488.    
  489.     if(!initialized)
  490.     {
  491.         integer i;
  492.         for(i = 0; i < 27; i++)
  493.         {
  494.             integer link = a2dec(llGetSubString(links, i, i));
  495.             vector pos = llList2Vector(resetposs, i)*scale;
  496.             rotation rot = ZERO_ROTATION;
  497.            
  498.             if(link != 1)
  499.                 params += [PRIM_LINK_TARGET, link, PRIM_POS_LOCAL, pos, PRIM_ROT_LOCAL, rot];
  500.         }
  501.         resetposs = [];
  502.         llSetLinkPrimitiveParamsFast(1, params);
  503.         params = [];
  504.         initialized = TRUE;
  505.     }
  506.  
  507.     if(turning)
  508.     {
  509.        
  510.         vector centerpos;
  511.         rotation centerrot;
  512.         if(iscenter != -1)
  513.         {
  514.             centerpos = llList2Vector(llGetLinkPrimitiveParams(centerlink, [PRIM_POS_LOCAL]), 0);
  515.             centerrot = llList2Rot(llGetLinkPrimitiveParams(centerlink, [PRIM_ROT_LOCAL]), 0);
  516.             params += [PRIM_LINK_TARGET, centerlink, PRIM_ROT_LOCAL, centerrot*axisrot];
  517.         }
  518.         else
  519.             centerpos = ZERO_VECTOR;
  520.        
  521.         integer num = llStringLength(edges);
  522.         integer i;
  523.         for(i = 0; i < num; i++)
  524.         {
  525.             integer link = a2dec(llGetSubString(edges, i, i));
  526.             vector pos = llList2Vector(llGetLinkPrimitiveParams(link, [PRIM_POS_LOCAL]), 0);
  527.             rotation rot = llList2Rot(llGetLinkPrimitiveParams(link, [PRIM_ROT_LOCAL]), 0);
  528.            
  529.             vector offset = centerpos + (pos - centerpos)*axisrot;
  530.             rotation offsetrot = rot*axisrot;
  531.             params += [PRIM_LINK_TARGET, link, PRIM_POS_LOCAL, offset, PRIM_ROT_LOCAL, offsetrot];
  532.         }
  533.     }
  534.  
  535.     llSetLinkPrimitiveParamsFast(1, params);    
  536. }
  537.  
  538. default
  539. {
  540.     state_entry()
  541.     {
  542.        
  543.         llSetText("", <1, 1, 1>, 1);
  544.         findparts();
  545.         run();
  546.        
  547.         llSetTimerEvent(interval);
  548.         llSetObjectDesc("mem: " + (string)llGetFreeMemory());
  549.     }
  550.  
  551.     touch_start(integer total_number)
  552.     {
  553.         float originalsize = 1.000000;
  554.         vector size = llList2Vector(llGetLinkPrimitiveParams(1, [PRIM_SIZE]), 0);
  555.         float scale = size.x/originalsize;
  556.    
  557.         vector st = llDetectedTouchST(0) - <0.5, 0.5, 0>;
  558.         float mag = llVecMag(st);
  559.         vector pos = ((llDetectedTouchPos(0) - llGetPos())/llGetRot())/scale;
  560.         integer link = llDetectedLinkNumber(0);
  561.        
  562.         center = -1;
  563.         middle = -1;
  564.         edgeindex = -1;
  565.  
  566.         touchedcenterindex = llSubStringIndex(links, dec2a(link));//llListFindList(links, [link]);
  567.         iscenter = llListFindList(centerindices, [touchedcenterindex]);
  568.         if(!turning)
  569.         {
  570.             if(iscenter != -1)
  571.             {
  572.                 center = touchedcenterindex;
  573.                 centerlink = a2dec(llGetSubString(links, touchedcenterindex, touchedcenterindex));//llList2Integer(links, touchedcenterindex);
  574.                
  575.                 if(mag <= 0.25)
  576.                 {
  577.                     turning = maxturning;
  578.                     turninginc = -1;
  579.                     initturning();
  580.                 }
  581.                 else
  582.                 {
  583.                     turning = -maxturning;
  584.                     turninginc = 1;
  585.                     initturning();
  586.                 }
  587.             }
  588.             else
  589.             {
  590.                 center = -1;
  591.                 edgeindex = llSubStringIndex(links, dec2a(link));//llListFindList(links, [link]);
  592.                
  593.                 if( (edgeindex == 3 && pos.z >= 0.75) ||
  594.                     (edgeindex == 5 && pos.z < 0.75)  ||
  595.                     (edgeindex == 21 && pos.z > -0.75) ||
  596.                     (edgeindex == 23 && pos.z <= -0.75)
  597.                     )
  598.                 {
  599.                     turning = -maxturning;
  600.                     turninginc = 1;
  601.                     middle = 0;// ccw
  602.                     initturning();                    
  603.                 }
  604.                 else if( (edgeindex == 5 && pos.z >= 0.75) ||
  605.                          (edgeindex == 3 && pos.z < 0.75) ||
  606.                          (edgeindex == 21 && pos.z <= -0.75) ||
  607.                          (edgeindex == 23 && pos.z > -0.75)
  608.                     )
  609.                 {
  610.                     turning = maxturning;
  611.                     turninginc = -1;
  612.                     middle = 1;// cw
  613.                     initturning();                    
  614.                 }
  615.                 else if( (edgeindex == 1 && pos.z >= 0.75) ||
  616.                          (edgeindex == 7 && pos.z < 0.75) ||
  617.                          (edgeindex == 25 && pos.z <= -0.75) ||
  618.                          (edgeindex == 19 && pos.z > -0.75)
  619.                
  620.                     )              
  621.                 {
  622.                     turning = -maxturning;
  623.                     turninginc = 1;
  624.                     middle = 2;
  625.                     initturning();                    
  626.                 }
  627.                 else if( (edgeindex == 7 && pos.z >= 0.75) ||
  628.                          (edgeindex == 1 && pos.z < 0.75) ||
  629.                          (edgeindex == 25 && pos.z > -0.75) ||
  630.                          (edgeindex == 19 && pos.z <= -0.75)
  631.                
  632.                     )              
  633.                 {
  634.                     turning = maxturning;
  635.                     turninginc = -1;
  636.                     middle = 3;
  637.                     initturning();                    
  638.                 }
  639.                 else if( (edgeindex == 11 && pos.y >= 0.75) ||
  640.                          (edgeindex == 9 && pos.y < 0.75) ||
  641.                          (edgeindex == 15 && pos.y <= -0.75) ||
  642.                          (edgeindex == 17 && pos.y > -0.75)
  643.                      )
  644.                 {
  645.                     turning = -maxturning;
  646.                     turninginc = 1;
  647.                     middle = 4;
  648.                     initturning();
  649.                 }
  650.                 else if( (edgeindex == 9 && pos.y >= 0.75) ||
  651.                          (edgeindex == 11 && pos.y < 0.75) ||
  652.                          (edgeindex == 15 && pos.y > -0.75) ||
  653.                          (edgeindex == 17 && pos.y <= -0.75)
  654.                     )
  655.                 {
  656.                     turning = maxturning;
  657.                     turninginc = -1;
  658.                     middle = 5;
  659.                     initturning();                    
  660.                 }
  661.             }
  662.         }
  663. /*                  
  664.         string text =
  665.             "edgeindex: " + (string)edgeindex +
  666.             "\npos: " + (string)pos +
  667.             "\nmiddle: " + (string)middle +
  668.             "\ncenter: " + (string)center
  669.             ;
  670.         llSetText(text, <1, 1, 1>, 1);          
  671. */
  672.     }
  673.    
  674.     timer()
  675.     {
  676.         if(turning)
  677.         {
  678.             run();
  679.            
  680.             turning += turninginc;
  681.             if(!turning)
  682.             {
  683.                 center = -1;    
  684.                 llSetObjectDesc("mem: " + (string)llGetFreeMemory());
  685.             }  
  686.         }          
  687.     }
  688. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement