MegaWaving.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using UnityEngine;
  2. [AddComponentMenu("Modifiers/Waving")]
  3. public class MegaWaving : MegaModifier
  4. {
  5. public float amp = 0.01f;
  6. public float flex = 1.0f;
  7. public float wave = 1.0f;
  8. public float phase = 0.0f;
  9. public float Decay = 0.0f;
  10. public bool animate = false;
  11. public float Speed = 1.0f;
  12. public MegaAxis waveaxis = MegaAxis.X;
  13. float time = 0.0f;
  14. float dy = 0.0f;
  15. int ix = 0;
  16. int iz = 2;
  17. float t = 0.0f;
  18. public override string ModName() { return "Waving"; }
  19. public override string GetHelpURL() { return "?page_id=308"; }
  20. static public float WaveFunc(float radius, float t, float amp, float waveLen, float phase, float decay)
  21. {
  22. float ang = Mathf.PI * 2.0f * (radius / waveLen + phase);
  23. return amp * Mathf.Sin(ang) * Mathf.Exp(-decay * Mathf.Abs(radius));
  24. }
  25. public override Vector3 Map(int i, Vector3 p)
  26. {
  27. p = tm.MultiplyPoint3x4(p);
  28. float u = Mathf.Abs(2.0f * p[iz]); //.z); // / dist);
  29. u = u * u;
  30. p[ix] += flex * WaveFunc(p[iz], time, amp * u, wave, phase, dy);
  31. return invtm.MultiplyPoint3x4(p);
  32. }
  33. public override bool ModLateUpdate(MegaModContext mc)
  34. {
  35. if ( animate )
  36. {
  37. float dt = Time.deltaTime;
  38. if ( dt == 0.0f )
  39. dt = 0.01f;
  40. if ( Application.isPlaying )
  41. t += dt * Speed;
  42. phase = t;
  43. }
  44. return Prepare(mc);
  45. }
  46. public override bool Prepare(MegaModContext mc)
  47. {
  48. if ( wave == 0.0f )
  49. wave = 0.000001f;
  50. dy = Decay / 1000.0f;
  51. switch ( waveaxis )
  52. {
  53. case MegaAxis.X:
  54. ix = 0;
  55. iz = 2;
  56. break;
  57. case MegaAxis.Y:
  58. ix = 1;
  59. iz = 2;
  60. break;
  61. case MegaAxis.Z:
  62. ix = 2;
  63. iz = 0;
  64. break;
  65. }
  66. return true;
  67. }
  68. }