Practice_Unity/Assets/Scripts/Events/EventBus.cs
SEAN cbd35babca 작업
1. ExpBar를 UIBar 로 변경해서 UIButton과 같이 여러곳에서 공용으로 사용할 수 있게 변경
2. EventBus 를 만들어서 Button같이 자기 스스로 동작을 시작할 수 있는 오브젝트들 말고 수동적인 오브젝트들이 값을 받는 방식을 관리하게 설정
  - PlayerController, UIManager, UIBar, EventBus를 연결함
3. Events 아래에 Player의 이벤트에 연관된 코드를 PlayerEvents 로 만들어서 관리함
  - 경험치 전달 양식이 여기 존재
  - 체력바나 마나바 같은 양식도 여기서 만들 예정
2025-10-20 16:54:45 +09:00

47 lines
1.2 KiB
C#

using System;
using System.Collections.Generic;
public class EventBus
{
private static Dictionary<Type, Delegate> s_event = new();
public static void Subscribe<T>(Action<T> listener)
{
Type eventType = typeof(T);
if (s_event.TryGetValue(eventType, out var exisitingDelegate))
{
s_event[eventType] = Delegate.Combine(exisitingDelegate, listener);
}
else
{
s_event[eventType] = listener;
}
}
public static void Unsubscribe<T>(Action<T> listener)
{
Type eventType = typeof(T);
if (s_event.TryGetValue(eventType, out var existingDelegate))
{
var newDelegate = Delegate.Remove(existingDelegate, listener);
if (newDelegate == null)
{
s_event.Remove(eventType);
}
else
{
s_event[eventType] = newDelegate;
}
}
}
public static void Raise<T>(T eventArgs)
{
if (s_event.TryGetValue(typeof(T), out var exisingDelegate))
{
(exisingDelegate as Action<T>)?.Invoke(eventArgs);
}
}
}