GuideController.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace WS
  5. {
  6. public class GuideControllerUpdataeSystem : UpdateSystem<GuideController>
  7. {
  8. public override void Update(GuideController self)
  9. {
  10. if (Input.GetKeyDown(KeyCode.B))
  11. {
  12. self.OnSkipBtnClick();
  13. }
  14. }
  15. }
  16. public class GuideController : Controller<GuideView, GuideModel>
  17. {
  18. /// <summary>音频实体</summary>
  19. public VoiceEntity voice;
  20. /// <summary>流程管理器</summary>
  21. public ProcessManager processManager;
  22. /// <summary>完成回调</summary>
  23. public Action OnTaskComplete;
  24. protected override void BindingViewModel()
  25. {
  26. _Model.Bind(_View.SkipBtn, OnSkipBtnClick);
  27. _Model.Bind(_View.CloseGuideToggle, _Model.CloseGuide, OnCloseGuideBtnClick);
  28. _Model.Bind(_View.ExitBtn, OnExitBtnClick);
  29. }
  30. public override void OpenView()
  31. {
  32. base.OpenView();
  33. processManager = GameManager.Instance.ProcessManager;
  34. processManager.OnEndProcessCallback += OnProcessComplete;
  35. SetEndBtnStatus(false);
  36. }
  37. /// <summary> 跳过引导 </summary>
  38. public void OnSkipBtnClick()
  39. {
  40. _Model.CurrentTaskId = processManager.GetCurrentModule().VTaskId;
  41. processManager.EndProcess(true);
  42. OnProcessComplete();
  43. CloseView();
  44. }
  45. /// <summary>不再弹出引导 </summary>
  46. public void OnCloseGuideBtnClick(bool isOn)
  47. {
  48. GameManager.Instance.Data.IsGuide = isOn;
  49. }
  50. /// <summary>确认并关闭</summary>
  51. public void OnExitBtnClick()
  52. {
  53. OnTaskComplete?.Invoke();
  54. _View.UIGameObject.SetActive(false);
  55. //CloseView();
  56. }
  57. public void OnProcessComplete()
  58. {
  59. GameManager.Instance.Data.IsGuide = false;
  60. EndTeachController endTeachController =
  61. FacadeComponent.Instance.CreateController<EndTeachController>();
  62. endTeachController.OpenView();
  63. if (_Model.CurrentTaskId == 1)
  64. {
  65. endTeachController.SetViewMesg("已跳过新手引导");
  66. }
  67. else if (_Model.CurrentTaskId == processManager.GetVTaskList().Count)
  68. {
  69. endTeachController.SetViewMesg("已完成新手引导,现在返回大厅");
  70. }
  71. else
  72. {
  73. endTeachController.SetViewMesg("已跳过新手引导,现在返回大厅");
  74. }
  75. CloseView();
  76. }
  77. /// <summary>
  78. /// 设置引导页面
  79. /// </summary>
  80. /// <param name="textureName">提示图片</param>
  81. /// <param name="audioName">语音名称</param>
  82. /// <param name="pos">位置</param>
  83. /// <param name="quaternion">旋转</param>
  84. public void SetView(
  85. string textureName,
  86. string audioName,
  87. Vector3 pos,
  88. Quaternion quaternion
  89. )
  90. {
  91. Texture2D texture = Resources.Load<Texture2D>("Texture/" + textureName);
  92. Sprite sprite = Sprite.Create(
  93. texture,
  94. new Rect(0, 0, texture.width, texture.height),
  95. Vector2.zero
  96. );
  97. _View.HintImage.sprite = sprite;
  98. if (voice != null)
  99. {
  100. if (!voice.IsDisposed)
  101. VoiceManager.Instance.Stop(voice);
  102. }
  103. voice = VoiceManager.Instance.Play(VoiceType.Voice, audioName);
  104. _View.SetPosition(pos, quaternion);
  105. }
  106. /// <summary> 注册关闭回调 </summary>
  107. public void AddExitBtnAddListener(Action action)
  108. {
  109. OnTaskComplete = action;
  110. }
  111. /// <summary>按钮状态 </summary>
  112. public void SetEndBtnStatus(bool isActive)
  113. {
  114. _View.SkipBtn.gameObject.SetActive(!isActive);
  115. _View.CloseGuideToggle.gameObject.SetActive(isActive);
  116. _View.ExitBtn.gameObject.SetActive(isActive);
  117. }
  118. public override void Dispose()
  119. {
  120. if (voice != null)
  121. {
  122. if (!voice.IsDisposed)
  123. VoiceManager.Instance.Stop(voice);
  124. }
  125. voice = null;
  126. processManager.OnEndProcessCallback -= OnProcessComplete;
  127. base.Dispose();
  128. }
  129. }
  130. public class GuideView : View
  131. {
  132. public Image HintImage;
  133. public Button SkipBtn;
  134. public Toggle CloseGuideToggle;
  135. public Button ExitBtn;
  136. public override void LoadInit()
  137. {
  138. ShowModeType = ViewShowModeType.World;
  139. ReferenceCollector rc = UIGameObject.GetComponent<ReferenceCollector>();
  140. HintImage = rc.GetComponent<Image>("HintImage");
  141. SkipBtn = rc.GetComponent<Button>("SkipBtn");
  142. CloseGuideToggle = rc.GetComponent<Toggle>("CloseGuideToggle");
  143. ExitBtn = rc.GetComponent<Button>("ExitBtn");
  144. }
  145. }
  146. public class GuideModel : Model
  147. {
  148. /// <summary>关闭引导</summary>
  149. public BindableProperty<bool> CloseGuide;
  150. /// <summary> 当前任务ID </summary>
  151. public int CurrentTaskId;
  152. public override void InitProperty()
  153. {
  154. CloseGuide = CreateProperty<bool>();
  155. }
  156. }
  157. }