This is the interface to use to create an object that makes use of the Magic Time system. The Magic Time User is a MonoBehaviour that is ready to go with all the required methods and properties.
I would generally suggest you inherit your characters and other objects from MagicTimeUser, unless you're create a new custom class to use instead of MagicTimeUser.
public interface IHaveLocalTime
{
/// The value of the local time scale specific to this MagicTimeUser.
float LocalTimeScaleValue { get; set; }
/// Returns the LocalTimeScale that is specific to this MagicTimeUser.
public LocalTimeScale LocalTimeScale { get; }
/// Subscribes to a LocalTimeScale.
void SubscribeToLocalTimeScale(LocalTimeScale myTimeScale);
/// Unsubscribes from a LocalTimeScale.
void UnsubscribeFromLocalTimeScale(LocalTimeScale timeScale);
/// The list of currently subscribed LocalTimeScales.
List<LocalTimeScale> SubscribedTimeScales { get; }
/// DeltaTime adjusted by the combined LocalTimeScales.
float DeltaTime { get; }
/// UnscaledDeltaTime adjusted by the combined LocalTimeScales.
float UnscaledDeltaTime { get; }
/// FixedDeltaTime adjusted by the combined LocalTimeScales.
float FixedDeltaTime { get; }
/// Called when a subscribed LocalTimeScale is destroyed.
void OnTimeScaleDestroyed(LocalTimeScale timeScale);
/// Used to subscribe to the initial time scales, often called from Awake();
IEnumerator SubscribeToInitialTimeScales();
/// Called when the TimeScale is changed.
void OnTimeScaleChanged(float value, LocalTimeScale localTimeScale);
/// A reference to the GameObject that this MagicTimeUser is attached to.
GameObject GameObject { get; }
}