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");
}
}