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);
}
}