Browse Source

Delegate message window functions to a manager

habeebweeb 4 years ago
parent
commit
54bb111240

+ 9 - 33
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Windows/MessageWindow.cs

@@ -5,6 +5,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
 {
     public class MessageWindow : BaseWindow
     {
+        MessageWindowManager messageWindowManager;
         TextField nameTextField;
         Slider fontSizeSlider;
         TextArea messageTextArea;
@@ -12,8 +13,9 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private int fontSize = 25;
         private bool showingMessage = false;
 
-        public MessageWindow() : base()
+        public MessageWindow(MessageWindowManager messageWindowManager) : base()
         {
+            this.messageWindowManager = messageWindowManager;
             nameTextField = new TextField();
             Controls.Add(nameTextField);
 
@@ -25,17 +27,15 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             Controls.Add(messageTextArea);
 
             okButton = new Button("OK");
-            okButton.ControlEvent += SetMessage;
+            okButton.ControlEvent += ShowMessage;
             Controls.Add(okButton);
         }
 
-        public void SetVisibility()
+        public void ToggleVisibility()
         {
             if (showingMessage)
             {
-                GameObject messageGameObject = GameObject.Find("__GameMain__/SystemUI Root").transform.Find("MessageWindowPanel").gameObject;
-                MessageWindowMgr messageWindowMgr = GameMain.Instance.ScriptMgr.adv_kag.MessageWindowMgr;
-                messageWindowMgr.CloseMessageWindowPanel();
+                messageWindowManager.CloseMessagePanel();
                 showingMessage = false;
             }
             else
@@ -47,38 +47,14 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private void ChangeFontSize(object sender, EventArgs args)
         {
             fontSize = (int)fontSizeSlider.Value;
-
-            GameObject gameObject = GameObject.Find("__GameMain__/SystemUI Root").transform.Find("MessageWindowPanel").gameObject;
-            UILabel uiLabel = UTY.GetChildObject(gameObject, "MessageViewer/MsgParent/Message", false).GetComponent<UILabel>();
-            Utility.SetFieldValue<UILabel, int>(uiLabel, "mFontSize", fontSize);
+            messageWindowManager.SetFontSize(fontSize);
         }
 
-        private void SetMessage(object sender, EventArgs args)
+        private void ShowMessage(object sender, EventArgs args)
         {
             Visible = false;
             showingMessage = true;
-            GameObject messageGameObject = GameObject.Find("__GameMain__/SystemUI Root").transform.Find("MessageWindowPanel").gameObject;
-            MessageWindowMgr messageWindowMgr = GameMain.Instance.ScriptMgr.adv_kag.MessageWindowMgr;
-            messageWindowMgr.OpenMessageWindowPanel();
-
-            UILabel component = UTY.GetChildObject(messageGameObject, "MessageViewer/MsgParent/Message", false).GetComponent<UILabel>();
-            UILabel nameComponent = UTY.GetChildObject(messageGameObject, "MessageViewer/MsgParent/SpeakerName/Name", false).GetComponent<UILabel>();
-
-            MessageClass inst = new MessageClass(messageGameObject, messageWindowMgr);
-            // Fix for ENG version: reconfigure MessageClass to behave as in JP game
-            inst.subtitles_manager_.visible = false;
-            inst.subtitles_manager_ = null;
-            component.gameObject.SetActive(true);
-            nameComponent.gameObject.SetActive(true);
-            UTY.GetChildObject(messageGameObject, "MessageViewer/MsgParent/MessageBox", false).SetActive(true);
-            Utility.SetFieldValue<MessageClass, UILabel>(inst, "message_label_", component);
-            Utility.SetFieldValue<MessageClass, UILabel>(inst, "name_label_", nameComponent);
-
-            component.ProcessText();
-            Utility.SetFieldValue<UILabel, int>(component, "mFontSize", fontSize);
-
-            inst.SetText(nameTextField.Value, messageTextArea.Value, "", 0, AudioSourceMgr.Type.System);
-            inst.FinishChAnime();
+            messageWindowManager.ShowMessage(nameTextField.Value, messageTextArea.Value);
         }
 
         public override void Draw(params GUILayoutOption[] layoutOptions)

+ 82 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Managers/MessageWindowManager.cs

@@ -0,0 +1,82 @@
+using UnityEngine;
+
+namespace COM3D2.MeidoPhotoStudio.Plugin
+{
+    public class MessageWindowManager
+    {
+        private static GameObject sysRoot;
+        private MessageClass msgClass;
+        private MessageWindowMgr msgWnd;
+        private UILabel msgLabel;
+        private UILabel nameLabel;
+        private GameObject msgGameObject;
+        public bool ShowingMessage { get; private set; }
+        public MessageWindowManager()
+        {
+            sysRoot = GameObject.Find("__GameMain__/SystemUI Root");
+            this.msgWnd = GameMain.Instance.MsgWnd;
+            this.msgGameObject = sysRoot.transform.Find("MessageWindowPanel").gameObject;
+            this.msgClass = new MessageClass(this.msgGameObject, this.msgWnd);// new MessageClass(this.msgGameObject, this.msgWnd);
+            this.nameLabel = UTY.GetChildObject(this.msgGameObject, "MessageViewer/MsgParent/SpeakerName/Name", false).GetComponent<UILabel>();
+            this.msgLabel = UTY.GetChildObject(this.msgGameObject, "MessageViewer/MsgParent/Message", false).GetComponent<UILabel>();
+            Utility.SetFieldValue<MessageClass, UILabel>(this.msgClass, "message_label_", this.msgLabel);
+            Utility.SetFieldValue<MessageClass, UILabel>(this.msgClass, "name_label_", this.nameLabel);
+            SetPhotoMessageWindowActive(true);
+        }
+
+        public void Deactivate()
+        {
+            this.msgWnd.CloseMessageWindowPanel();
+            SetPhotoMessageWindowActive(false);
+        }
+
+        private void SetPhotoMessageWindowActive(bool active)
+        {
+            UTY.GetChildObject(this.msgGameObject, "MessageViewer/MsgParent/MessageBox", false)
+                .SetActive(active);
+            UTY.GetChildObject(this.msgGameObject, "MessageViewer/MsgParent/Hitret", false)
+                .GetComponent<UISprite>().enabled = !active;
+            this.nameLabel.gameObject.SetActive(active);
+            this.msgLabel.gameObject.SetActive(active);
+
+            Transform transform = sysRoot.transform.Find("MessageWindowPanel/MessageViewer/MsgParent/Buttons");
+            MessageWindowMgr.MessageWindowUnderButton[] msgButtons = new[]
+            {
+                MessageWindowMgr.MessageWindowUnderButton.Skip,
+                MessageWindowMgr.MessageWindowUnderButton.Auto,
+                MessageWindowMgr.MessageWindowUnderButton.Voice,
+                MessageWindowMgr.MessageWindowUnderButton.BackLog,
+                MessageWindowMgr.MessageWindowUnderButton.Config
+            };
+            foreach (var msgButton in msgButtons)
+            {
+                transform.Find(msgButton.ToString()).gameObject.SetActive(!active);
+            }
+            if (this.msgClass.subtitles_manager_ != null)
+            {
+                this.msgClass.subtitles_manager_.visible = false;
+                this.msgClass.subtitles_manager_ = null;
+            }
+        }
+
+        public void ShowMessage(string name, string message)
+        {
+            ShowingMessage = true;
+            this.msgWnd.OpenMessageWindowPanel();
+            this.msgLabel.ProcessText();
+            this.msgClass.SetText(name, message, "", 0, AudioSourceMgr.Type.System);
+            this.msgClass.FinishChAnime();
+        }
+
+        public void SetFontSize(int fontSize)
+        {
+            Utility.SetFieldValue<UILabel, int>(this.msgLabel, "mFontSize", fontSize);
+        }
+
+        public void CloseMessagePanel()
+        {
+            ShowingMessage = false;
+            this.msgWnd.CloseMessageWindowPanel();
+        }
+    }
+}

+ 2 - 2
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Managers/WindowManager.cs

@@ -24,7 +24,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private MeidoManager meidoManager;
         private bool initializeWindows = false;
         public bool Visible { get; set; }
-        public WindowManager(MeidoManager meidoManager, EnvironmentManager environmentManager)
+        public WindowManager(MeidoManager meidoManager, EnvironmentManager environmentManager, MessageWindowManager messageWindowManager)
         {
             TabsPane.TabChange += ChangeTab;
             this.meidoManager = meidoManager;
@@ -40,7 +40,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 [Window.Face] = new MaidFaceWindow(meidoManager),
                 [Window.BG] = new BackgroundWindow(environmentManager),
                 [Window.BG2] = new Background2Window(environmentManager),
-                [Window.Message] = new MessageWindow()
+                [Window.Message] = new MessageWindow(messageWindowManager)
             };
             Windows[Window.Message].Visible = false;
         }

+ 5 - 1
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/MeidoPhotoStudio.cs

@@ -14,6 +14,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private WindowManager windowManager;
         private MeidoManager meidoManager;
         private EnvironmentManager environmentManager;
+        private MessageWindowManager messageWindowManager;
         private Constants.Scene currentScene;
         private bool initialized = false;
         private bool isActive = false;
@@ -31,6 +32,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         {
             SceneManager.sceneLoaded += OnSceneLoaded;
         }
+
         private void Update()
         {
             if (currentScene == Constants.Scene.Daily)
@@ -86,6 +88,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             if (meidoManager.IsBusy) return;
             meidoManager.DeactivateMeidos();
             environmentManager.Deactivate();
+            messageWindowManager.Deactivate();
 
             isActive = false;
             initialized = false;
@@ -115,7 +118,8 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             initialized = true;
             meidoManager = new MeidoManager();
             environmentManager = new EnvironmentManager();
-            windowManager = new WindowManager(meidoManager, environmentManager);
+            messageWindowManager = new MessageWindowManager();
+            windowManager = new WindowManager(meidoManager, environmentManager, messageWindowManager);
 
             environmentManager.Initialize();