//------------------------------------------------------------ // Game Framework // Copyright © 2013-2021 Jiang Yin. All rights reserved. // Homepage: https://gameframework.cn/ // Feedback: mailto:ellan@gameframework.cn //------------------------------------------------------------ using System.Collections.Generic; using UnityGameFramework.Runtime; using ProcedureOwner = GameFramework.Fsm.IFsm; namespace MetaClient { public class ProcedureMain : ProcedureBase { private const float GameOverDelayedSeconds = 2f; private readonly Dictionary m_Games = new Dictionary(); private GameBase m_CurrentGame = null; private bool m_GotoMenu = false; private float m_GotoMenuDelaySeconds = 0f; public override bool UseNativeDialog { get { return false; } } public void GotoMenu() { m_GotoMenu = true; } protected override void OnInit(ProcedureOwner procedureOwner) { base.OnInit(procedureOwner); m_Games.Add(GameMode.Survival, new SurvivalGame()); } protected override void OnDestroy(ProcedureOwner procedureOwner) { base.OnDestroy(procedureOwner); m_Games.Clear(); } protected override void OnEnter(ProcedureOwner procedureOwner) { base.OnEnter(procedureOwner); m_GotoMenu = false; GameMode gameMode = (GameMode)procedureOwner.GetData("GameMode").Value; m_CurrentGame = m_Games[gameMode]; m_CurrentGame.Initialize(); } protected override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown) { if (m_CurrentGame != null) { m_CurrentGame.Shutdown(); m_CurrentGame = null; } base.OnLeave(procedureOwner, isShutdown); } protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds) { base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds); if (m_CurrentGame != null && !m_CurrentGame.GameOver) { m_CurrentGame.Update(elapseSeconds, realElapseSeconds); return; } if (!m_GotoMenu) { m_GotoMenu = true; m_GotoMenuDelaySeconds = 0; } m_GotoMenuDelaySeconds += elapseSeconds; if (m_GotoMenuDelaySeconds >= GameOverDelayedSeconds) { procedureOwner.SetData("NextSceneId", GameEntry.Config.GetInt("Scene.Menu")); ChangeState(procedureOwner); } } } }