> For the complete documentation index, see [llms.txt](https://infinitypbr.gitbook.io/magic-pig-games/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://infinitypbr.gitbook.io/magic-pig-games/magic-time-local-time-scale/magic-time-user/ihavelocaltime.md).

# IHaveLocalTime

This is the interface to use to create an object that makes use of the **Magic Time** system. The [**Magic Time User**](/magic-pig-games/magic-time-local-time-scale/magic-time-user.md) 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`.

```csharp
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; }
}
```
