TurbulenceFieldAffector.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using UnityEngine;
  3. namespace Xft
  4. {
  5. public class TurbulenceFieldAffector : Affector
  6. {
  7. public TurbulenceFieldAffector(Transform obj, float atten, bool useMax, float maxDist, EffectNode node) : base(node, AFFECTORTYPE.TurbulenceAffector)
  8. {
  9. this.TurbulenceObj = obj;
  10. this.UseMaxDistance = useMax;
  11. this.MaxDistance = maxDist;
  12. this.MaxDistanceSqr = this.MaxDistance * this.MaxDistance;
  13. }
  14. protected void UpateNoAttenuation(float deltaTime)
  15. {
  16. float sqrMagnitude = (this.Node.GetOriginalPos() - this.TurbulenceObj.position).sqrMagnitude;
  17. float d;
  18. if (this.Node.Owner.TurbulenceMagType == MAGTYPE.Fixed)
  19. {
  20. d = this.Node.Owner.TurbulenceMagnitude;
  21. }
  22. else if (this.Node.Owner.TurbulenceMagType == MAGTYPE.Curve_OBSOLETE)
  23. {
  24. d = this.Node.Owner.TurbulenceMagCurve.Evaluate(this.Node.GetElapsedTime());
  25. }
  26. else
  27. {
  28. d = this.Node.Owner.TurbulenceMagCurveX.Evaluate(this.Node.GetElapsedTime());
  29. }
  30. if (!this.UseMaxDistance || sqrMagnitude <= this.MaxDistanceSqr)
  31. {
  32. Vector3 vector;
  33. vector.x = UnityEngine.Random.Range(-1f, 1f);
  34. vector.y = UnityEngine.Random.Range(-1f, 1f);
  35. vector.z = UnityEngine.Random.Range(-1f, 1f);
  36. vector *= d;
  37. vector = Vector3.Scale(vector, this.Node.Owner.TurbulenceForce);
  38. this.Node.Velocity += vector;
  39. }
  40. }
  41. public override void Update(float deltaTime)
  42. {
  43. if ((double)this.Attenuation < 1E-06)
  44. {
  45. this.UpateNoAttenuation(deltaTime);
  46. return;
  47. }
  48. float magnitude = (this.Node.GetOriginalPos() - this.TurbulenceObj.position).magnitude;
  49. float num;
  50. if (this.Node.Owner.TurbulenceMagType == MAGTYPE.Fixed)
  51. {
  52. num = this.Node.Owner.TurbulenceMagnitude;
  53. }
  54. else if (this.Node.Owner.TurbulenceMagType == MAGTYPE.Curve_OBSOLETE)
  55. {
  56. num = this.Node.Owner.TurbulenceMagCurve.Evaluate(this.Node.GetElapsedTime());
  57. }
  58. else
  59. {
  60. num = this.Node.Owner.TurbulenceMagCurveX.Evaluate(this.Node.GetElapsedTime());
  61. }
  62. if (!this.UseMaxDistance || magnitude <= this.MaxDistance)
  63. {
  64. Vector3 vector;
  65. vector.x = UnityEngine.Random.Range(-1f, 1f);
  66. vector.y = UnityEngine.Random.Range(-1f, 1f);
  67. vector.z = UnityEngine.Random.Range(-1f, 1f);
  68. vector *= num / (1f + magnitude * this.Attenuation);
  69. this.Node.Velocity += vector;
  70. }
  71. }
  72. protected Transform TurbulenceObj;
  73. protected float Attenuation;
  74. protected bool UseMaxDistance;
  75. protected float MaxDistance;
  76. protected float MaxDistanceSqr;
  77. }
  78. }