Files
JJBB/Assets/Project/Script/GameLogic/EventSystem/EventSystem.cs
2024-08-23 15:49:34 +08:00

230 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************************************************************
* 文件名: 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;
}
}
}
}