• API
• FAQ
• Tools
• Archive
daily pastebin goal
35%
SHARE
TWEET

# Untitled

a guest Mar 12th, 2019 97 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;
14.
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.     {
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.
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);
148.
149.     if(center == 4)//y)
150.     {
151.         edges =
155.
156.         if(turninginc > 0)
157.         {
158.             rinks =
163.         }
164.         else
165.         {
166.             rinks =
171.         }
172.     }
173.     else if(center == 10)//b)
174.     {
175.         edges =
179.
180.         if(turninginc > 0)
181.         {
182.             rinks =
186.
187.         }
188.         else
189.         {
190.             rinks =
194.         }
195.     }
196.     else if(center == 12)//o)
197.     {
198.         edges =
202.
203.         if(turninginc > 0)
204.         {
205.             rinks =
209.
213.
217.         }
218.         else
219.         {
220.             rinks =
224.
228.
232.         }
233.     }
234.     else if(center == 14)//r)
235.     {
236.         edges =
240.
241.         if(turninginc > 0)
242.         {
243.             rinks =
247.
251.
255.         }
256.         else
257.         {
258.             rinks =
262.
266.
270.         }
271.     }
272.     else if(center == 16)//g)
273.     {
274.         edges =
278.
279.         if(turninginc > 0)
280.         {
281.             rinks =
285.
286.         }
287.         else
288.         {
289.             rinks =
293.         }
294.     }
295.     else if(center == 22)//w)
296.     {
297.         edges =
301.
302.         if(turninginc > 0)
303.         {
304.             rinks =
309.         }
310.         else
311.         {
312.             rinks =
317.         }
318.     }
319.     else if(middle == 0)
320.     {
321.         euleraxis = llList2Vector(euleraxes, 1);
323.         edges =
327.
328.         rinks =
332.
336.
340.     }
341.     else if(middle == 1)
342.     {
343.         euleraxis = llList2Vector(euleraxes, 1);
345.         edges =
349.
350.         rinks =
354.
358.
362.     }
363.     else if(middle == 2)
364.     {
365.         euleraxis = llList2Vector(euleraxes, 3);
367.
368.         edges =
372.
373.         rinks =
377.
381.
385.     }
386.     else if(middle == 3)
387.     {
388.         euleraxis = llList2Vector(euleraxes, 3);
390.
391.         edges =
395.
396.         rinks =
400.
404.
408.     }
409.     else if(middle == 4)
410.     {
411.         euleraxis = llList2Vector(euleraxes, 0);
413.
414.         edges =
418.
419.         rinks =
425.     }
426.     else if(middle == 5)
427.     {
428.         euleraxis = llList2Vector(euleraxes, 0);
430.
431.         edges =
435.
436.         rinks =
442.     }
443.
444.     if(rinks)
445.     {
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.         {
495.             vector pos = llList2Vector(resetposs, i)*scale;
496.             rotation rot = ZERO_ROTATION;
497.
500.         }
501.         resetposs = [];
503.         params = [];
504.         initialized = TRUE;
505.     }
506.
507.     if(turning)
508.     {
509.
510.         vector centerpos;
511.         rotation centerrot;
512.         if(iscenter != -1)
513.         {
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));
528.
529.             vector offset = centerpos + (pos - centerpos)*axisrot;
530.             rotation offsetrot = rot*axisrot;
532.         }
533.     }
534.
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;
561.
562.         center = -1;
563.         middle = -1;
564.         edgeindex = -1;
565.
567.         iscenter = llListFindList(centerindices, [touchedcenterindex]);
568.         if(!turning)
569.         {
570.             if(iscenter != -1)
571.             {
572.                 center = 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;
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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top