> For the complete documentation index, see [llms.txt](https://mandor-labs.gitbook.io/mandor-labs-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mandor-labs.gitbook.io/mandor-labs-docs/event-system/getting-started/quickstart.md).

# Quickstart

Get up and running with the Modular Labs Event system in under 5 minutes by following these three simple steps.

## Steps

{% stepper %}
{% step %}

#### Define a Custom Event

Create a simple class that implement interface from `Event<T>` to hold your event's spesific data.

```csharp
using ModularLabs.Event;

public class VisibilityEvent : Event<VisibilityEvent>
{
    public enum Type
    {
        None,
        Show,
        Hide
    }

    public Type type;

    public override void Reset()
    {
        type = default;
    }
}
```

{% endstep %}

{% step %}

#### Subscribe to the Event

Implement the `EventListener<T>` interface on any `MonoBehaviour` to start listening for and responding to your custom events.

```csharp
using ModularLabs.Event;
using UnityEngine;

public class ObjectBox : MonoBehaviour, EventListener<VisibilityEvent>
{
    private void OnEnabled()
    {
        this.RegisterEvent<VisibilityEvent>(); // Subscribe to the event
    }

    private void OnDisabled()
    {
        this.UnregisterEvent<VisibilityEvent>(); // Unsubscribe from the event
    }

    public void OnEvent(object sender, VisibilityEvent e)
    {
        //callback here
    }
}

```

{% endstep %}

{% step %}

#### Trigger the Event

Broadcast your event globally from anywhere in your codebase using the static `.Trigger()` API.

```csharp
VisibilityEvent.Trigger(this, new VisibilityEvent()
{
    type = VisibilityEvent.Type.Show
});
```

{% endstep %}
{% endstepper %}
