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