Messager.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. using UnityEngine;
  2. using UnityEngine.Events;
  3. using UnityEngine.UI;
  4. namespace WS
  5. {
  6. ///<summary>消息框类型</summary>
  7. public enum MessagerType
  8. {
  9. Error,
  10. Default,
  11. }
  12. ///<summary>消息框控制器</summary>
  13. public class MessagerContorller : Controller<MessagerView, MessagerModel>
  14. {
  15. /// <summary>打开消息框</summary>
  16. /// <param name="type">面板类型</param>
  17. /// <param name="messager">消息</param>
  18. /// <param name="defineName">第一个按钮名称</param>
  19. /// <param name="onDefine">第一个按钮回调</param>
  20. /// <param name="cancelName">第二个按钮名称 (如果第二个按钮名称为空,不会显示)</param>
  21. /// <param name="onCancel">第二个按钮回调</param>Async
  22. public static void OpenMessageView(MessagerType type, string messager, string defineName = "确定", UnityAction onDefine = null, string cancelName = "", UnityAction onCancel = null)
  23. {
  24. MessagerContorller contorller = FacadeComponent.Instance.CreateController<MessagerContorller>(false);
  25. contorller.OpenView();
  26. contorller.SetViewAndModel(type, messager, defineName, onDefine, cancelName, onCancel);
  27. }
  28. /// <summary>打开消息框</summary>
  29. /// <param name="clone">克隆体</param>
  30. /// <param name="type">面板类型</param>
  31. /// <param name="messager">消息</param>
  32. /// <param name="defineName">第一个按钮名称</param>
  33. /// <param name="onDefine">第一个按钮回调</param>
  34. /// <param name="cancelName">第二个按钮名称 (如果第二个按钮名称为空,不会显示)</param>
  35. /// <param name="onCancel">第二个按钮回调</param>
  36. public static void OpenMessageView(string clone, MessagerType type, string messager, string defineName = "确定", UnityAction onDefine = null, string cancelName = "", UnityAction onCancel = null)
  37. {
  38. MessagerContorller contorller = FacadeComponent.Instance.CreateController<MessagerContorller>(false);
  39. contorller.OpenView(clone);
  40. contorller.SetViewAndModel(type, messager, defineName, onDefine, cancelName, onCancel);
  41. }
  42. /// <summary>打开消息框</summary>
  43. /// <param name="showMode">显示在什么类型的Canvas上</param>
  44. /// <param name="type">面板类型</param>
  45. /// <param name="messager">消息</param>
  46. /// <param name="defineName">第一个按钮名称</param>
  47. /// <param name="onDefine">第一个按钮回调</param>
  48. /// <param name="cancelName">第二个按钮名称 (如果第二个按钮名称为空,不会显示)</param>
  49. /// <param name="onCancel">第二个按钮回调</param>
  50. public static void OpenMessageView(ViewShowModeType showMode, MessagerType type, string messager, string defineName = "确定", UnityAction onDefine = null, string cancelName = "", UnityAction onCancel = null)
  51. {
  52. MessagerContorller contorller = FacadeComponent.Instance.CreateController<MessagerContorller>(false);
  53. contorller.OpenView(showMode);
  54. contorller.SetViewAndModel(type, messager, defineName, onDefine, cancelName, onCancel);
  55. }
  56. /// <summary>打开消息框</summary>
  57. /// <param name="showMode">显示在什么类型的Canvas上</param>
  58. /// <param name="clone">克隆体</param>
  59. /// <param name="type">面板类型</param>
  60. /// <param name="messager">消息</param>
  61. /// <param name="defineName">第一个按钮名称</param>
  62. /// <param name="onDefine">第一个按钮回调</param>
  63. /// <param name="cancelName">第二个按钮名称 (如果第二个按钮名称为空,不会显示)</param>
  64. /// <param name="onCancel">第二个按钮回调</param>
  65. public static void OpenMessageView(ViewShowModeType showMode, string clone, MessagerType type, string messager, string defineName = "确定", UnityAction onDefine = null, string cancelName = "", UnityAction onCancel = null)
  66. {
  67. MessagerContorller contorller = FacadeComponent.Instance.CreateController<MessagerContorller>(false);
  68. contorller.OpenView(showMode, clone);
  69. contorller.SetViewAndModel(type, messager, defineName, onDefine, cancelName, onCancel);
  70. }
  71. ///<summary>第一个按钮回调</summary>
  72. private UnityAction OnDefineCallback;
  73. ///<summary>第二个按钮回调</summary>
  74. private UnityAction OnCancelCallback;
  75. ///<summary>绑定View&Model</summary>
  76. protected override void BindingViewModel()
  77. {
  78. _Model.Bind(_View.M_Error_Text, _Model.Message);
  79. _Model.Bind(_View.M_Default_Text, _Model.Message);
  80. _Model.Bind(_View.Define_But, OnDefine);
  81. _Model.Bind(_View.Cancel_But, OnCancel);
  82. _Model.Bind(_View.B_Define_Text, _Model.ButDefineText);
  83. _Model.Bind(_View.B_Cancel_Text, _Model.ButCancelText);
  84. }
  85. ///<summary>第一个按钮回调绑定</summary>
  86. private void OnDefine()
  87. {
  88. OnDefineCallback?.Invoke();
  89. CloseView();
  90. }
  91. ///<summary>第二个按钮回调绑定</summary>
  92. private void OnCancel()
  93. {
  94. OnCancelCallback?.Invoke();
  95. CloseView();
  96. }
  97. /// <summary>设置消息框</summary>
  98. /// <param name="type">面板类型</param>
  99. /// <param name="messager">消息</param>
  100. /// <param name="defineName">第一个按钮名称</param>
  101. /// <param name="onDefine">第一个按钮回调</param>
  102. /// <param name="cancelName">第二个按钮名称 (如果第二个按钮名称为空,不会显示)</param>
  103. /// <param name="onCancel">第二个按钮回调</param>
  104. public void SetViewAndModel(MessagerType type, string messager, string defineName, UnityAction onDefine, string cancelName, UnityAction onCancel)
  105. {
  106. //是否是默认面板
  107. bool panelactive = type == MessagerType.Default ? true : false;
  108. //是否是单个Button
  109. bool butactive = string.IsNullOrEmpty(cancelName);
  110. _Model.Message.Value = messager;
  111. _Model.ButDefineText.Value = defineName;
  112. OnDefineCallback = onDefine;
  113. if (!butactive)
  114. {
  115. OnCancelCallback = onCancel;
  116. _Model.ButCancelText.Value = cancelName;
  117. }
  118. _View.MessageDefault.SetActive(panelactive);
  119. _View.MessageError.SetActive(!panelactive);
  120. _View.Cancel_But.gameObject.SetActive(!butactive);
  121. if (butactive)
  122. _View.Define_But.transform.localPosition = new Vector3(0, -180, 0);
  123. else
  124. _View.Define_But.transform.localPosition = new Vector3(-220, -180, 0);
  125. }
  126. public override void Dispose()
  127. {
  128. base.Dispose();
  129. OnDefineCallback = null;
  130. OnCancelCallback = null;
  131. }
  132. }
  133. ///<summary>消息框View</summary>
  134. public class MessagerView : View
  135. {
  136. ///<summary>错误面板</summary>
  137. public GameObject MessageError;
  138. ///<summary>错误面板文本</summary>
  139. public Text M_Error_Text;
  140. ///<summary>普通面板</summary>
  141. public GameObject MessageDefault;
  142. ///<summary>普通面板文本</summary>
  143. public Text M_Default_Text;
  144. ///<summary>确认按钮</summary>
  145. public Button Define_But;
  146. ///<summary>确认按钮文本</summary>
  147. public Text B_Define_Text;
  148. ///<summary>取消按钮</summary>
  149. public Button Cancel_But;
  150. ///<summary>取消按钮文本</summary>
  151. public Text B_Cancel_Text;
  152. public override void LoadInit()
  153. {
  154. Group = ViewGroup.HUD;
  155. ReferenceCollector rc = UIGameObject.GetComponent<ReferenceCollector>();
  156. MessageError = rc.Get<GameObject>("MessageError");
  157. M_Error_Text = rc.GetComponent<Text>("M_Error_Text");
  158. MessageDefault = rc.Get<GameObject>("MessageDefault");
  159. M_Default_Text = rc.GetComponent<Text>("M_Default_Text");
  160. Define_But = rc.GetComponent<Button>("Define_But");
  161. B_Define_Text = rc.GetComponent<Text>("B_Define_Text");
  162. Cancel_But = rc.GetComponent<Button>("Cancel_But");
  163. B_Cancel_Text = rc.GetComponent<Text>("B_Cancel_Text");
  164. }
  165. }
  166. ///<summary>消息框Model</summary>
  167. public class MessagerModel : Model
  168. {
  169. ///<summary>消息</summary>
  170. public BindableProperty<string> Message;
  171. ///<summary>Define按钮名称</summary>
  172. public BindableProperty<string> ButDefineText;
  173. ///<summary>Cancel按钮名称</summary>
  174. public BindableProperty<string> ButCancelText;
  175. public override void InitProperty()
  176. {
  177. Message = CreateProperty<string>();
  178. ButDefineText = CreateProperty<string>();
  179. ButCancelText = CreateProperty<string>();
  180. }
  181. }
  182. }