Files
Dontback/Assets/Scripts/Event/EventManager.cs
Eicy c9d29f2a68 AI补足注释(已经快看不懂了)
实现i18n
优化部分模块的逻辑以优化性能
修复物品展示框打开时按下ESC唤出暂停菜单但没有暂停的bug

Signed-off-by: Eicy <im@crash.work>
2024-10-14 21:37:04 +08:00

127 lines
3.4 KiB
C#

using Event.EventArgs;
using Event.EventHandler;
using UnityEngine;
namespace Event
{
// 事件管理器类,负责事件的注册和触发
public class EventManager : MonoBehaviour
{
private static EventManager _instance;
// 单例模式实例获取
public static EventManager Instance
{
get
{
if (_instance)
return _instance;
// 创建新的 GameObject 和 EventManager 组件
_instance = FindFirstObjectByType<EventManager>() ??
new GameObject("EventManager").AddComponent<EventManager>();
return _instance;
}
}
private void Awake()
{
// 确保只存在一个 EventManager 实例
if (_instance != null && _instance != this)
{
Destroy(gameObject);
}
else
{
_instance = this;
}
}
// 定义事件
public event CameraInterActHandler CameraInterAct;
public event DialogPopHandler DialogPop;
public event PlayerRunStartHandler PlayerRunStart;
public event PlayerRunningHandler PlayerRunning;
public event PlayerRunStopHandler PlayerRunStop;
public event PlayerWalkStartHandler PlayerWalkStart;
public event PlayerWalkStopHandler PlayerWalkStop;
public event PlayerWalkingHandler PlayerWalking;
public event ItemDialogHandler ItemDialog;
public event TextChangeHandler TextChange;
// 事件开关,根据事件名称调用相应的方法
public void EventSwitch(string eventName, string args)
{
switch (eventName)
{
case "OnDialogPop":
OnDialogPop(int.Parse(args));
break;
// 可以在此处添加更多事件
default:
break;
}
}
// 触发相机交互事件
public void OnCameraInterAct(GameObject item)
{
CameraInterAct?.Invoke(new CameraInterActArgs(item));
}
// 触发对话框弹出事件
public void OnDialogPop(int index)
{
DialogPop?.Invoke(new DialogPopArgs(index));
}
// 触发玩家开始走路事件
public void OnPlayerWalkStart()
{
PlayerWalkStart?.Invoke();
}
// 触发玩家停止走路事件
public void OnPlayerWalkStop()
{
PlayerWalkStop?.Invoke();
}
// 触发玩家行走事件
public void OnPlayerWalking()
{
PlayerWalking?.Invoke();
}
// 触发玩家开始奔跑事件
public void OnPlayerRunStart()
{
PlayerRunStart?.Invoke();
}
// 触发玩家正在奔跑事件
public void OnPlayerRunning()
{
PlayerRunning?.Invoke();
}
// 触发玩家停止奔跑事件
public void OnPlayerRunStop()
{
PlayerRunStop?.Invoke();
}
// 触发文本变化事件
public void OnTextChange()
{
TextChange?.Invoke();
}
// 触发物品对话事件
public void OnItemDialog(string name)
{
ItemDialog?.Invoke(new ItemDialogArgs(name));
}
}
}