Files
JJBB/Assets/Project/Script/GameLogic/EventSystem/EventSystem.cs

230 lines
11 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
/********************************************************************************
* 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;
}
}
}
}