/* Distributed under the Apache License, Version 2.0. See accompanying NOTICE file for details.*/ using UnityEngine; // Abstract class for any pulse data consumer that holds a reference // to the pulse data source and the data field to consume public abstract class PulseDataConsumer : MonoBehaviour { [HideInInspector] public PulseDataSource source; // Source of the data to consume [HideInInspector] public int dataFieldIndex; // Index of the data field to consume // MARK: Monobehavior methods // We need to consume the data after it has been generated by // a PulseDataSource, which occurs in an Update() call protected virtual void LateUpdate() { // Ensure we only read data when the application is running if (!Application.isPlaying) return; // Ensure there is data to consume if (source == null || source.data == null || source.data.timeStampList == null || source.data.timeStampList.IsEmpty() || dataFieldIndex >= source.data.valuesTable.Count) return; // Forward time points and values for the data field being consumed var dataFieldValues = source.data.valuesTable[dataFieldIndex]; UpdateFromPulse(source.data.timeStampList, dataFieldValues); } // MARK: Custom methods // Abstract method exposing time points and data field values // to be consumed by the implemented subclass abstract internal void UpdateFromPulse(DoubleList times, DoubleList values); }