namespace Zinnia.Tracking.Follow.Operation.Extraction { using System; using UnityEngine; using UnityEngine.Events; using Zinnia.Extension; /// /// Extracts the parts of and emits them in separate events. /// public class ObjectDistanceComparatorEventDataExtractor : MonoBehaviour { /// /// Defines the event with the specified . /// [Serializable] public class Vector3UnityEvent : UnityEvent { } /// /// Defines the event with the specified . /// [Serializable] public class FloatUnityEvent : UnityEvent { } /// /// Emitted when the is extracted. /// public Vector3UnityEvent DifferenceExtracted = new Vector3UnityEvent(); /// /// Emitted when the is extracted. /// public FloatUnityEvent DistanceExtracted = new FloatUnityEvent(); /// /// The extracted difference. /// public Vector3 DifferenceResult { get; protected set; } /// /// The extracted distance. /// public float DistanceResult { get; protected set; } /// /// Extracts the parts of the event data. /// /// The event data to extract from. public virtual void Extract(ObjectDistanceComparator.EventData eventData) { if (!this.IsValidState() || eventData == null) { return; } DifferenceResult = eventData.CurrentDifference; DifferenceExtracted?.Invoke(DifferenceResult); DistanceResult = eventData.CurrentDistance; DistanceExtracted?.Invoke(DistanceResult); } } }