MessageWindowManager.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using System.Reflection;
  2. using UnityEngine;
  3. namespace COM3D2.MeidoPhotoStudio.Plugin
  4. {
  5. internal class MessageWindowManager : IManager
  6. {
  7. public const string header = "TEXTBOX";
  8. public static readonly SliderProp fontBounds = new SliderProp(25f, 60f);
  9. private static GameObject sysRoot;
  10. private MessageClass msgClass;
  11. private MessageWindowMgr msgWnd;
  12. private UILabel msgLabel;
  13. private UILabel nameLabel;
  14. private GameObject msgGameObject;
  15. public bool ShowingMessage { get; private set; }
  16. private string messageName;
  17. private string messageText;
  18. public MessageWindowManager()
  19. {
  20. sysRoot = GameObject.Find("__GameMain__/SystemUI Root");
  21. this.msgWnd = GameMain.Instance.MsgWnd;
  22. this.msgGameObject = sysRoot.transform.Find("MessageWindowPanel").gameObject;
  23. this.msgClass = new MessageClass(this.msgGameObject, this.msgWnd);
  24. this.nameLabel = UTY.GetChildObject(this.msgGameObject, "MessageViewer/MsgParent/SpeakerName/Name", false)
  25. .GetComponent<UILabel>();
  26. this.msgLabel = UTY.GetChildObject(this.msgGameObject, "MessageViewer/MsgParent/Message", false)
  27. .GetComponent<UILabel>();
  28. Utility.SetFieldValue<MessageClass, UILabel>(this.msgClass, "message_label_", this.msgLabel);
  29. Utility.SetFieldValue<MessageClass, UILabel>(this.msgClass, "name_label_", this.nameLabel);
  30. }
  31. public void Activate()
  32. {
  33. SetPhotoMessageWindowActive(true);
  34. }
  35. public void Deactivate()
  36. {
  37. this.msgWnd.CloseMessageWindowPanel();
  38. SetPhotoMessageWindowActive(false);
  39. }
  40. public void Serialize(System.IO.BinaryWriter binaryWriter)
  41. {
  42. binaryWriter.Write(header);
  43. binaryWriter.Write(ShowingMessage);
  44. binaryWriter.Write(this.msgLabel.fontSize);
  45. binaryWriter.WriteNullableString(messageName);
  46. binaryWriter.WriteNullableString(messageText);
  47. }
  48. public void Deserialize(System.IO.BinaryReader binaryReader)
  49. {
  50. CloseMessagePanel();
  51. bool showingMessage = binaryReader.ReadBoolean();
  52. this.msgLabel.fontSize = binaryReader.ReadInt32();
  53. messageName = binaryReader.ReadNullableString();
  54. messageText = binaryReader.ReadNullableString();
  55. if (showingMessage) ShowMessage(messageName, messageText);
  56. }
  57. public void Update() { }
  58. private void SetPhotoMessageWindowActive(bool active)
  59. {
  60. UTY.GetChildObject(this.msgGameObject, "MessageViewer/MsgParent/MessageBox", false)
  61. .SetActive(active);
  62. UTY.GetChildObject(this.msgGameObject, "MessageViewer/MsgParent/Hitret", false)
  63. .GetComponent<UISprite>().enabled = !active;
  64. this.nameLabel.gameObject.SetActive(active);
  65. this.msgLabel.gameObject.SetActive(active);
  66. Transform transform = sysRoot.transform.Find("MessageWindowPanel/MessageViewer/MsgParent/Buttons");
  67. MessageWindowMgr.MessageWindowUnderButton[] msgButtons = new[]
  68. {
  69. MessageWindowMgr.MessageWindowUnderButton.Skip,
  70. MessageWindowMgr.MessageWindowUnderButton.Auto,
  71. MessageWindowMgr.MessageWindowUnderButton.Voice,
  72. MessageWindowMgr.MessageWindowUnderButton.BackLog,
  73. MessageWindowMgr.MessageWindowUnderButton.Config
  74. };
  75. foreach (var msgButton in msgButtons)
  76. {
  77. transform.Find(msgButton.ToString()).gameObject.SetActive(!active);
  78. }
  79. if (this.msgClass.subtitles_manager_ != null)
  80. {
  81. this.msgClass.subtitles_manager_.visible = false;
  82. this.msgClass.subtitles_manager_ = null;
  83. }
  84. }
  85. public void ShowMessage(string name, string message)
  86. {
  87. messageName = name;
  88. messageText = message;
  89. ShowingMessage = true;
  90. this.msgWnd.OpenMessageWindowPanel();
  91. this.msgLabel.ProcessText();
  92. this.msgClass.SetText(name, message, "", 0, AudioSourceMgr.Type.System);
  93. this.msgClass.FinishChAnime();
  94. }
  95. public void SetFontSize(int fontSize)
  96. {
  97. this.msgLabel.fontSize = fontSize;
  98. }
  99. public void CloseMessagePanel()
  100. {
  101. ShowingMessage = false;
  102. this.msgWnd.CloseMessageWindowPanel();
  103. }
  104. }
  105. }