namespace Zinnia.Tracking.Velocity { using UnityEngine; using Zinnia.Extension; /// /// Multiplies the given source velocity data. /// public class VelocityMultiplier : VelocityTracker { [Tooltip("The VelocityTracker to use as the source data.")] [SerializeField] private VelocityTracker source; /// /// The to use as the source data. /// public VelocityTracker Source { get { return source; } set { source = value; } } [Tooltip("The amount to multiply the source velocity by.")] [SerializeField] private Vector3 velocityMultiplierFactor = Vector3.one; /// /// The amount to multiply the source velocity by. /// public Vector3 VelocityMultiplierFactor { get { return velocityMultiplierFactor; } set { velocityMultiplierFactor = value; } } [Tooltip("The amount to multiply the source angular velocity by.")] [SerializeField] private Vector3 angularVelocityMultiplierFactor = Vector3.one; /// /// The amount to multiply the source angular velocity by. /// public Vector3 AngularVelocityMultiplierFactor { get { return angularVelocityMultiplierFactor; } set { angularVelocityMultiplierFactor = value; } } /// /// Clears . /// public virtual void ClearSource() { if (!this.IsValidState()) { return; } Source = default; } /// /// Sets the x value. /// /// The value to set to. public virtual void SetVelocityMultiplierFactorX(float value) { VelocityMultiplierFactor = new Vector3(value, VelocityMultiplierFactor.y, VelocityMultiplierFactor.z); } /// /// Sets the y value. /// /// The value to set to. public virtual void SetVelocityMultiplierFactorY(float value) { VelocityMultiplierFactor = new Vector3(VelocityMultiplierFactor.x, value, VelocityMultiplierFactor.z); } /// /// Sets the z value. /// /// The value to set to. public virtual void SetVelocityMultiplierFactorZ(float value) { VelocityMultiplierFactor = new Vector3(VelocityMultiplierFactor.x, VelocityMultiplierFactor.y, value); } /// /// Sets the x value. /// /// The value to set to. public virtual void SetAngularVelocityMultiplierFactorX(float value) { AngularVelocityMultiplierFactor = new Vector3(value, AngularVelocityMultiplierFactor.y, AngularVelocityMultiplierFactor.z); } /// /// Sets the y value. /// /// The value to set to. public virtual void SetAngularVelocityMultiplierFactorY(float value) { AngularVelocityMultiplierFactor = new Vector3(AngularVelocityMultiplierFactor.x, value, AngularVelocityMultiplierFactor.z); } /// /// Sets the z value. /// /// The value to set to. public virtual void SetAngularVelocityMultiplierFactorZ(float value) { AngularVelocityMultiplierFactor = new Vector3(AngularVelocityMultiplierFactor.x, AngularVelocityMultiplierFactor.y, value); } /// public override bool IsActive() { return base.IsActive() && Source != null && Source.CheckIsActiveAndEnabled(); } /// protected override Vector3 DoGetVelocity() => Vector3.Scale(Source.GetVelocity(), VelocityMultiplierFactor); /// protected override Vector3 DoGetAngularVelocity() => Vector3.Scale(Source.GetAngularVelocity(), AngularVelocityMultiplierFactor); } }