ProcedureMain.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 Jiang Yin. All rights reserved.
  4. // Homepage: https://gameframework.cn/
  5. // Feedback: mailto:ellan@gameframework.cn
  6. //------------------------------------------------------------
  7. using System.Collections.Generic;
  8. using UnityGameFramework.Runtime;
  9. using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;
  10. namespace MetaClient
  11. {
  12. public class ProcedureMain : ProcedureBase
  13. {
  14. private const float GameOverDelayedSeconds = 2f;
  15. private readonly Dictionary<GameMode, GameBase> m_Games = new Dictionary<GameMode, GameBase>();
  16. private GameBase m_CurrentGame = null;
  17. private bool m_GotoMenu = false;
  18. private float m_GotoMenuDelaySeconds = 0f;
  19. public override bool UseNativeDialog
  20. {
  21. get
  22. {
  23. return false;
  24. }
  25. }
  26. public void GotoMenu()
  27. {
  28. m_GotoMenu = true;
  29. }
  30. protected override void OnInit(ProcedureOwner procedureOwner)
  31. {
  32. base.OnInit(procedureOwner);
  33. m_Games.Add(GameMode.Survival, new SurvivalGame());
  34. }
  35. protected override void OnDestroy(ProcedureOwner procedureOwner)
  36. {
  37. base.OnDestroy(procedureOwner);
  38. m_Games.Clear();
  39. }
  40. protected override void OnEnter(ProcedureOwner procedureOwner)
  41. {
  42. base.OnEnter(procedureOwner);
  43. m_GotoMenu = false;
  44. GameMode gameMode = (GameMode)procedureOwner.GetData<VarByte>("GameMode").Value;
  45. m_CurrentGame = m_Games[gameMode];
  46. m_CurrentGame.Initialize();
  47. }
  48. protected override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown)
  49. {
  50. if (m_CurrentGame != null)
  51. {
  52. m_CurrentGame.Shutdown();
  53. m_CurrentGame = null;
  54. }
  55. base.OnLeave(procedureOwner, isShutdown);
  56. }
  57. protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
  58. {
  59. base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
  60. if (m_CurrentGame != null && !m_CurrentGame.GameOver)
  61. {
  62. m_CurrentGame.Update(elapseSeconds, realElapseSeconds);
  63. return;
  64. }
  65. if (!m_GotoMenu)
  66. {
  67. m_GotoMenu = true;
  68. m_GotoMenuDelaySeconds = 0;
  69. }
  70. m_GotoMenuDelaySeconds += elapseSeconds;
  71. if (m_GotoMenuDelaySeconds >= GameOverDelayedSeconds)
  72. {
  73. procedureOwner.SetData<VarInt32>("NextSceneId", GameEntry.Config.GetInt("Scene.Menu"));
  74. ChangeState<ProcedureChangeScene>(procedureOwner);
  75. }
  76. }
  77. }
  78. }