namespace VRTK.Prefabs.Locomotion.Movement.MovementAmplifier
{
using UnityEngine;
using Malimbe.MemberChangeMethod;
using Malimbe.MemberClearanceMethod;
using Malimbe.XmlDocumentationAttribute;
using Malimbe.PropertySerializationAttribute;
using Zinnia.Data.Attribute;
///
/// The public interface for the MovementAmplifier prefab.
///
public class MovementAmplifierFacade : MonoBehaviour
{
#region Tracking Settings
///
/// The source to observe movement of.
///
[Serialized, Cleared]
[field: Header("Tracking Settings"), DocumentedByXml]
public GameObject Source { get; set; }
///
/// The target to apply amplified movement to.
///
[Serialized, Cleared]
[field: DocumentedByXml]
public GameObject Target { get; set; }
#endregion
#region Movement Settings
///
/// The radius in which movement is ignored. Too small values can result in movement amplification happening during crouching which is often unexpected.
///
[Serialized]
[field: Header("Movement Settings"), DocumentedByXml]
public float IgnoredRadius { get; set; } = 0.25f;
///
/// How much to amplify movement of to apply to .
///
[Serialized]
[field: DocumentedByXml]
public float Multiplier { get; set; } = 2f;
#endregion
#region Reference Settings
///
/// The linked Internal Setup.
///
[Serialized]
[field: Header("Reference Settings"), DocumentedByXml, Restricted]
public MovementAmplifierConfigurator Configuration { get; protected set; }
#endregion
///
/// Called after has been changed.
///
[CalledAfterChangeOf(nameof(Source))]
protected virtual void OnAfterSourceChange()
{
Configuration.ConfigureRadiusOriginMover();
Configuration.ConfigureDistanceChecker();
Configuration.ConfigureObjectMover();
}
///
/// Called after has been changed.
///
[CalledAfterChangeOf(nameof(Target))]
protected virtual void OnAfterTargetChange()
{
Configuration.ConfigureTargetPositionMutator();
}
///
/// Called after has been changed.
///
[CalledAfterChangeOf(nameof(IgnoredRadius))]
protected virtual void OnAfterIgnoredRadiusChange()
{
Configuration.ConfigureDistanceChecker();
Configuration.ConfigureRadiusSubtractor();
}
///
/// Called after has been changed.
///
[CalledAfterChangeOf(nameof(Multiplier))]
protected virtual void OnAfterMultiplierChange()
{
Configuration.ConfigureMovementMultiplier();
}
}
}