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