游戏状态

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Reflection;

public class GameStateManager : MonoBehaviour {
    private static Dictionary<string, GameState> StateDic = null;
    private static GameState curState = null;
    
	void Start () {
        StateDic = new Dictionary<string, GameState>();
        LoadScene(1);
        
	}

    public static void LoadScene(int sceneId)
    {
      SceneDate date=DateManager.sceneDateManager.GetDate(sceneId);
      if (date == null)
      {
          Debug.Log("sceneDate is null" + sceneId);
          return;
      }

      GameState state = null;
      if (!StateDic.TryGetValue(date.GameState, out state))
      {
          state = Assembly.GetExecutingAssembly().CreateInstance(date.GameState) as GameState;
          if (state == null)
          {
              Debug.Log(date.GameState + "is error");
              return ;
          }
          StateDic.Add(date.GameState, state);
      }
      SetState(state);
      DownloadManager.Instacne.LoadScene(date.LevelName, state.LoadComplete);
    }

    private static void SetState(GameState state)
    {
        if (state != curState && curState != null)
        {
            curState.Stop();       
        }
        curState = state;
        curState.Start();

    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class GameState {
    public void Start()
    {
        UIManager.ShowPanel("LoadingPanel");
        OnEnter();
    }

    public void Stop()
    {
        OnExit();
    }

    public void LoadComplete(params object[] args)
    {
        OnLoadComplete();
        UIManager.HidePanel("LoadingPanel");
    }

    protected abstract void OnEnter();
    protected abstract void OnExit();
    protected abstract void OnLoadComplete();
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoginState:GameState {


    protected override void OnEnter()
    {
      
    }

    protected override void OnExit()
    {
        UIManager.HidePanel("LoginPanel");
    }

    protected override void OnLoadComplete()
    {
        UIManager.ShowPanel("LoginPanel");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值