water splash scriptt.lsl 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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:146
  8. // :REV:1
  9. // :WORLD:Second Life
  10. // :DESCRIPTION:
  11. // water splash
  12. // :CODE:
  13. float maxsysage = 0.0;
  14. float maxspeed = 0.3;
  15. float minspeed = 0.15;
  16. float burstrad = 0.0;
  17. integer burstcount = 20;
  18. float burstrate = 0.01;
  19. float outangle = 0.075;
  20. float inangle = 0;
  21. vector omega = <0.0,0.0,0.0>;
  22. float startalph = 0.75;
  23. float endalph = 0.015;
  24. vector startscale = <2.0,2.0,2.0>;
  25. vector endscale = <4.0,4.0,4.0>;
  26. float maxage = 1.7;
  27. vector accel = <0.0, 0.0, 1.0>;
  28. string texture = "";
  29. vector pos;
  30. vector vel;
  31. vector up;
  32. float ground = 0.0;
  33. float water = 0.0;
  34. float height = 0.0;
  35. float occilation = 1.25;
  36. float start_mult = 0.1;
  37. float rad;
  38. integer occilate = TRUE;
  39. integer started = FALSE;
  40. Particles(integer part_on)
  41. {
  42. maxage = 0.001;
  43. if (!part_on) jump particles;
  44. vel = llGetVel() * 0.2;
  45. ground = llGround(vel);
  46. water = llWater(vel);
  47. if (ground < water) {
  48. maxspeed = 2.5;
  49. minspeed = 1.25;
  50. occilation = 2.0;
  51. endscale = <3.0,3.0,3.0>;
  52. maxage = 2.0;
  53. ground = water;
  54. texture = "7f70a931-6300-8dbc-caca-8b09a9c2cf11";
  55. } else {
  56. maxspeed = 1.75;
  57. minspeed = 0.875;
  58. occilation = 1.25;
  59. endscale = <4.0,4.0,4.0>;
  60. maxage = 1.75;
  61. texture = "Water Particle - Mist";
  62. }
  63. pos = llGetPos() + vel;
  64. up = llRot2Up(llGetRot());
  65. height = pos.z - ground - 0.5;
  66. height += (1.0 - up.z) * height;
  67. if (height < 6.0 && height > -1.0) {
  68. rad = 1.5 + (occilate * occilation);
  69. outangle = PI - llAtan2(rad, height);
  70. inangle = outangle + 0.15;
  71. burstrad = rad / llSin(outangle);
  72. startalph = ((llFabs(height) / -8.57) + 0.8 - (!occilate * 0.15)) * start_mult;
  73. endalph = ((llFabs(height) / -200.0) + 0.04) * start_mult;
  74. maxsysage = 0.0;
  75. part_on = TRUE;
  76. } else {
  77. maxsysage = 0.01;
  78. part_on = FALSE;
  79. }
  80. @particles;
  81. //llParticleSystem([]);
  82. llParticleSystem([PSYS_PART_FLAGS,
  83. PSYS_PART_INTERP_COLOR_MASK |
  84. PSYS_PART_INTERP_SCALE_MASK |
  85. //PSYS_PART_FOLLOW_VELOCITY_MASK |
  86. PSYS_PART_WIND_MASK,
  87. PSYS_SRC_PATTERN,
  88. PSYS_SRC_PATTERN_ANGLE_CONE,
  89. PSYS_PART_START_COLOR, <1.0, 1.0, 1.0>,
  90. PSYS_PART_START_ALPHA, startalph,
  91. PSYS_PART_END_COLOR, <1.0, 1.0, 1.0>,
  92. PSYS_PART_END_ALPHA, endalph,
  93. PSYS_PART_START_SCALE, startscale,
  94. PSYS_PART_END_SCALE, endscale,
  95. PSYS_PART_MAX_AGE, maxage,
  96. PSYS_SRC_ACCEL, accel,
  97. PSYS_SRC_TEXTURE, texture,
  98. PSYS_SRC_BURST_RATE, burstrate,
  99. PSYS_SRC_ANGLE_BEGIN, inangle,
  100. PSYS_SRC_ANGLE_END, outangle,
  101. PSYS_SRC_BURST_PART_COUNT, burstcount,
  102. PSYS_SRC_BURST_RADIUS, burstrad,
  103. PSYS_SRC_BURST_SPEED_MIN, minspeed,
  104. PSYS_SRC_BURST_SPEED_MAX, maxspeed,
  105. PSYS_SRC_MAX_AGE, maxsysage,
  106. PSYS_SRC_OMEGA, omega
  107. ]);
  108. if (!part_on) {
  109. llParticleSystem([]);
  110. } else {
  111. if (started) {
  112. if (start_mult < 1.0) {
  113. start_mult += 0.075;
  114. }
  115. } else {
  116. if (start_mult > 0.0) {
  117. start_mult -= 0.05;
  118. } else {
  119. llSetTimerEvent(0.0);
  120. llParticleSystem([]);
  121. }
  122. }
  123. occilate = !occilate;
  124. }
  125. }
  126. default
  127. {
  128. state_entry()
  129. {
  130. llSetTimerEvent(0.0);
  131. Particles(FALSE);
  132. }
  133. touch_start(integer n)
  134. {
  135. started = TRUE;
  136. start_mult = 0.1;
  137. llSetTimerEvent(0.01);
  138. }
  139. link_message(integer sender, integer num, string str, key id)
  140. {
  141. if (str == "on") {
  142. started = TRUE;
  143. start_mult = 0.1;
  144. llSetTimerEvent(0.01);
  145. } else if (str == "off") {
  146. started = FALSE;
  147. llParticleSystem([]);
  148. Particles(FALSE);
  149. }
  150. }
  151. timer()
  152. {
  153. Particles(TRUE);
  154. }
  155. }