230 lines
11 KiB
C#
230 lines
11 KiB
C#
/********************************************************************************
|
||
* 文件名: 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<EventSystem>
|
||
{
|
||
//消息队列
|
||
private readonly List<GameEvent> m_DelayEventQueue;
|
||
|
||
public EventSystem()
|
||
{
|
||
m_DelayEventQueue = new List<GameEvent>();
|
||
}
|
||
|
||
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<ObjManager>.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<ObjManager>.Instance.MainPlayer != null)
|
||
{
|
||
Singleton<ObjManager>.Instance.MainPlayer.OnPlayerLeaveScene();
|
||
if (tabActLevel != null && tabActLevel.EffectID >= 0)
|
||
Singleton<ObjManager>.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<ObjManager>.GetInstance().MainPlayer.SetPosition(GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterScenePos);
|
||
//var serverID = GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterSceneServerID;
|
||
//ObjManager.Instance.AddPoolObj(ObjManager.Instance.MainPlayer);
|
||
//Singleton<ObjManager>.Instance.MainPlayer = Singleton<ObjManager>.GetInstance().MainPlayer;
|
||
//Singleton<ObjManager>.Instance.m_bBeginAsycCreateMainPlayer = true;
|
||
var mainPlayer = ObjManager.Instance.MainPlayer;
|
||
//mainPlayer.ChangeSceneSpecialOpt();
|
||
mainPlayer.SyncPlayerY();
|
||
var playerCombat = mainPlayer.GetComponent<AI_PlayerCombat>();
|
||
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<AI_PlayerCombat>();
|
||
// 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<ObjManager>.Instance.MainPlayer != null)
|
||
// // {
|
||
// // Singleton<ObjManager>.Instance.MainPlayer.BeginQingGong(_event);
|
||
// // }
|
||
// int nServerID = _event.GetIntParam(2);
|
||
// Obj obj = Singleton<ObjManager>.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<CollectItem>.GetInstance() != null)
|
||
Singleton<CollectItem>.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;
|
||
}
|
||
}
|
||
}
|
||
} |