Advertisement
Guest User

Untitled

a guest
Aug 31st, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class WaveAnimation : MonoBehaviour {
  5.  
  6. public float posX;
  7. public float negX;
  8. public float posZ;
  9. public float negZ;
  10.  
  11. public Vector3 Origin;
  12. public Vector3 Triangle;
  13.  
  14.  
  15. public float phase;
  16. public float amp;
  17. public float speed;
  18. public float bouyouncyoffset;
  19.  
  20.  
  21. public Vector4 wave1;
  22. public Vector2 wave1dir;
  23. public Vector4 wave2;
  24. public Vector2 wave2dir;
  25. public Vector4 wave3;
  26. public Vector2 wave3dir;
  27.  
  28.  
  29. private Vector3 pOne;
  30. private Vector3 pTwo;
  31. private Vector3 pThree;
  32. private Vector3 pFour;
  33. private Vector3 currentpos;
  34. Quaternion currentROT;
  35. private GameObject sphere1;
  36. private GameObject sphere2;
  37. private GameObject sphere3;
  38. private GameObject sphere4;
  39.  
  40.  
  41.  
  42. // Use this for initialization
  43. void Start () {
  44.  
  45. speed = 1.0f;
  46.  
  47. Vector3 currentpos = transform.localPosition;
  48. //Quaternion currentROT = transform.localRotation;
  49.  
  50.  
  51.  
  52. Vector3 scale = new Vector3(0.2f, 0.2f, 0.2f);
  53.  
  54.  
  55. sphere1 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
  56. sphere1.transform.localScale = scale;
  57. sphere2 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
  58. sphere2.transform.localScale = scale;
  59. sphere3 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
  60. sphere3.transform.localScale = scale;
  61.  
  62.  
  63.  
  64. //currentROT = transform.localRotation;
  65.  
  66.  
  67. }
  68.  
  69. // Update is called once per frame
  70. void Update ()
  71. {
  72.  
  73. Vector3 currentpos = transform.position;
  74.  
  75. //Get Parent Rotation
  76. Matrix4x4 parentxform = transform.parent.transform.localToWorldMatrix;
  77.  
  78. Vector3 localright = parentxform.GetColumn(0);
  79. Vector3 localforward = parentxform.GetColumn(1);
  80.  
  81.  
  82.  
  83. Vector3 pOne = currentpos + Origin;
  84. Vector3 pTwo = pOne + ((localright * Triangle.x));
  85. Vector3 pThree = pOne + ((localforward * Triangle.z));
  86.  
  87.  
  88.  
  89.  
  90. float time = Time.time;
  91.  
  92. // Gerstner Positions for Y position
  93. Vector3 WaveA = GerstnerWave(wave1.x, wave1.y, wave1.z, wave1dir, currentpos, wave1.w, time);
  94. Vector3 WaveB = GerstnerWave(wave2.x, wave2.y, wave2.z, wave2dir, currentpos, wave2.w, time);
  95. Vector3 WaveC = GerstnerWave(wave3.x, wave3.y, wave3.z, wave3dir, currentpos, wave3.w, time);
  96.  
  97. Vector3 CombinedWave = (WaveA + WaveB + WaveC) / 3.0f;
  98.  
  99. //Boat Rotation
  100. //Put points through gerstner waves
  101. //POne
  102. Vector3 pOneWaveA = GerstnerWave(wave1.x, wave1.y, wave1.z, wave1dir, pOne, wave1.w, time);
  103. Vector3 pOneWaveB = GerstnerWave(wave2.x, wave2.y, wave2.z, wave2dir, pOne, wave2.w, time);
  104. Vector3 pOneWaveC = GerstnerWave(wave3.x, wave3.y, wave3.z, wave3dir, pOne, wave3.w, time);
  105. //pTwo
  106. Vector3 pTwoWaveA = GerstnerWave(wave1.x, wave1.y, wave1.z, wave1dir, pTwo, wave1.w, time);
  107. Vector3 pTwoWaveB = GerstnerWave(wave2.x, wave2.y, wave2.z, wave2dir, pTwo, wave2.w, time);
  108. Vector3 pTwoWaveC = GerstnerWave(wave3.x, wave3.y, wave3.z, wave3dir, pTwo, wave3.w, time);
  109. //POne
  110. Vector3 pThreeWaveA = GerstnerWave(wave1.x, wave1.y, wave1.z, wave1dir, pThree, wave1.w, time);
  111. Vector3 pThreeWaveB = GerstnerWave(wave2.x, wave2.y, wave2.z, wave2dir, pThree, wave2.w, time);
  112. Vector3 pThreeWaveC = GerstnerWave(wave3.x, wave3.y, wave3.z, wave3dir, pThree, wave3.w, time);
  113.  
  114. pOne = (pOneWaveA + pOneWaveB + pOneWaveC) / 3.0f;
  115. pTwo = (pTwoWaveA + pTwoWaveB + pTwoWaveC) / 3.0f;
  116. pThree = (pThreeWaveA + pThreeWaveB + pThreeWaveC) / 3.0f;
  117.  
  118. var right = (pTwo - pOne).normalized;
  119. var front = (pTwo - pThree).normalized;
  120. var up = Vector3.Cross(right, front);
  121.  
  122. var rotation = Quaternion.LookRotation(right, up);
  123.  
  124. float yPos = CombinedWave.y + bouyouncyoffset;
  125. yPos = (pOne.y + pTwo.y + pThree.y) / 3f;
  126.  
  127. transform.position = new Vector3(currentpos.x, yPos, currentpos.z);
  128. transform.localRotation = Quaternion.RotateTowards(transform.localRotation, rotation, float.MaxValue);
  129.  
  130. //Debug Spheres
  131. sphere1.transform.localPosition = pOne;
  132. sphere2.transform.position = pTwo;
  133. sphere3.transform.position = pThree;
  134.  
  135.  
  136.  
  137.  
  138. }
  139.  
  140. float wave(float wspos,float t)
  141. {
  142. return Mathf.Sin(t + wspos);
  143. }
  144.  
  145.  
  146. Vector3 GerstnerWave(float A, float L, float Q, Vector2 D, Vector3 P0, float Sp, float T)
  147. {
  148. float w = 2f * 3.1416f / L;
  149. Vector2 P0Swizzle;
  150. P0Swizzle.x = P0.x;
  151. P0Swizzle.y = P0.z;
  152. float dotD = Vector2.Dot(P0Swizzle, D);
  153. float C = Mathf.Cos(w * dotD + (T / 1) * Sp);
  154. float S = Mathf.Sin(w * dotD + (T / 1) * Sp);
  155.  
  156. float x = P0.x + Q * A * C * D.x;
  157. float y = A * S;
  158. float z = P0.z + Q * A * C * D.y;
  159.  
  160. Vector3 gwave;
  161. gwave.x = x;
  162. gwave.y = y;
  163. gwave.z = z;
  164.  
  165.  
  166. return gwave;
  167.  
  168. }
  169.  
  170.  
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement