Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float interval = 0.05;
- integer maxturning = 10;
- float turnangleinc = 9;
- integer turninginc;
- integer initialized;
- integer turning;
- integer center = -1;
- integer touchedcenterindex;
- integer edgeindex = -1;
- integer middle;
- integer iscenter;
- integer centerlink;
- string links;
- list centerindices = [4, 10, 12, 14, 16, 22];
- string edges;
- list euleraxes = [<0, 0, 1>, <0, 1, 0>, <-1, 0, 0>, <1, 0, 0>, <0, -1, 0>, <0, 0, -1>];
- vector euleraxis;
- rotation axisrot;
- string c = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+=";
- integer yr;
- integer ygr;
- integer yg;
- integer yog;
- integer yo;
- integer ybo;
- integer yb;
- integer yrb;
- integer y;
- integer r;
- integer gr;
- integer g;
- integer og;
- integer o;
- integer bo;
- integer b;
- integer rb;
- integer wrg;
- integer wr;
- integer wbr;
- integer wb;
- integer w;
- integer wob;
- integer wo;
- integer wgo;
- integer wg;
- findparts()
- {
- integer i;
- for(i = 2; i < llGetNumberOfPrims() + 1; i++)
- {
- string name = llGetLinkName(i);
- if(name == "yr")
- yr = i;
- else if(name == "ygr")
- ygr = i;
- else if(name == "yg")
- yg = i;
- else if(name == "yog")
- yog = i;
- else if(name == "yo")
- yo = i;
- else if(name == "ybo")
- ybo = i;
- else if(name == "yb")
- yb = i;
- else if(name == "yrb")
- yrb = i;
- else if(name == "y")
- y = i;
- else if(name == "r")
- r = i;
- else if(name == "gr")
- gr = i;
- else if(name == "g")
- g = i;
- else if(name == "og")
- og = i;
- else if(name == "o")
- o = i;
- else if(name == "bo")
- bo = i;
- else if(name == "b")
- b = i;
- else if(name == "rb")
- rb = i;
- else if(name == "wrg")
- wrg = i;
- else if(name == "wr")
- wr = i;
- else if(name == "wbr")
- wbr = i;
- else if(name == "wb")
- wb = i;
- else if(name == "w")
- w = i;
- else if(name == "wob")
- wob = i;
- else if(name == "wo")
- wo = i;
- else if(name == "wgo")
- wgo = i;
- else if(name == "wg")
- wg = i;
- }
- links =
- dec2a(ybo) + dec2a(yb) + dec2a(yrb) +// 0 1 2
- dec2a(yo) + dec2a(y) + dec2a(yr) + // 3 4 5
- dec2a(yog) + dec2a(yg) + dec2a(ygr) +// 6 7 8
- dec2a(bo) + dec2a(b) + dec2a(rb) + // 9 10 11
- dec2a(o) + dec2a(1) + dec2a(r) + // 12 13 14
- dec2a(og) + dec2a(g) + dec2a(gr) + // 15 16 17
- dec2a(wob) + dec2a(wb) + dec2a(wbr) +// 18 19 20
- dec2a(wo) + dec2a(w) + dec2a(wr) + // 21 22 23
- dec2a(wgo) + dec2a(wg) + dec2a(wrg) // 24 25 26
- ;
- }
- integer a2dec(string a)
- {
- return ( (llSubStringIndex(c, llGetSubString(a, 0, 0))<<6) + llSubStringIndex(c, llGetSubString(a, 1, 1)) );
- }
- string dec2a(integer dec)
- {
- integer idec = (integer)dec;
- integer d1 = idec>>6;
- integer d0 = idec - (d1<<6);
- return llGetSubString(c, d1, d1) + llGetSubString(c, d0, d0);
- }
- initturning()
- {
- string rinks;
- euleraxis = llList2Vector(euleraxes, iscenter);
- axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
- if(center == 4)//y)
- {
- edges =
- llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 3, 3) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8);
- if(turninginc > 0)
- {
- rinks =
- llGetSubString(links, 6, 6) + llGetSubString(links, 3, 3) + llGetSubString(links, 0, 0) +
- llGetSubString(links, 7, 7) + llGetSubString(links, 4, 4) + llGetSubString(links, 1, 1) +
- llGetSubString(links, 8, 8) + llGetSubString(links, 5, 5) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 9, 26);
- }
- else
- {
- rinks =
- llGetSubString(links, 2, 2) + llGetSubString(links, 5, 5) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 1, 1) + llGetSubString(links, 4, 4) + llGetSubString(links, 7, 8) +
- llGetSubString(links, 0, 0) + llGetSubString(links, 3, 3) + llGetSubString(links, 6, 8) +
- llGetSubString(links, 9, 26);
- }
- }
- else if(center == 10)//b)
- {
- edges =
- llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 11, 11) + llGetSubString(links, 9, 9) +
- llGetSubString(links, 20, 20) + llGetSubString(links, 19, 19) + llGetSubString(links, 18, 18);
- if(turninginc > 0)
- {
- rinks =
- llGetSubString(links, 2, 2) + llGetSubString(links, 11, 11) + llGetSubString(links, 20, 20) + llGetSubString(links, 3, 8) +
- llGetSubString(links, 1, 1) + llGetSubString(links, 10, 10) + llGetSubString(links, 19, 19) + llGetSubString(links, 12, 17) +
- llGetSubString(links, 0, 0) + llGetSubString(links, 9, 9) + llGetSubString(links, 18, 18) + llGetSubString(links, 21, 26);
- }
- else
- {
- rinks =
- llGetSubString(links, 18, 18) + llGetSubString(links, 9, 9) + llGetSubString(links, 0, 0) + llGetSubString(links, 3, 8) +
- llGetSubString(links, 19, 19) + llGetSubString(links, 10, 10) + llGetSubString(links, 1, 1) + llGetSubString(links, 12, 17) +
- llGetSubString(links, 20, 20) + llGetSubString(links, 11, 11) + llGetSubString(links, 2, 2) + llGetSubString(links, 21, 26);
- }
- }
- else if(center == 12)//o)
- {
- edges =
- llGetSubString(links, 0, 0) + llGetSubString(links, 3, 3) + llGetSubString(links, 6, 6) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 15, 15) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 21, 21) + llGetSubString(links, 24, 24);
- if(turninginc > 0)
- {
- rinks =
- llGetSubString(links, 18, 18) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 4, 4) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 0, 0) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 3, 3) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 22, 22) + llGetSubString(links, 23, 23) +
- llGetSubString(links, 6, 6) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
- }
- else
- {
- rinks =
- llGetSubString(links, 6, 6) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 4, 4) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 3, 3) + llGetSubString(links, 10, 19) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 0, 0) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 22, 22) + llGetSubString(links, 23, 23) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
- }
- }
- else if(center == 14)//r)
- {
- edges =
- llGetSubString(links, 8, 8) + llGetSubString(links, 5, 5) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 11, 11) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 26, 26) + llGetSubString(links, 23, 23) + llGetSubString(links, 20, 20);
- if(turninginc > 0)
- {
- rinks =
- llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 3, 3) + llGetSubString(links, 4, 4) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 26, 26) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 23, 23) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 22, 22) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 20, 20);
- }
- else
- {
- rinks =
- llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 20, 20) +
- llGetSubString(links, 3, 3) + llGetSubString(links, 4, 4) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 23, 23) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 26, 26) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 22, 22) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 8, 8);
- }
- }
- else if(center == 16)//g)
- {
- edges =
- llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
- if(turninginc > 0)
- {
- rinks =
- llGetSubString(links, 0, 5) + llGetSubString(links, 24, 24) + llGetSubString(links, 15, 15) + llGetSubString(links, 6, 6) +
- llGetSubString(links, 9, 14) + llGetSubString(links, 25, 25) + llGetSubString(links, 16, 16) + llGetSubString(links, 7, 7) +
- llGetSubString(links, 18, 23) + llGetSubString(links, 26, 26) + llGetSubString(links, 17, 17) + llGetSubString(links, 8, 8);
- }
- else
- {
- rinks =
- llGetSubString(links, 0, 5) + llGetSubString(links, 8, 8) + llGetSubString(links, 17, 17) + llGetSubString(links, 26, 26) +
- llGetSubString(links, 9, 14) + llGetSubString(links, 7, 7) + llGetSubString(links, 16, 16) + llGetSubString(links, 25, 25) +
- llGetSubString(links, 18, 23) + llGetSubString(links, 6, 6) + llGetSubString(links, 15, 15) + llGetSubString(links, 24, 24);
- }
- }
- else if(center == 22)//w)
- {
- edges =
- llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 23, 23) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
- if(turninginc > 0)
- {
- rinks =
- llGetSubString(links, 0, 17) +
- llGetSubString(links, 20, 20) + llGetSubString(links, 23, 23) + llGetSubString(links, 26, 26) +
- llGetSubString(links, 19, 19) + llGetSubString(links, 22, 22) + llGetSubString(links, 25, 25) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 21, 21) + llGetSubString(links, 24, 24);
- }
- else
- {
- rinks =
- llGetSubString(links, 0, 17) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 21, 21) + llGetSubString(links, 18, 18) +
- llGetSubString(links, 25, 25) + llGetSubString(links, 22, 22) + llGetSubString(links, 19, 19) +
- llGetSubString(links, 26, 26) + llGetSubString(links, 23, 23) + llGetSubString(links, 20, 20);
- }
- }
- else if(middle == 0)
- {
- euleraxis = llList2Vector(euleraxes, 1);
- axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
- edges =
- llGetSubString(links, 3, 3) + llGetSubString(links, 4, 4) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 22, 22) + llGetSubString(links, 23, 23);
- rinks =
- llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 5, 5) + llGetSubString(links, 14, 14) + llGetSubString(links, 23, 23) +
- llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 4, 4) + llGetSubString(links, 13, 13) + llGetSubString(links, 22, 22) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
- llGetSubString(links, 3, 3) + llGetSubString(links, 12, 12) + llGetSubString(links, 21, 21) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
- }
- else if(middle == 1)
- {
- euleraxis = llList2Vector(euleraxes, 1);
- axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
- edges =
- llGetSubString(links, 3, 3) + llGetSubString(links, 4, 4) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 22, 22) + llGetSubString(links, 23, 23);
- rinks =
- llGetSubString(links, 0, 0) + llGetSubString(links, 1, 1) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 12, 12) + llGetSubString(links, 3, 3) +
- llGetSubString(links, 6, 6) + llGetSubString(links, 7, 7) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 22, 22) + llGetSubString(links, 13, 13) + llGetSubString(links, 4, 4) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 19, 19) + llGetSubString(links, 20, 20) +
- llGetSubString(links, 23, 23) + llGetSubString(links, 14, 14) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 25, 25) + llGetSubString(links, 26, 26);
- }
- else if(middle == 2)
- {
- euleraxis = llList2Vector(euleraxes, 3);
- axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
- edges =
- llGetSubString(links, 7, 7) + llGetSubString(links, 4, 4) + llGetSubString(links, 1, 1) +
- llGetSubString(links, 16, 16) + llGetSubString(links, 10, 10) +
- llGetSubString(links, 25, 25) + llGetSubString(links, 22, 22) + llGetSubString(links, 19, 19);
- rinks =
- llGetSubString(links, 0, 0) + llGetSubString(links, 7, 7) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 3, 3) + llGetSubString(links, 16, 16) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 6, 6) + llGetSubString(links, 25, 25) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 4, 4) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 22, 22) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 1, 1) + llGetSubString(links, 20, 20) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 10, 10) + llGetSubString(links, 23, 23) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 19, 19) + llGetSubString(links, 26, 26);
- }
- else if(middle == 3)
- {
- euleraxis = llList2Vector(euleraxes, 3);
- axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
- edges =
- llGetSubString(links, 7, 7) + llGetSubString(links, 4, 4) + llGetSubString(links, 1, 1) +
- llGetSubString(links, 16, 16) + llGetSubString(links, 10, 10) +
- llGetSubString(links, 25, 25) + llGetSubString(links, 22, 22) + llGetSubString(links, 19, 19);
- rinks =
- llGetSubString(links, 0, 0) + llGetSubString(links, 19, 19) + llGetSubString(links, 2, 2) +
- llGetSubString(links, 3, 3) + llGetSubString(links, 10, 10) + llGetSubString(links, 5, 5) +
- llGetSubString(links, 6, 6) + llGetSubString(links, 1, 1) + llGetSubString(links, 8, 8) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 22, 22) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 13, 13) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 4, 4) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 18, 18) + llGetSubString(links, 25, 25) + llGetSubString(links, 20, 20) +
- llGetSubString(links, 21, 21) + llGetSubString(links, 16, 16) + llGetSubString(links, 23, 23) +
- llGetSubString(links, 24, 24) + llGetSubString(links, 7, 7) + llGetSubString(links, 26, 26);
- }
- else if(middle == 4)
- {
- euleraxis = llList2Vector(euleraxes, 0);
- axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
- edges =
- llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17);
- rinks =
- llGetSubString(links, 0, 8) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 12, 12) + llGetSubString(links, 9, 9) +
- llGetSubString(links, 16, 16) + llGetSubString(links, 13, 13) + llGetSubString(links, 10, 10) +
- llGetSubString(links, 17, 17) + llGetSubString(links, 14, 14) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 18, 26);
- }
- else if(middle == 5)
- {
- euleraxis = llList2Vector(euleraxes, 0);
- axisrot = llEuler2Rot(euleraxis*(turnangleinc*(-turninginc)*DEG_TO_RAD));
- edges =
- llGetSubString(links, 9, 9) + llGetSubString(links, 10, 10) + llGetSubString(links, 11, 11) +
- llGetSubString(links, 12, 12) + llGetSubString(links, 14, 14) +
- llGetSubString(links, 15, 15) + llGetSubString(links, 16, 16) + llGetSubString(links, 17, 17);
- rinks =
- llGetSubString(links, 0, 8) +
- llGetSubString(links, 11, 11) + llGetSubString(links, 14, 14) + llGetSubString(links, 17, 17) +
- llGetSubString(links, 10, 10) + llGetSubString(links, 13, 13) + llGetSubString(links, 16, 16) +
- llGetSubString(links, 9, 9) + llGetSubString(links, 12, 12) + llGetSubString(links, 15, 15) +
- llGetSubString(links, 18, 26);
- }
- if(rinks)
- {
- links = rinks;
- rinks = "";
- }
- }
- run()
- {
- float originalsize = 1.000000;
- vector size = llList2Vector(llGetLinkPrimitiveParams(1, [PRIM_SIZE]), 0);
- float scale = size.x/originalsize;
- list resetposs = [
- <-0.50000, 0.50000, 0.50000>,
- <0.00000, 0.50000, 0.50000>,
- <0.50000, 0.50000, 0.50000>,
- <-0.50000, 0.00000, 0.50000>,
- <0.00000, 0.00000, 0.50000>,
- <0.50000, 0.00000, 0.50000>,
- <-0.50000, -0.50000, 0.50000>,
- <0.00000, -0.50000, 0.50000>,
- <0.50000, -0.50000, 0.50000>,
- <-0.50000, 0.50000, 0.00000>,
- <0.00000, 0.50000, 0.00000>,
- <0.50000, 0.50000, 0.00000>,
- <-0.50000, 0.00000, 0.00000>,
- <0, 0, 0>,
- <0.50000, 0.00000, 0.00000>,
- <-0.50000, -0.50000, 0.00000>,
- <0.00000, -0.50000, 0.00000>,
- <0.50000, -0.50000, 0.00000>,
- <-0.50000, 0.50000, -0.50000>,
- <0.00000, 0.50000, -0.50000>,
- <0.50000, 0.50000, -0.50000>,
- <-0.50000, 0.00000, -0.50000>,
- <0.00000, 0.00000, -0.50000>,
- <0.50000, 0.00000, -0.50000>,
- <-0.50000, -0.50000, -0.50000>,
- <0.00000, -0.50000, -0.50000>,
- <0.50000, -0.50000, -0.50000>
- ];
- list params;
- if(!initialized)
- {
- integer i;
- for(i = 0; i < 27; i++)
- {
- integer link = a2dec(llGetSubString(links, i, i));
- vector pos = llList2Vector(resetposs, i)*scale;
- rotation rot = ZERO_ROTATION;
- if(link != 1)
- params += [PRIM_LINK_TARGET, link, PRIM_POS_LOCAL, pos, PRIM_ROT_LOCAL, rot];
- }
- resetposs = [];
- llSetLinkPrimitiveParamsFast(1, params);
- params = [];
- initialized = TRUE;
- }
- if(turning)
- {
- vector centerpos;
- rotation centerrot;
- if(iscenter != -1)
- {
- centerpos = llList2Vector(llGetLinkPrimitiveParams(centerlink, [PRIM_POS_LOCAL]), 0);
- centerrot = llList2Rot(llGetLinkPrimitiveParams(centerlink, [PRIM_ROT_LOCAL]), 0);
- params += [PRIM_LINK_TARGET, centerlink, PRIM_ROT_LOCAL, centerrot*axisrot];
- }
- else
- centerpos = ZERO_VECTOR;
- integer num = llStringLength(edges);
- integer i;
- for(i = 0; i < num; i++)
- {
- integer link = a2dec(llGetSubString(edges, i, i));
- vector pos = llList2Vector(llGetLinkPrimitiveParams(link, [PRIM_POS_LOCAL]), 0);
- rotation rot = llList2Rot(llGetLinkPrimitiveParams(link, [PRIM_ROT_LOCAL]), 0);
- vector offset = centerpos + (pos - centerpos)*axisrot;
- rotation offsetrot = rot*axisrot;
- params += [PRIM_LINK_TARGET, link, PRIM_POS_LOCAL, offset, PRIM_ROT_LOCAL, offsetrot];
- }
- }
- llSetLinkPrimitiveParamsFast(1, params);
- }
- default
- {
- state_entry()
- {
- llSetText("", <1, 1, 1>, 1);
- findparts();
- run();
- llSetTimerEvent(interval);
- llSetObjectDesc("mem: " + (string)llGetFreeMemory());
- }
- touch_start(integer total_number)
- {
- float originalsize = 1.000000;
- vector size = llList2Vector(llGetLinkPrimitiveParams(1, [PRIM_SIZE]), 0);
- float scale = size.x/originalsize;
- vector st = llDetectedTouchST(0) - <0.5, 0.5, 0>;
- float mag = llVecMag(st);
- vector pos = ((llDetectedTouchPos(0) - llGetPos())/llGetRot())/scale;
- integer link = llDetectedLinkNumber(0);
- center = -1;
- middle = -1;
- edgeindex = -1;
- touchedcenterindex = llSubStringIndex(links, dec2a(link));//llListFindList(links, [link]);
- iscenter = llListFindList(centerindices, [touchedcenterindex]);
- if(!turning)
- {
- if(iscenter != -1)
- {
- center = touchedcenterindex;
- centerlink = a2dec(llGetSubString(links, touchedcenterindex, touchedcenterindex));//llList2Integer(links, touchedcenterindex);
- if(mag <= 0.25)
- {
- turning = maxturning;
- turninginc = -1;
- initturning();
- }
- else
- {
- turning = -maxturning;
- turninginc = 1;
- initturning();
- }
- }
- else
- {
- center = -1;
- edgeindex = llSubStringIndex(links, dec2a(link));//llListFindList(links, [link]);
- if( (edgeindex == 3 && pos.z >= 0.75) ||
- (edgeindex == 5 && pos.z < 0.75) ||
- (edgeindex == 21 && pos.z > -0.75) ||
- (edgeindex == 23 && pos.z <= -0.75)
- )
- {
- turning = -maxturning;
- turninginc = 1;
- middle = 0;// ccw
- initturning();
- }
- else if( (edgeindex == 5 && pos.z >= 0.75) ||
- (edgeindex == 3 && pos.z < 0.75) ||
- (edgeindex == 21 && pos.z <= -0.75) ||
- (edgeindex == 23 && pos.z > -0.75)
- )
- {
- turning = maxturning;
- turninginc = -1;
- middle = 1;// cw
- initturning();
- }
- else if( (edgeindex == 1 && pos.z >= 0.75) ||
- (edgeindex == 7 && pos.z < 0.75) ||
- (edgeindex == 25 && pos.z <= -0.75) ||
- (edgeindex == 19 && pos.z > -0.75)
- )
- {
- turning = -maxturning;
- turninginc = 1;
- middle = 2;
- initturning();
- }
- else if( (edgeindex == 7 && pos.z >= 0.75) ||
- (edgeindex == 1 && pos.z < 0.75) ||
- (edgeindex == 25 && pos.z > -0.75) ||
- (edgeindex == 19 && pos.z <= -0.75)
- )
- {
- turning = maxturning;
- turninginc = -1;
- middle = 3;
- initturning();
- }
- else if( (edgeindex == 11 && pos.y >= 0.75) ||
- (edgeindex == 9 && pos.y < 0.75) ||
- (edgeindex == 15 && pos.y <= -0.75) ||
- (edgeindex == 17 && pos.y > -0.75)
- )
- {
- turning = -maxturning;
- turninginc = 1;
- middle = 4;
- initturning();
- }
- else if( (edgeindex == 9 && pos.y >= 0.75) ||
- (edgeindex == 11 && pos.y < 0.75) ||
- (edgeindex == 15 && pos.y > -0.75) ||
- (edgeindex == 17 && pos.y <= -0.75)
- )
- {
- turning = maxturning;
- turninginc = -1;
- middle = 5;
- initturning();
- }
- }
- }
- /*
- string text =
- "edgeindex: " + (string)edgeindex +
- "\npos: " + (string)pos +
- "\nmiddle: " + (string)middle +
- "\ncenter: " + (string)center
- ;
- llSetText(text, <1, 1, 1>, 1);
- */
- }
- timer()
- {
- if(turning)
- {
- run();
- turning += turninginc;
- if(!turning)
- {
- center = -1;
- llSetObjectDesc("mem: " + (string)llGetFreeMemory());
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement