1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using System;
- using UnityEngine;
- namespace Xft
- {
- public class TurbulenceFieldAffector : Affector
- {
- public TurbulenceFieldAffector(Transform obj, float atten, bool useMax, float maxDist, EffectNode node) : base(node, AFFECTORTYPE.TurbulenceAffector)
- {
- this.TurbulenceObj = obj;
- this.UseMaxDistance = useMax;
- this.MaxDistance = maxDist;
- this.MaxDistanceSqr = this.MaxDistance * this.MaxDistance;
- }
- protected void UpateNoAttenuation(float deltaTime)
- {
- float sqrMagnitude = (this.Node.GetOriginalPos() - this.TurbulenceObj.position).sqrMagnitude;
- float d;
- if (this.Node.Owner.TurbulenceMagType == MAGTYPE.Fixed)
- {
- d = this.Node.Owner.TurbulenceMagnitude;
- }
- else if (this.Node.Owner.TurbulenceMagType == MAGTYPE.Curve_OBSOLETE)
- {
- d = this.Node.Owner.TurbulenceMagCurve.Evaluate(this.Node.GetElapsedTime());
- }
- else
- {
- d = this.Node.Owner.TurbulenceMagCurveX.Evaluate(this.Node.GetElapsedTime());
- }
- if (!this.UseMaxDistance || sqrMagnitude <= this.MaxDistanceSqr)
- {
- Vector3 vector;
- vector.x = UnityEngine.Random.Range(-1f, 1f);
- vector.y = UnityEngine.Random.Range(-1f, 1f);
- vector.z = UnityEngine.Random.Range(-1f, 1f);
- vector *= d;
- vector = Vector3.Scale(vector, this.Node.Owner.TurbulenceForce);
- this.Node.Velocity += vector;
- }
- }
- public override void Update(float deltaTime)
- {
- if ((double)this.Attenuation < 1E-06)
- {
- this.UpateNoAttenuation(deltaTime);
- return;
- }
- float magnitude = (this.Node.GetOriginalPos() - this.TurbulenceObj.position).magnitude;
- float num;
- if (this.Node.Owner.TurbulenceMagType == MAGTYPE.Fixed)
- {
- num = this.Node.Owner.TurbulenceMagnitude;
- }
- else if (this.Node.Owner.TurbulenceMagType == MAGTYPE.Curve_OBSOLETE)
- {
- num = this.Node.Owner.TurbulenceMagCurve.Evaluate(this.Node.GetElapsedTime());
- }
- else
- {
- num = this.Node.Owner.TurbulenceMagCurveX.Evaluate(this.Node.GetElapsedTime());
- }
- if (!this.UseMaxDistance || magnitude <= this.MaxDistance)
- {
- Vector3 vector;
- vector.x = UnityEngine.Random.Range(-1f, 1f);
- vector.y = UnityEngine.Random.Range(-1f, 1f);
- vector.z = UnityEngine.Random.Range(-1f, 1f);
- vector *= num / (1f + magnitude * this.Attenuation);
- this.Node.Velocity += vector;
- }
- }
- protected Transform TurbulenceObj;
- protected float Attenuation;
- protected bool UseMaxDistance;
- protected float MaxDistance;
- protected float MaxDistanceSqr;
- }
- }
|