Whale global movement script.lsl 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. // :CATEGORY:Blue Whale
  2. // :NAME:BlueWhale
  3. // :AUTHOR:Ferd Frederix
  4. // :CREATED:2013-09-06
  5. // :EDITED:2013-09-18 15:38:49
  6. // :ID:107
  7. // :NUM:147
  8. // :REV:1
  9. // :WORLD:Second Life
  10. // :DESCRIPTION:
  11. // global move
  12. // :CODE:
  13. integer counter;
  14. integer running;
  15. rotation myrot ;
  16. integer up = FALSE;
  17. string FWD_DIRECTION = "-y";
  18. float INTERVAL = 0.4;
  19. vector Destination;
  20. float gTau;
  21. float DAMPING = .4; // the damping rate we turn at
  22. list coords = [<193.8728,92.04382,23.0>,
  23. <171.5811,62.16372,23.0>,
  24. <148.1316,61.04683,23.0>,
  25. <131.8011,72.83285,23.0>,
  26. <131.0652,93.61875,23.0>,
  27. <144.7105,105.3626,23.0>,
  28. <153.7658,76.02143,23.0>,
  29. <156.0498,48.00506,23.0>,
  30. <150.5392,30.20997,23.0>,
  31. <132.014,23.05155,23.0>,
  32. <101.8122,40.96667,23.0>,
  33. <50.86587,108.4027,23.0>,
  34. <52.58804,123.5606,23.0>,
  35. <79.25145,161.9644,23.0>,
  36. <107.1218,173.8963,23.0>,
  37. <145.8562,178.8377,23.0>,
  38. <178.8875,159.3154,23.0>,
  39. <193.4482,147.1552,23.0>,
  40. <196.4373,116.8217,23.0>
  41. ];
  42. integer swim = 0;
  43. float calc (float i)
  44. {
  45. float val = llSin((i-20)*40 / PI) * 4;
  46. return val;
  47. }
  48. run()
  49. {
  50. llMessageLinked(LINK_SET,0,"on",NULL_KEY);
  51. llSetStatus(STATUS_PHYSICS, TRUE);
  52. }
  53. stop()
  54. {
  55. llSetStatus(STATUS_PHYSICS, FALSE);
  56. llMessageLinked(LINK_SET,0,"off",NULL_KEY);
  57. }
  58. default
  59. {
  60. state_entry()
  61. {
  62. counter = 0;
  63. Destination = llList2Vector(coords,counter);
  64. // llOwnerSay((string) Destination);
  65. llSetStatus(STATUS_PHANTOM, TRUE);
  66. llMessageLinked(LINK_SET,0,"off",NULL_KEY);
  67. llSetAlpha( 1.0, ALL_SIDES);
  68. gTau = 10.0;
  69. llSetStatus(STATUS_PHYSICS, FALSE);
  70. }
  71. timer()
  72. {
  73. vector newdest = (llVecNorm(Destination - llGetPos()) * 3) + llGetPos();
  74. swim++ ;
  75. if (swim == 20)
  76. llMessageLinked(LINK_SET,0,"on",NULL_KEY);
  77. if (swim == 27)
  78. llMessageLinked(LINK_SET,0,"off",NULL_KEY);
  79. if (swim == 35)
  80. llMessageLinked(LINK_SET,0,"on",NULL_KEY);
  81. if (swim > 37)
  82. llMessageLinked(LINK_SET,0,"off",NULL_KEY);
  83. if (swim > 20 && swim < 40)
  84. newdest.z = calc((float) swim) + 20;
  85. else
  86. newdest.z = 20;
  87. llLookAt(newdest, 1, 1.);
  88. if (swim == 80)
  89. {
  90. swim = 0;
  91. }
  92. float dist = llVecDist(Destination,llGetPos());
  93. if (dist > 5.0)
  94. llMoveToTarget(newdest, DAMPING);
  95. else
  96. {
  97. llMoveToTarget(newdest, DAMPING);
  98. counter++;
  99. if (counter >= llGetListLength(coords))
  100. counter = 0;
  101. Destination = llList2Vector(coords,counter);
  102. //llMoveToTarget(Destination, DAMPING);
  103. // llOwnerSay((string) Destination);
  104. }
  105. }
  106. touch_start(integer p)
  107. {
  108. key x = llDetectedKey(0);
  109. if (x == llGetOwner())
  110. {
  111. if (running)
  112. {
  113. llOwnerSay("Orca stopped");
  114. running = FALSE;
  115. llSetAlpha( 1.0, ALL_SIDES);
  116. stop();
  117. llSetTimerEvent(0.0);
  118. llSetStatus(STATUS_PHYSICS, FALSE);
  119. }
  120. else
  121. {
  122. llOwnerSay("Orca running");
  123. myrot = llGetRot();
  124. llSetAlpha( 0.0, ALL_SIDES);
  125. running = TRUE;
  126. llSetTimerEvent(INTERVAL);
  127. llSetStatus(STATUS_PHYSICS, TRUE);
  128. llMessageLinked(LINK_SET,0,"off",NULL_KEY);
  129. run();
  130. }
  131. }
  132. }
  133. on_rez(integer p)
  134. {
  135. llResetScript();
  136. }
  137. }