Unity3D 大型游戏 MOBA类手机游戏 状态机在游戏中的应用(18)

来源:互联网 发布:牡丹江管理局电视网络 编辑:程序博客网 时间:2024/05/21 11:29

本文固定链接
http://blog.csdn.net/u013108312/article/details/78824724
状态机在游戏中应用还是比较广泛的,在我以前博客中关于游戏框架中有介绍,感兴趣的朋友可以去看看。那个框架是企鹅公司里面的游戏框架,好了废话不多说,直接进入今天的主题,状态机的应用。

using UnityEngine;using System.Collections;namespace BlGame.GameState{    public interface IGameState    {        GameStateType GetStateType();        void SetStateTo(GameStateType gsType);        void Enter();        GameStateType Update(float fDeltaTime);        void FixedUpdate(float fixedDeltaTime);        void Exit();    }}
using UnityEngine;using System.Collections;using System.Collections.Generic;namespace BlGame.GameState{    public enum GameStateType    {        GS_Continue,        GS_Login,        GS_User,        GS_Lobby,        GS_Room,        GS_Hero,        GS_Loading,        GS_Play,        GS_Over,    }    public class GameStateManager : Singleton<GameStateManager>    {        Dictionary<GameStateType, IGameState> gameStates;        IGameState currentState;        public GameStateManager()        {            gameStates = new Dictionary<GameStateType, IGameState>();            IGameState gameState;            gameState = new LoginState();            gameStates.Add(gameState.GetStateType(), gameState);            gameState = new UserState();            gameStates.Add(gameState.GetStateType(), gameState);            gameState = new LobbyState();            gameStates.Add(gameState.GetStateType(), gameState);            gameState = new RoomState();            gameStates.Add(gameState.GetStateType(), gameState);            gameState = new HeroState();            gameStates.Add(gameState.GetStateType(), gameState);            gameState = new LoadingState();            gameStates.Add(gameState.GetStateType(), gameState);            gameState = new PlayState();            gameStates.Add(gameState.GetStateType(), gameState);            gameState = new OverState();            gameStates.Add(gameState.GetStateType(), gameState);        }        public IGameState GetCurState()        {            return currentState;        }        public void ChangeGameStateTo(GameStateType stateType)        {            if (currentState != null && currentState.GetStateType() != GameStateType.GS_Loading && currentState.GetStateType() == stateType)                return;            if (gameStates.ContainsKey(stateType))            {                if (currentState != null)                {                    currentState.Exit();                }                currentState = gameStates[stateType];                currentState.Enter();            }        }        public void EnterDefaultState()        {            ChangeGameStateTo(GameStateType.GS_Login);        }        public void FixedUpdate(float fixedDeltaTime)        {            if (currentState != null)            {                currentState.FixedUpdate(fixedDeltaTime);            }        }        public void Update(float fDeltaTime)        {            GameStateType nextStateType = GameStateType.GS_Continue;            if (currentState != null)            {                nextStateType = currentState.Update(fDeltaTime);            }            if (nextStateType > GameStateType.GS_Continue)            {                ChangeGameStateTo(nextStateType);            }        }        public IGameState getState(GameStateType type)        {            if (!gameStates.ContainsKey(type))            {                return null;            }            return gameStates[type];        }    }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.GameData;using BlGame.Resource;using BlGame.Ctrl;using BlGame.View;namespace BlGame.GameState{    class HeroState : IGameState    {        GameStateType stateTo;        GameObject mScenesRoot;        GameObject mUIRoot;        public HeroState()        {        }        public GameStateType GetStateType()        {            return GameStateType.GS_Hero;        }        public void SetStateTo(GameStateType gs)        {            stateTo = gs;        }        public void Enter()        {            SetStateTo(GameStateType.GS_Continue);            HeroCtrl.Instance.Enter();            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET);            AudioClip clip = clipUnit.Asset as AudioClip;            AudioManager.Instance.PlayBgAudio(clip);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);            EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);            EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);         }        public void Exit()        {            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);            EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);            EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);             HeroCtrl.Instance.Exit();        }        public void OnConnectServerFail()        {            EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Reconnect);        }        public void FixedUpdate(float fixedDeltaTime)        {        }        public GameStateType Update(float fDeltaTime)        {            return stateTo;        }        public void OnEvent(CEvent evt)        {            switch (evt.GetEventId())            {                case EGameEvent.eGameEvent_Loading:                    {                        GameStateType stateType = (GameStateType)evt.GetParam("NextState");                        LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;                        lState.SetNextState(stateType);                        lState.SetFrontScenes(View.EScenesType.EST_Login);                        SetStateTo(GameStateType.GS_Loading);                    }                    break;            }        }        private void SdkLogOff()        {            GameMethod.LogOutToLogin();            SetStateTo(GameStateType.GS_Login);        }    }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.GameData;using System.Threading;using BlGame.Resource;using BlGame.View;using BlGame.Ctrl;using BlGame.Model;namespace BlGame.GameState{    class LoadingState : IGameState    {        GameStateType stateTo;        GameObject mScenesRoot;        GameObject mUIRoot;        public GameStateType mNextState;        public EScenesType mFrontScenes;        public LoadingState()        {            mNextState = GameStateType.GS_Continue;        }        public GameStateType GetStateType()        {            return GameStateType.GS_Loading;        }        public void SetNextState(GameStateType next)        {            mNextState = next;        }        public void SetFrontScenes(EScenesType front)        {            mFrontScenes = front;        }        public void SetStateTo(GameStateType gs)        {            stateTo = gs;        }        private string GetLoadMapName()        {            MapInfo map = MapLoadConfig.Instance.GetMapInfo(GameUserModel.Instance.GameMapID);            if (map == null)            {                Debug.LogError("GetLoadMapName map find fail !!!");                return "";            }            return map.mLoadScene;        }        private void LoadFinish(GameStateType state)        {            //Timer t = new Timer(this.CallBack, state, 5000, 0);            SetStateTo(state);        }//         public void CallBack(object obj)//         {//             GameStateType state = (GameStateType)obj;//             SetStateTo(state);//         }        public void Enter()        {            if (mNextState == GameStateType.GS_Continue)                return;            SetStateTo(GameStateType.GS_Continue);            //加载UI            mUIRoot = GameMethod.LoadProgress();            LoadScene.Instance.GState = mNextState;            LoadScene.Instance.OnLoadFinish += LoadFinish;            //加载场景之前需要进行清除操作            BlGame.Effect.EffectManager.Instance.DestroyAllEffect();            //清除GameObjectPool数据            GameObjectPool.Instance.Clear();            //加载场景            if (mNextState == BlGame.GameState.GameStateType.GS_Play)            {                LoadScene.Instance.isCloseBySelf = false;                string name = GetLoadMapName();                LoadScene.Instance.LoadAsignedSene("Scenes/"+name);                WindowManager.Instance.ChangeScenseToPlay(mFrontScenes);            }            else            {                //返回Pvp_Login选人界面需要清除预加载信息                                ReadPreLoadConfig.Instance.Clear();                LoadScene.Instance.isCloseBySelf = true;                LoadScene.Instance.LoadAsignedSene("Scenes/Pvp_Login");                WindowManager.Instance.ChangeScenseToLogin(mFrontScenes);            }            //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip;            //AudioManager.Instance.PlayBgAudio(clip);            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET);            AudioClip clip = clipUnit.Asset as AudioClip;            AudioManager.Instance.PlayBgAudio(clip);            EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent);        }        public void Exit()        {            EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent);        }        public void FixedUpdate(float fixedDeltaTime)        {        }        public GameStateType Update(float fDeltaTime)        {            return stateTo;        }        public void OnConnectServerFail()        {            EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Reconnect);        }        public void OnEvent(CEvent evt)        {            switch (evt.GetEventId())            {                case EGameEvent.eGameEvent_IntoRoom:                    {                        LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;                        lState.SetNextState(GameStateType.GS_Room);                        lState.SetFrontScenes(View.EScenesType.EST_Play);                        SetStateTo(GameStateType.GS_Loading);                    }                    break;            }        }    }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.Resource;using BlGame.Ctrl;using System;using BlGame.View;namespace BlGame.GameState{    class LobbyState : IGameState    {        GameStateType stateTo;        GameObject mScenesRoot;        GameObject mUIRoot;        public LobbyState()        {        }        public GameStateType GetStateType()        {            return GameStateType.GS_Lobby;        }        public void SetStateTo(GameStateType gs)        {            stateTo = gs;        }        public void Enter()        {            SetStateTo(GameStateType.GS_Continue);            LobbyCtrl.Instance.Enter();            //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip;            //AudioManager.Instance.PlayBgAudio(clip);            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET);            AudioClip clip = clipUnit.Asset as AudioClip;            AudioManager.Instance.PlayBgAudio(clip);            if (!AudioManager.Instance.LoopAudioSource.isPlaying)            {                AudioManager.Instance.LoopAudioSource.Play();            }             EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent);             EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);             EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoHero, OnEvent);             EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);              EventCenter.AddListener<UInt64,string>(EGameEvent.eGameEvent_InviteCreate, InviteAddFriend);             EventCenter.AddListener<string>(EGameEvent.eGameEvent_InviteAddRoom, InviteAddRoom);             EventCenter.AddListener(EGameEvent.eGameEvent_ReconnectToBatttle, ReconnectToBatttle);            }        private void SdkLogOff()        {            GameMethod.LogOutToLogin();            SetStateTo(GameStateType.GS_Login);        }        private void InviteAddRoom(string arg1)        {            InviteRoomCtrl.Instance.Enter();        }        private void InviteAddFriend(UInt64 sGUID ,string temp)        {            if (InviteCtrl.Instance.AddDic(sGUID, temp) && InviteCtrl.Instance.InvatiDic.Count > 1)            {                InviteCtrl.Instance.ChangeInvite(sGUID, temp);            }else                InviteCtrl.Instance.Enter(sGUID,temp);        }        public void Exit()        {            LobbyCtrl.Instance.Exit();            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent);            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoHero, OnEvent);            EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);                        EventCenter.RemoveListener<UInt64,string>(EGameEvent.eGameEvent_InviteCreate, InviteAddFriend);            EventCenter.RemoveListener<string>(EGameEvent.eGameEvent_InviteAddRoom, InviteAddRoom);            EventCenter.RemoveListener(EGameEvent.eGameEvent_ReconnectToBatttle, ReconnectToBatttle);            }        public void FixedUpdate(float fixedDeltaTime)        {           }        public GameStateType Update(float fDeltaTime)        {            return stateTo;        }        public void OnEvent(CEvent evt)        {            switch (evt.GetEventId())            {                case EGameEvent.eGameEvent_IntoRoom:                    SetStateTo(GameStateType.GS_Room);                    break;                case EGameEvent.eGameEvent_IntoHero:                    GameStateManager.Instance.ChangeGameStateTo(GameStateType.GS_Hero);                    break;                case EGameEvent.eGameEvent_Loading:                    GameStateType stateType = (GameStateType)evt.GetParam("NextState");                    LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;                    lState.SetNextState(stateType);                    lState.SetFrontScenes(View.EScenesType.EST_Login);                    SetStateTo(GameStateType.GS_Loading);                    break;                          }        }        public void ReconnectToBatttle()        {            EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_ReEnter);        }    }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.Resource;using BlGame.Ctrl;namespace BlGame.GameState{    class LoginState : IGameState    {        GameStateType stateTo;        GameObject mScenesRoot;       // GameObject mUIRoot;        public LoginState()        {        }        public GameStateType GetStateType()        {            return GameStateType.GS_Login;        }        public void SetStateTo(GameStateType gs)        {            stateTo = gs;        }        public void Enter()        {            SetStateTo(GameStateType.GS_Continue);            //yaz修改                        //mScenesRoot = GameObject.Instantiate(Resources.Load(GameConstDefine.GameLogin)) as GameObject;            //mUIRoot = LoadUiResource.LoadRes(GameMethod.GetUiCamera.transform, GameConstDefine.LoadGameLoginUI);            //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip;            ResourceUnit sceneRootUnit = ResourcesManager.Instance.loadImmediate(GameConstDefine.GameLogin, ResourceType.PREFAB);            mScenesRoot = GameObject.Instantiate(sceneRootUnit.Asset) as GameObject;            //mUIRoot = LoadUiResource.LoadRes(GameMethod.GetUiCamera.transform, GameConstDefine.LoadGameLoginUI);            LoginCtrl.Instance.Enter();            ResourceUnit audioClipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET);            AudioClip clip = audioClipUnit.Asset as AudioClip;                   AudioManager.Instance.PlayBgAudio(clip);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_InputUserData, OnEvent);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent);            EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);                    }        private void SdkLogOff()        {            GameMethod.LogOutToLogin();            SetStateTo(GameStateType.GS_Login);        }        public void Exit()        {            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_InputUserData, OnEvent);            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent);            EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);                   //LoadUiResource.DestroyLoad(mUIRoot);            LoginCtrl.Instance.Exit();            GameObject.DestroyImmediate(mScenesRoot);                    }        public void FixedUpdate(float fixedDeltaTime)        {        }        public GameStateType Update(float fDeltaTime)        {            return stateTo;        }        public void OnEvent(CEvent evt)        {            UIPlayMovie.PlayMovie("cg.mp4", Color.black, 2/* FullScreenMovieControlMode.Hidden*/, 3/*FullScreenMovieScalingMode.Fill*/);            switch (evt.GetEventId())            {                case EGameEvent.eGameEvent_InputUserData:                    SetStateTo(GameStateType.GS_User);                    break;                case EGameEvent.eGameEvent_IntoLobby:                    GameStateManager.Instance.ChangeGameStateTo(GameStateType.GS_Lobby);                    break;            }        }    }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.Effect;using BlGame.Resource;using BlGame.Ctrl;using BlGame.View;using BlGame.GameEntity;using BlGame.Model;namespace BlGame.GameState{    class OverState : IGameState    {        GameStateType stateTo;        GameObject mScenesRoot;        GameObject mUIRoot;        float mTime;        bool mNeedUpdate;        bool mNeedScore;        public OverState()        {        }        public GameStateType GetStateType()        {            return GameStateType.GS_Over;        }        public void SetStateTo(GameStateType gs)        {            stateTo = gs;        }        public void Enter()        {            SetStateTo(GameStateType.GS_Continue);            mTime = 0;            mNeedUpdate = true;            mNeedScore = true;            //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip;            //AudioManager.Instance.PlayBgAudio(clip);            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.GetMapBgAudio((MAPTYPE)GameUserModel.Instance.GameMapID), ResourceType.ASSET);            AudioClip clip = clipUnit.Asset as AudioClip;            AudioManager.Instance.PlayBgAudio(clip);            AdvancedGuideCtrl.Instance.Exit();            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent);            EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);        }        public void Exit()        {            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent);            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent);            EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);            //GameMethod.DisableAllUI();            GameMethod.RemoveUI("superwan(Clone)");            PlayerManager.Instance.LocalPlayer.CleanWhenGameOver();            JxBlGame.Instance.OpenConnectUI();            GameObjectPool.Instance.Clear();        }        public void FixedUpdate(float fixedDeltaTime)        {        }        public GameStateType Update(float fDeltaTime)        {            if (!mNeedUpdate)                return stateTo;            mTime += fDeltaTime;            if (UIGuideModel.Instance.GuideType == GCToCS.AskCSCreateGuideBattle.guidetype.first)            {                if (mTime > 6)                {                    CGLCtrl_GameLogic.Instance.EmsgToss_AskReEnterRoom();                    mNeedUpdate = false;                    UIGuideCtrl.Instance.GuideBattleType(GCToCS.AskCSCreateGuideBattle.guidetype.other);                }            }            else            {                if (mTime > 18)                {                    ScoreCtrl.Instance.Exit();                    CGLCtrl_GameLogic.Instance.EmsgToss_AskReEnterRoom();                    mNeedUpdate = false;                }                else if (mNeedScore && mTime > 6)                {                    ScoreCtrl.Instance.Enter();                    mNeedScore = false;                }            }            return stateTo;        }        public void OnEvent(CEvent evt)        {            switch (evt.GetEventId())            {                case EGameEvent.eGameEvent_Loading:                    {                        GameStateType stateType = (GameStateType)evt.GetParam("NextState");                        LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;                        lState.SetNextState(stateType);                        lState.SetFrontScenes(View.EScenesType.EST_Play);                        SetStateTo(GameStateType.GS_Loading);                    }                    break;                case EGameEvent.eGameEvent_IntoRoom:                    {                        LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;                        lState.SetNextState(GameStateType.GS_Room);                        lState.SetFrontScenes(View.EScenesType.EST_Play);                        SetStateTo(GameStateType.GS_Loading);                    }                    break;                case EGameEvent.eGameEvent_IntoLobby:                    {                        LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;                        lState.SetNextState(GameStateType.GS_Lobby);                        lState.SetFrontScenes(View.EScenesType.EST_Play);                        SetStateTo(GameStateType.GS_Loading);                    }                    break;            }        }        private void OnConnectServerFail()        {            EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Disconnect);        }    }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.GameData;using BlGame.GameEntity;using BlGame.GuideDate;using BlGame.Resource;using BlGame.Model;using BlGame.Ctrl;using BlGame.View;using System;using System.Linq;namespace BlGame.GameState{    class PlayState : IGameState    {        GameStateType stateTo;        GameObject mScenesRoot;        GameObject mUIRoot;        //地图相机类型        public int mCameraType = 1;        public int ShopID = 0;        public PlayState()        {        }        public GameStateType GetStateType()        {            return GameStateType.GS_Play;        }        public void SetStateTo(GameStateType gs)        {            stateTo = gs;        }        public void Enter()        {            SetStateTo(GameStateType.GS_Continue);            IGuideMidMatchTip.Instance.RegisterListerner();            switch (PlayerManager.Instance.LocalAccount.ObType)            {                case ObPlayerOrPlayer.PlayerType:                    GamePlayCtrl.Instance.Enter();                    break;                case ObPlayerOrPlayer.PlayerObType:                    mUIRoot = LoadUiResource.LoadRes(GameMethod.GetUiCamera.transform, GameConstDefine.LoadGameViewer);                    break;            }            JxBlGame.Instance.PlayStart();            CGLCtrl_GameLogic.Instance.AskLoadComplete();            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.GetMapBgAudio((MAPTYPE)GameUserModel.Instance.GameMapID), ResourceType.ASSET);            AudioClip clip = clipUnit.Asset as AudioClip;            AudioManager.Instance.PlayBgAudio(clip);            //正常流程            EventCenter.AddListener<UInt64>(EGameEvent.eGameEvent_GameOver, OnGameOver);            //新手引导流程            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);            EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);            EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);            EventCenter.AddListener(EGameEvent.eGameEvent_ReconnectToBatttle, OnReconnectToBatttle);                 //获取地图信息            GetMapType();        }        public void GetMapType()        {            if (UIGuideModel.Instance.GuideType == GCToCS.AskCSCreateGuideBattle.guidetype.first)            {                UIGuideCtrl.Instance.Enter();                GamePlayGuideModel.Instance.NowTaskId = 90004;                EventCenter.Broadcast(EGameEvent.eGameEvent_PlayTaskModelFinish);            }            else if (UIGuideModel.Instance.GuideType == GCToCS.AskCSCreateGuideBattle.guidetype.second)            {                AdvancedGuideCtrl.Instance.Enter();                UIGuideCtrl.Instance.GuideBattleType(GCToCS.AskCSCreateGuideBattle.guidetype.other);            }            //获取当前游戏地图数据            string levelName = Application.loadedLevelName;            MapInfo mapInfo = MapLoadConfig.Instance.GetMapInfo(levelName);            if (mapInfo == null)                Debug.LogError("can not find levelName in MapLoadCfg.xml!");            mCameraType = mapInfo.mCameraType;            GamePlayCtrl.Instance.SetShopID(mapInfo.mShopID);        }        public void Exit()        {            EventCenter.RemoveListener<UInt64>(EGameEvent.eGameEvent_GameOver, OnGameOver);            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);            EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);            EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);            EventCenter.RemoveListener(EGameEvent.eGameEvent_ReconnectToBatttle, OnReconnectToBatttle);                 LoadUiResource.DestroyLoad(mUIRoot);            GamePlayCtrl.Instance.Exit();        }        public void FixedUpdate(float fixedDeltaTime)        {        }        public GameStateType Update(float fDeltaTime)        {            return stateTo;        }        private void OnGameOver(UInt64 BaseGuid)        {            PlayFinishVedio(BaseGuid);            GameStateManager.Instance.ChangeGameStateTo(GameStateType.GS_Over);        }        public void OnEvent(CEvent evt)        {            switch (evt.GetEventId())            {                case EGameEvent.eGameEvent_Loading:                    {                        GameStateType stateType = (GameStateType)evt.GetParam("NextState");                        LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;                        lState.SetNextState(stateType);                        lState.SetFrontScenes(View.EScenesType.EST_Play);                        SetStateTo(GameStateType.GS_Loading);                    }                    break;            }        }        private void OnConnectServerFail()        {            EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Reconnect);        }        private void SdkLogOff()        {            GameMethod.LogOutToLogin();            LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;            lState.SetNextState(GameStateType.GS_Login);            lState.SetFrontScenes(View.EScenesType.EST_Play);            SetStateTo(GameStateType.GS_Loading);        }        private void OnReconnectToBatttle()        {            CGLCtrl_GameLogic.Instance.EmsgToss_AskEnterBattle(GameUserModel.Instance.GameBattleID);        }        //播放特效        void PlayFinishVedio(UInt64 ObjID)        {            BlGame.AudioManager.Instance.StopHeroAudio();            GameTimeData.Instance.EndCountTime();            ProgressBarInterface.hideProgressBar();            //UIPlay.OpenUIPlay(false);            //if (UIDeathInterface.Instance != null)            //{            //    GameObject.DestroyImmediate(UIDeathInterface.Instance.gameObject);            //}            DeathCtrl.Instance.Exit();            Iselfplayer player = PlayerManager.Instance.LocalPlayer;            if (player != null)            {                player.RemoveRuinWarning();            }            GameMethod.CreateWindow(GameConstDefine.GameOverBoxPath, Vector3.zero, GameMethod.GetUiCamera.transform);            if (Camera.main != null && Camera.main.gameObject != null)            {                Camera.main.gameObject.AddComponent<BaseDaBomb>();            }            GameMethod.GetMainCamera.target = null;            GameMethod.GetMainCamera.enabled = false;            //ToReview wincamp没用上            UInt64 sGUID;            sGUID = ObjID;            Ientity entity = EntityManager.Instance.GetEntity(sGUID);            for (int i = EntityManager.AllEntitys.Count - 1; i >= 0; i--)            {                var item = EntityManager.AllEntitys.ElementAt(i);                if (item.Value.RealEntity != null)                {                    item.Value.RealEntity.PlayerFreeAnimation();                    item.Value.RealEntity.SyncEntity = null;                    item.Value.RealEntity.enabled = false;                }                if (item.Value.entityType == EntityType.Player || item.Value.entityType == EntityType.Building)                    continue;                EntityManager.AllEntitys.Remove(item.Key);            }            if (entity != null)            {                BaseDaBomb.Instance.SetBaseBomb(true, entity, GameUserModel.Instance.GameMapID);    //ToReview int->uint            }            AltarData.Instance.DelAllAltar();            BattleingData.Instance.ClearAllGoods();            BattleingData.Instance.ClearAllBattleData();        }    }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.GameData;using BlGame.Resource;using BlGame.Ctrl;using System;using BlGame.View;namespace BlGame.GameState{    class RoomState : IGameState    {        GameStateType stateTo;        GameObject mScenesRoot;        GameObject mUIRoot;        public RoomState()        {        }        public GameStateType GetStateType()        {            return GameStateType.GS_Room;        }        public void SetStateTo(GameStateType gs)        {            stateTo = gs;        }        public void Enter()        {            SetStateTo(GameStateType.GS_Continue);            RoomCtrl.Instance.Enter();            //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip;            //AudioManager.Instance.PlayBgAudio(clip);            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET);            AudioClip clip = clipUnit.Asset as AudioClip;            AudioManager.Instance.PlayBgAudio(clip);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_RoomBack, OnEvent);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoHero, OnEvent);            EventCenter.AddListener<UInt64,string>(EGameEvent.eGameEvent_InviteCreate, InviteAddFriend);            EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);            EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);        }        private void InviteAddFriend(UInt64 sGUID,string temp)        {            if (InviteCtrl.Instance.AddDic(sGUID, temp) && InviteCtrl.Instance.InvatiDic.Count > 1)            {                InviteCtrl.Instance.ChangeInvite(sGUID, temp);            }            else                InviteCtrl.Instance.Enter(sGUID, temp);        }        public void Exit()        {            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_RoomBack, OnEvent);            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoHero, OnEvent);            EventCenter.RemoveListener<UInt64, string>(EGameEvent.eGameEvent_InviteCreate, InviteAddFriend);            EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);            EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);            RoomCtrl.Instance.Exit();        }        public void FixedUpdate(float fixedDeltaTime)        {        }        public GameStateType Update(float fDeltaTime)        {            return stateTo;        }        public void OnEvent(CEvent evt)        {            switch (evt.GetEventId())            {                case EGameEvent.eGameEvent_RoomBack:                    SetStateTo(GameStateType.GS_Lobby);                    break;                case EGameEvent.eGameEvent_IntoHero:                    SetStateTo(GameStateType.GS_Hero);                    break;            }        }        private void SdkLogOff()        {            GameMethod.LogOutToLogin();            SetStateTo(GameStateType.GS_Login);        }        private void OnConnectServerFail()        {            EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Disconnect);        }    }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.Resource;using BlGame.Ctrl;namespace BlGame.GameState{    class UserState : IGameState    {        GameStateType stateTo;        GameObject mScenesRoot;        public UserState()        {        }        public GameStateType GetStateType()        {            return GameStateType.GS_User;        }        public void SetStateTo(GameStateType gs)        {            stateTo = gs;        }        public void Enter()        {            SetStateTo(GameStateType.GS_Continue);            EventCenter.Broadcast(EGameEvent.eGameEvent_UserEnter);            //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip;            //AudioManager.Instance.PlayBgAudio(clip);            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET);            AudioClip clip = clipUnit.Asset as AudioClip;            AudioManager.Instance.PlayBgAudio(clip);            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent);            EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);        }        private void SdkLogOff()        {            GameMethod.LogOutToLogin();            SetStateTo(GameStateType.GS_Login);        }        public void Exit()        {            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent);            EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff);            EventCenter.Broadcast(EGameEvent.eGameEvent_UserExit);        }        public void FixedUpdate(float fixedDeltaTime)        {        }        public GameStateType Update(float fDeltaTime)        {            return stateTo;        }        public void OnEvent(CEvent evt)        {            switch (evt.GetEventId())            {                case EGameEvent.eGameEvent_IntoLobby:                    GameStateManager.Instance.ChangeGameStateTo(GameStateType.GS_Lobby);                    break;                        }        }    }}

本文固定链接
http://blog.csdn.net/u013108312/article/details/78824724

原创粉丝点击