Example #1
0
 /// <summary>
 /// 将一个游戏运行状态压入栈中
 /// </summary>
 /// <param name="enumGameRunType"></param>
 public void PushEnumGameRunType(EnumGameRunType enumGameRunType)
 {
     if (GameRunType != enumGameRunType)
     {
         _GameRunTypeStack.Push(enumGameRunType);
         Call <IGameState, EnumGameRunType>(temp => temp.GameRunType);
     }
 }
 private void OnEnable()
 {
     iGameState                      = GameState.Instance.GetEntity <IGameState>();
     synthesisStructData             = DataCenter.Instance.GetMetaData <SynthesisStructData>();
     playerState                     = DataCenter.Instance.GetEntity <PlayerState>();
     iSynthesisState                 = GameState.Instance.GetEntity <ISynthesisState>();
     oldGameRunType                  = iGameState.GameRunType;
     iGameState.GameRunType          = EnumGameRunType.Synthesis;
     UIManager.Instance.KeyUpHandle += Instance_KeyUpHandle;
 }
Example #3
0
    /// <summary>
    /// 提出最顶层的一个状态
    /// </summary>
    public EnumGameRunType PopEnumGameRunType()
    {
        if (_GameRunTypeStack.Count <= 1)
        {
            return(_GameRunTypeStack.Peek());
        }
        EnumGameRunType oldRunType = _GameRunTypeStack.Pop();

        Call <IGameState, EnumGameRunType>(temp => temp.GameRunType);
        return(oldRunType);
    }
Example #4
0
 /// <summary>
 /// 更改场景
 /// </summary>
 /// <param name="sceneName">场景名</param>
 /// <param name="playerLocation">玩家的位置</param>
 /// <param name="LoadResultAction">加载结果回调</param>
 public void ChangedScene(string sceneName, Vector3 playerLocation, Action <bool> LoadResultAction = null)
 {
     GameRunType = EnumGameRunType.Start;//切换场景时当前的状态为开始状态
     //如果要切换的场景不是当前场景则加载场景
     if (SceneName != sceneName)
     {
         //保存原来地形的遮罩图
         if (!string.IsNullOrEmpty(SceneName))
         {
             playerState.SaveGetSceneMapMaskData(SceneName);
         }
         //开始加载
         UIChangeScene.Instance.LoadScene(sceneName, result =>
         {
             //自身调用初始化数据
             Debug.Log("需要调用自身的函数实现数据的初始化,如地图显示,npc位置等一系列的数据");
             //加载地图的图片以及遮罩资源
             IMapState iMapState     = GetEntity <IMapState>();
             MapData mapData         = DataCenter.Instance.GetMetaData <MapData>();
             MapDataInfo mapDataInfo = mapData[sceneName];
             if (mapDataInfo != null)
             {
                 mapDataInfo.Load();
                 iMapState.MapBackSprite  = mapDataInfo.MapSprite;
                 Sprite mapMaskSprite     = playerState.GetSceneMapMaskSprite(sceneName, mapDataInfo.MapSprite);
                 iMapState.MaskMapSprite  = mapMaskSprite;
                 iMapState.MapRectAtScene = mapDataInfo.SceneRect;
             }
             //初始化npc与npc的位置
             NPCData npcData            = DataCenter.Instance.GetMetaData <NPCData>();
             NPCDataInfo[] npcDataInfos = npcData.GetNPCDataInfos(sceneName);
             foreach (NPCDataInfo npcDataInfo in npcDataInfos)
             {
                 npcDataInfo.Load();//切换场景时有时候会导致游戏对象被删除,需要重新Load
             }
             //初始化采集点与采集点的位置
             StuffData stuffData            = DataCenter.Instance.GetMetaData <StuffData>();
             StuffDataInfo[] stuffDataInfos = stuffData.GetStuffDataInfos(sceneName);
             foreach (StuffDataInfo stuffDataInfo in stuffDataInfos)
             {
                 stuffDataInfo.Load();//切换场景时有时候会导致游戏对象被删除,需要重新Load
             }
             //初始化功能交互对象
             ActionInteractiveData actionInteractiveData            = DataCenter.Instance.GetMetaData <ActionInteractiveData>();
             ActionInteractiveDataInfo[] actionInteractiveDataInfos = actionInteractiveData.GetActionInteractiveDataInfos(sceneName);
             foreach (ActionInteractiveDataInfo actionInteractiveDataInfo in actionInteractiveDataInfos)
             {
                 actionInteractiveDataInfo.Load();//切换场景时有时候会导致游戏对象被删除,需要重新Load
             }
             //创建UI
             GameObject mainCanvasPrefab = Resources.Load <GameObject>("UI/MainCanvas");
             GameObject.Instantiate(mainCanvasPrefab);
             //创建玩家操纵的游戏对象
             GameObject playerPrefab = Resources.Load <GameObject>("Prefabs/Player");
             GameObject.Instantiate(playerPrefab);
             //更改过后修改玩家位置
             PlayerObj.transform.position = playerLocation;
             //回调
             if (LoadResultAction != null)
             {
                 LoadResultAction(result);
             }
             SceneName   = sceneName;
             GameRunType = EnumGameRunType.Safe;
             //场景变换回调
             Call <IGameState, Action <string, Vector3, Action <bool> > >(temp => temp.ChangedScene);
         });
     }
     else//如果不需要切换场景则直接更改玩家位置即可
     {
         UIChangeScene.Instance.MovePlayer(3, result =>
         {
             GameRunType = EnumGameRunType.Safe;
             //场景变换回调
             Call <IGameState, Action <string, Vector3, Action <bool> > >(temp => temp.ChangedScene);
         });
         //更改过后修改玩家位置
         PlayerObj.transform.position = playerLocation;
         //关闭当前按显示的UI
         IInteractiveState iInteractiveState = GameState.Instance.GetEntity <IInteractiveState>();
         iInteractiveState.ActionObj.SetActive(false);
     }
 }