# Events Manager

{% hint style="info" %}
Events Manager supports events with up to 2 parameters of any type.
{% endhint %}

To use this system, inject IEventsManager interface into your class, as shown below:

```csharp
[Inject] private IEventsManager eventsManager;
```

### Available methods

***

<pre class="language-csharp"><code class="lang-csharp"><strong>void RegisterListener(string eventType, UnityAction listener)
</strong></code></pre>

*Registers event listener without parameters.*

*Examples:*

```csharp
eventsManager.RegisterListener("PlayerDeath", OnPlayerDeath);
eventsManager.RegisterListener("GameWin", () => { Debug.Log("Victory!"); });
```

***

```csharp
void RegisterListener<T>(string eventType, UnityAction<T> listener)
```

*Registers event listener with single parameter of any type.*

*Examples:*

```csharp
eventsManager.RegisterListener<int>("PlayerDamageGot", OnPlayerDamageGot);
eventsManager.RegisterListener("GameWin", (score) => { Debug.Log($"Victory! Score: {score}"); });
```

***

```csharp
void RegisterListener<T1, T2>(string eventType, UnityAction<T1, T2> listener)
```

*Registers event listener with 2 parameters of any types.*

*Example:*

```csharp
eventsManager.RegisterListener<int, string>("PlayerDamageGot", (damage, enemyName) => { Debug.Log($"Damage got: {damage} from {enemyName}"); });
```

***

```csharp
void UnregisterListener(string eventType, UnityAction listener)
```

*Unregisters event listener without parameters.*

*Example:*

```csharp
eventsManager.UnregisterListener("PlayerDeath", OnPlayerDeath);
```

***

```csharp
void UnregisterListener<T>(string eventType, UnityAction<T> listener)
```

*Unregisters event listener with 1 parameter of any type.*

*Example:*

```csharp
eventsManager.UnregisterListener<int>("PlayerDamageGot", OnPlayerDamageGot);
```

***

```csharp
void UnregisterListener<T1, T2>(string eventType, UnityAction<T1, T2> listener)
```

*Unregisters event listener with 2 parameters of any types.*

*Example:*

```csharp
eventsManager.UnregisterListener<int, string>("PlayerDamageGot", OnPlayerDamageGot);
```

***

```csharp
void TriggerEvent(string eventType)
```

*Triggers event without parameters.*

*Example:*

```csharp
eventsManager.TriggerEvent("PlayerDeath");
```

***

```csharp
void TriggerEvent<T>(string eventType, T value)
```

*Triggers event with 1 parameter of any type.*

*Example:*

```csharp
eventsManager.TriggerEvent<int>("GameWin", score);
```

***

```csharp
void TriggerEvent<T1, T2>(string eventType, T1 value1, T2 value2)
```

*Triggers event with 2 parameters of any types.*

*Example:*

```csharp
eventsManager.TriggerEvent<int, string>("OnDamageGot", damage, enemyName);
```

***
