/******************************************************************************** * 文件名: Event.cs * 全路径: \Script\Event\EventSystem.cs * 创建人: 李嘉 * 创建时间:2013-11-01 * * 功能说明:事件处理函数对外接口 * 修改记录: *********************************************************************************/ using System.Collections.Generic; using Games.AI_Logic; using Games.GlobeDefine; using GCGame.Table; namespace Games.Events { public class EventSystem : Singleton { //消息队列 private readonly List m_DelayEventQueue; public EventSystem() { m_DelayEventQueue = new List(); } public bool Init() { return true; } //外部调用发送事件接口 public void PushEvent(GameEvent _event) { if (_event.IsDelay) //延迟时间,加入队列,等待处理 m_DelayEventQueue.Add(_event); else //非延迟事件,马上处理 _ProcessEvent(_event); } public void UpdateDelayEventQueue() { for (var i = 0; i < m_DelayEventQueue.Count; ++i) //延迟事件,等待延迟结束处理 if (m_DelayEventQueue[i].IsDelayFinish()) _ProcessEvent(m_DelayEventQueue[i]); } //实际事件处理接口 private void _ProcessEvent(GameEvent _event) { //首先弹出这个Events m_DelayEventQueue.Remove(_event); switch (_event.EventID) { case GameDefine_Globe.EVENT_DEFINE.EVENT_ENTERGAME: { //举个例子,之后处理函数过多的时候可以考虑封装 var nLevel = _event.GetIntParam(0); LoadingWindow.LoadScene((GameDefine_Globe.SCENE_DEFINE) nLevel); } break; case GameDefine_Globe.EVENT_DEFINE.EVENT_MISSION_COLLECTITEM: { var mainPlayer = Singleton.Instance.MainPlayer; if (!mainPlayer) return; mainPlayer.StopMove(); GameManager.gameManager.AutoSearch.Stop(); if (GameManager.gameManager.PlayerDataPool.m_objMountParam.AdvanceMountId > 0) { mainPlayer.CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_FINSH; mainPlayer.AskUnMount(); var gameEvent = new GameEvent(); gameEvent.Reset(); gameEvent.EventID = GameDefine_Globe.EVENT_DEFINE.EVENT_COLLECTUNMOUNTCALLBACK; mainPlayer.UnMountEventCallBack = gameEvent; return; } GameManager.gameManager.MissionManager.MissionCollectItemUnMountCallBack(); } break; case GameDefine_Globe.EVENT_DEFINE.EVENT_CHANGESCENE: { var nLevel = _event.GetIntParam(0); var actLevel = GameManager.gameManager.RunningScene; var tabTarLevel = TableManager.GetSceneClassByID(nLevel); var tabActLevel = TableManager.GetSceneClassByID(actLevel); if (Singleton.Instance.MainPlayer != null) { Singleton.Instance.MainPlayer.OnPlayerLeaveScene(); if (tabActLevel != null && tabActLevel.EffectID >= 0) Singleton.Instance.MainPlayer.StopEffect(tabActLevel.EffectID); } if (GameManager.gameManager.AutoSearch != null) GameManager.gameManager.AutoSearch.OnChangeScene(nLevel); if (tabActLevel != null && tabActLevel.SceneID != (int) GameDefine_Globe.SCENE_DEFINE.SCENE_LOGIN && (tabTarLevel.OrgScene == 1 || tabActLevel.OrgScene == 1 || tabTarLevel.OrgScene == 2 || tabActLevel.OrgScene == 2) && tabTarLevel.ResName == tabActLevel.ResName) { //原地切换的副本 var delayTime = GlobalEffectMgr.PlayCameraBlur(); GameManager.gameManager.ActiveScene.ClearUiBoard(); ObjManager.Instance.CleanSceneObj(); GameManager.gameManager.RunningScene = nLevel; //GameManager.gameManager.PlayerDataPool.LoadSceneFinish(); MainUILogic.Instance().ChangeScene(); //Singleton.GetInstance().MainPlayer.SetPosition(GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterScenePos); //var serverID = GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterSceneServerID; //ObjManager.Instance.AddPoolObj(ObjManager.Instance.MainPlayer); //Singleton.Instance.MainPlayer = Singleton.GetInstance().MainPlayer; //Singleton.Instance.m_bBeginAsycCreateMainPlayer = true; var mainPlayer = ObjManager.Instance.MainPlayer; //mainPlayer.ChangeSceneSpecialOpt(); mainPlayer.SyncPlayerY(); var playerCombat = mainPlayer.GetComponent(); if (playerCombat != null) playerCombat.LockAction(); if ((int) GameDefine_Globe.SCENE_DEFINE.SCENE_LOGIN != nLevel && GameManager.gameManager.SoundManager != null) GameManager.gameManager.SoundManager.PlaySceneMusic(); GameManager.gameManager.RecoverNetDelay(delayTime); } //else if (tabActLevel.SceneID != (int)GameDefine_Globe.SCENE_DEFINE.SCENE_LOGIN // && actLevel == tabTarLevel.SceneID) //{//同场景切换,掉线或换线 暂时复制原地副本逻辑 // var delayTime = GlobalEffectMgr.PlayCameraBlur(); // //GameManager.gameManager.ActiveScene.ClearUiBoard(); // //ObjManager.Instance.CleanSceneObj(); // GameManager.gameManager.RunningScene = nLevel; // //GameManager.gameManager.PlayerDataPool.LoadSceneFinish(); // MainUILogic.Instance().ChangeScene(); // GameManager.gameManager.SceneLogic.StartCoroutine(GameManager.gameManager.SceneLogic.ReLoadScene(delayTime * 0.3f)); // var mainPlayer = ObjManager.Instance.MainPlayer; // //mainPlayer.ChangeSceneSpecialOpt(); // mainPlayer.SyncPlayerY(); // var playerCombat = mainPlayer.GetComponent(); // if (playerCombat != null) // playerCombat.LockAction(); // if ((int)GameDefine_Globe.SCENE_DEFINE.SCENE_LOGIN != nLevel && // GameManager.gameManager.SoundManager != null) // GameManager.gameManager.SoundManager.PlaySceneMusic(); //} else { LoadingWindow.LoadScene((GameDefine_Globe.SCENE_DEFINE) nLevel); } } break; //case GameDefine_Globe.EVENT_DEFINE.EVENT_QINGGONG: // { // // if (Singleton.Instance.MainPlayer != null) // // { // // Singleton.Instance.MainPlayer.BeginQingGong(_event); // // } // int nServerID = _event.GetIntParam(2); // Obj obj = Singleton.Instance.FindObjInScene(nServerID); // if (obj) // { // if (obj.ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER // || obj.ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) // { // Obj_OtherPlayer OtherPlayer = obj as Obj_OtherPlayer; // if (OtherPlayer) // { // OtherPlayer.BeginQingGong(_event); // } // } // } // } // break; case GameDefine_Globe.EVENT_DEFINE.EVENT_MISSION_ENTERAREA: { GameManager.gameManager.MissionManager.missionEntreAreaCallBack(); } break; case GameDefine_Globe.EVENT_DEFINE.EVENT_KILLMONSTER: { var mainPlayer = ObjManager.Instance.MainPlayer; if (mainPlayer == null || !mainPlayer.isAutoCombat) if (SkillBarLogic.Instance()) SkillBarLogic.Instance().OnDoAutoFightClick(); } break; case GameDefine_Globe.EVENT_DEFINE.EVENT_COLLECTITEM_RESEED: { var nSceneID = _event.GetIntParam(0); var nSceneIndex = _event.GetIntParam(1); var nItemIndex = _event.GetIntParam(2); if (Singleton.GetInstance() != null) Singleton.GetInstance().ReSeedItems(nSceneID, nSceneIndex, nItemIndex); } break; case GameDefine_Globe.EVENT_DEFINE.EVENT_ENTERAUNMOUNTCALLBACK: { GameManager.gameManager.MissionManager.UnMountCallBack(); } break; case GameDefine_Globe.EVENT_DEFINE.EVENT_COLLECTUNMOUNTCALLBACK: { GameManager.gameManager.MissionManager.MissionCollectItemUnMountCallBack(); } break; case GameDefine_Globe.EVENT_DEFINE.EVENT_CLICKCOLLECTITEMUNMOUNTCALLBACK: { if (ProcessInput.Instance) ProcessInput.Instance.ClickCollectItemUnMountCallBack(_event.GetFloatParam(0), _event.GetFloatParam(1)); } break; } } } }