123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace YLBattle
- {
- /// <summary>
- /// 战场事件处理中心
- /// </summary>
- public class FieldEventDispatcher : IEventDispatcher
- {
- /// <summary>
- /// 上下文环境信息
- /// </summary>
- private BattleParam env = null;
- /// <summary>
- /// 事件队列
- /// </summary>
- private Queue<FieldEvent> mFieldEventQueue = new Queue<FieldEvent>();
- /// <summary>
- /// 事件处理器映射表
- /// </summary>
- private Dictionary<EFieldEventType, Action<FieldEvent>> mHandle = new Dictionary<EFieldEventType, Action<FieldEvent>>();
- /// <summary>
- /// 事件ID生成器
- /// </summary>
- private int mEventIDGenerator = 0;
- /// <summary>
- /// 对象事件
- /// </summary>
- private BattleFighterEventHandler warriorEventHandle = new BattleFighterEventHandler();
- /// <summary>
- /// 初始化
- /// </summary>
- /// <param name="env">环境信息</param>
- public void Initialize(BattleParam env)
- {
- this.env = env;
- this.mFieldEventQueue.Clear();
- this.mHandle.Clear();
- this.mEventIDGenerator = 0;
- this.warriorEventHandle.Initialize(env);
- }
- /// <summary>
- /// 事件投递
- /// </summary>
- /// <param name="ev">事件信息</param>
- public void PostEvent(FieldEvent ev)
- {
- if (ev == null)
- {
- return;
- }
- this.mFieldEventQueue.Enqueue(ev);
- }
- /// <summary>
- /// 创建事件对象
- /// </summary>
- /// <param name="type">事件类型</param>
- /// <returns>事件对象</returns>
- public FieldEvent MakeEvent(EFieldEventType type)
- {
- FieldEvent fe = new FieldEvent();
- fe.id = ++this.mEventIDGenerator;
- fe.type = type;
- fe.ts = DateTime.Now.ToFileTimeUtc();
- return fe;
- }
- /// <summary>
- /// 事件处理注册
- /// </summary>
- /// <param name="type">事件类型</param>
- /// <param name="handle">事件处理器</param>
- public void RegisterEventHandle(EFieldEventType type, Action<FieldEvent> handle)
- {
- if (this.mHandle.ContainsKey(type))
- {
- this.env.DebugHelper().Warning("事件重复注册,编号:" + type.ToString());
- return;
- }
- //this.env.DebugHelper().Error(type.ToString());
- this.mHandle.Add(type, handle);
- }
- /// <summary>
- /// 查询事件处理器
- /// </summary>
- /// <param name="type">事件类型</param>
- /// <returns>处理器</returns>
- private Action<FieldEvent> FindEventHandle(EFieldEventType type)
- {
- if (this.mHandle.ContainsKey(type))
- {
- return this.mHandle[type];
- }
- return null;
- }
- /// <summary>
- /// 调度战场事件
- /// </summary>
- /// <param name="now">当前逻辑时间</param>
- public void OnUpdateFieldEvent(long now)
- {
- if (0 == this.mFieldEventQueue.Count)
- {
- return;
- }
- FieldEvent ev = null;
- Action<FieldEvent> handler = null;
- while (this.mFieldEventQueue.Count > 0)
- {
- ev = this.mFieldEventQueue.Dequeue();
- handler = this.FindEventHandle(ev.type);
- if (null == handler)
- {
- this.env.DebugHelper().Warning("未知战斗事件:" + ev.type.ToString());
- continue;
- }
- handler.Invoke(ev);
- }
- }
- }
- }
|