using System.Collections.Generic; using UnityEngine; namespace Passer { using Tracking; /// /// A tracker /// public class Tracker { /// /// The tracking status /// public enum Status { Unavailable, //< The tracking device is not available Present, //< The tracking device is available but not tracking Tracking //< The tracking device is actively tracking } /// /// The name of this tracker /// public virtual string name { get { return ""; } } /// /// Is this tracker enabled? /// public bool enabled; /// /// The tracking Status of the tracker /// public Status status; /// /// The tracking device /// public TrackerComponent trackerComponent; #region SubTrackers // For lighthouses, tracking camera's etc. // currently disabled, but may be used later again. // Alternative: use them as sensors /// /// Optional list of SubTrackers /// //public List subTrackers = new List(); //public virtual void UpdateSubTracker(int i) { // if (subTrackers[i] != null) // subTrackers[i].UpdateTracker(humanoid.showRealObjects); //} //protected virtual Vector3 GetSubTrackerPosition(int i) { // return Vector3.zero; //} //protected virtual Quaternion GetSubTrackerRotation(int i) { // return Quaternion.identity; //} #endregion SubTrackers #region Init /// /// Start the tracker /// public virtual void StartTracker() { } #endregion Init #region Stop /// /// Stop the tracker /// public virtual void StopTracker() { } #endregion Stop #region Update /// /// Update the tracker state /// public virtual void UpdateTracker() { } #endregion Update /// /// Show or hide the Tracker renderers /// /// Renderers are enabled when shown == true public virtual void ShowTracker(bool shown) { if (trackerComponent == null) return; Renderer[] renderers = trackerComponent.GetComponentsInChildren(); foreach (Renderer renderer in renderers) { // LineRenderers are used for skeletons if (!(renderer is LineRenderer)) renderer.enabled = shown; } } #region Calibration /// /// Calibrate the tracker /// public virtual void Calibrate() { } /// /// Adjust the position of the tracker by the given delat /// /// The positional delta to apply /// The rotational delta to apply public virtual void AdjustTracking(Vector3 positionalDelta, Quaternion rotationalDelta) { if (trackerComponent != null) { trackerComponent.transform.position += positionalDelta; trackerComponent.transform.rotation *= rotationalDelta; } } #endregion } }