namespace Zinnia.Tracking.Follow.Modifier.Property
{
using UnityEngine;
using Zinnia.Data.Type;
///
/// Modifies a specific property with the ability to limit the axes the property is applied to.
///
public abstract class RestrictableTransformPropertyModifier : PropertyModifier
{
[Header("Restriction Settings")]
[Tooltip("Determines which axes to apply the modification on>.")]
[SerializeField]
private Vector3State applyModificationOnAxis = Vector3State.True;
///
/// Determines which axes to apply the modification on>.
///
public Vector3State ApplyModificationOnAxis
{
get
{
return applyModificationOnAxis;
}
set
{
applyModificationOnAxis = value;
}
}
///
/// Whether the modifier has restrictable axes on.
///
public virtual bool HasAxisRestrictions => !ApplyModificationOnAxis.ToVector3().Equals(Vector3.one);
///
/// The original value of the property.
///
protected Vector3 originalPropertyValue;
///
/// Saves the original value for the property.
///
/// The property value to save.
protected virtual void SaveOriginalPropertyValue(Vector3 valueToSave)
{
originalPropertyValue = valueToSave;
}
///
/// Applies the restrictions to the property value based on the axes to apply modification on.
///
/// The property value to restrict.
/// The restricted property value.
protected virtual Vector3 RestrictPropertyValue(Vector3 valueToRestrict)
{
valueToRestrict.x = ApplyModificationOnAxis.xState ? valueToRestrict.x : originalPropertyValue.x;
valueToRestrict.y = ApplyModificationOnAxis.yState ? valueToRestrict.y : originalPropertyValue.y;
valueToRestrict.z = ApplyModificationOnAxis.zState ? valueToRestrict.z : originalPropertyValue.z;
return valueToRestrict;
}
}
}