Пример #1
0
        private void CreateWindow()
        {
            // clone & modify main window
            if (!QuquBox.instance.ququBoxWindow)
            {
                throw new Exception("QuquBox.instance.ququBoxWindow is null");
            }
            this.window = UnityEngine.Object.Instantiate(
                QuquBox.instance.ququBoxWindow, QuquBox.instance.ququBoxWindow.transform.parent);
            this.window.SetActive(true);
            this.window.name = "MajordomoWindow";

            Common.RemoveComponent <QuquBox>(this.window);
            Common.RemoveChildren(this.window, new List <string> {
                "ChooseItemMask", "ItemsBack"
            });

            // modify panel container
            this.panelContainer = Common.GetChild(this.window, "QuquBoxHolder");
            if (!this.panelContainer)
            {
                throw new Exception("Failed to get child 'QuquBoxHolder' from QuquBox.instance.ququBoxWindow");
            }
            this.panelContainer.name = "MajordomoPanelContainer";

            // clone & modify menu
            this.menu = UnityEngine.Object.Instantiate(this.panelContainer, this.window.transform);
            this.menu.SetActive(true);
            this.menu.name = "MajordomoMenu";

            Common.RemoveChildren(this.menu);

            // modify panel container
            Common.RemoveComponent <GridLayoutGroup>(this.panelContainer);
            Common.RemoveComponent <Image>(this.panelContainer);
            Common.RemoveComponent <CanvasRenderer>(this.panelContainer);
            Common.RemoveChildren(this.panelContainer);

            // resize panel container & menu
            var   rectTransform       = this.panelContainer.GetComponent <RectTransform>();
            float width               = rectTransform.offsetMax.x - rectTransform.offsetMin.x;
            float panelContainerWidth = width * 0.9f;
            float menuWidth           = width - panelContainerWidth;

            rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x + menuWidth, rectTransform.offsetMin.y);

            rectTransform           = this.menu.GetComponent <RectTransform>();
            rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x - panelContainerWidth, rectTransform.offsetMax.y);

            // set menu layout
            var gridLayoutGroup = Common.RemoveComponent <GridLayoutGroup>(this.menu, recreate: true);

            gridLayoutGroup.padding        = new RectOffset(20, 20, 20, 20);
            gridLayoutGroup.cellSize       = new Vector2(110, 120);
            gridLayoutGroup.spacing        = new Vector2(20, 20);
            gridLayoutGroup.startAxis      = GridLayoutGroup.Axis.Vertical;
            gridLayoutGroup.childAlignment = TextAnchor.UpperCenter;

            // modify close button
            var goCloseButton = Common.GetChild(this.window, "CloseQuquBoxButton");

            if (!goCloseButton)
            {
                throw new Exception("Failed to get child 'CloseQuquBoxButton' from QuquBox.instance.ququBoxWindow");
            }
            goCloseButton.name = "MajordomoCloseButton";

            var closeButton = Common.RemoveComponent <Button>(goCloseButton, recreate: true);

            closeButton.onClick.AddListener(() => this.Close());

            var escWinComponent = Common.RemoveComponent <EscWinComponent>(goCloseButton, recreate: true);

            escWinComponent.escEvent = new EscWinComponent.EscCompEvent();
            escWinComponent.escEvent.AddListener(() => this.Close());

            // modify summary bar
            this.summaryBar = Common.GetChild(this.window, "AllQuquLevelBack");
            if (!this.summaryBar)
            {
                throw new Exception("Failed to get child 'AllQuquLevelBack' from QuquBox.instance.ququBoxWindow");
            }
            this.summaryBar.name = "MajordomoSummary";

            var horizontalLayoutGroup = this.summaryBar.AddComponent <HorizontalLayoutGroup>();

            horizontalLayoutGroup.padding = new RectOffset(20, 20, 0, 0);

            var summaryItem = Common.GetChild(this.summaryBar, "AllQuquLevelText");

            if (!summaryItem)
            {
                throw new Exception("Failed to get child 'AllQuquLevelText' from 'AllQuquLevelBack'");
            }
            summaryItem.name = "MajordomoSummaryItem";

            var textSummary = summaryItem.GetComponent <Text>();

            if (!textSummary)
            {
                throw new Exception("Failed to get Text component from 'AllQuquLevelText'");
            }
            textSummary.color = MajordomoWindow.TEXT_COLOR_DEFAULT;
            TaiwuCommon.SetFont(textSummary);

            Common.RemoveComponent <SetFont>(summaryItem);

            for (int i = 1; i < N_SUMMARY_ITEMS; ++i)
            {
                var currSummaryItem = UnityEngine.Object.Instantiate(summaryItem, this.summaryBar.transform);
                currSummaryItem.SetActive(true);
                currSummaryItem.name = "MajordomoSummaryItem";

                Common.RemoveComponent <SetFont>(currSummaryItem);
            }
        }
Пример #2
0
        private GameObject CreateMenuButton(string name, UnityEngine.Events.UnityAction callback, string iconPath, string label)
        {
            // clone & modify button
            if (!HomeSystem.instance.studyActor)
            {
                throw new Exception("HomeSystem.instance.studyActor is null");
            }
            var studySkillButton = Common.GetChild(HomeSystem.instance.studyActor, "StudySkill,0");

            if (!studySkillButton)
            {
                throw new Exception("Failed to get child 'StudySkill,0' from HomeSystem.instance.studyActor");
            }

            var goMenuButton = UnityEngine.Object.Instantiate(studySkillButton, this.menu.transform);

            goMenuButton.SetActive(true);
            goMenuButton.name = name;
            goMenuButton.tag  = "Untagged";

            var button = goMenuButton.AddComponent <Button>();

            button.onClick.AddListener(callback);
            goMenuButton.AddComponent <PointerClick>();

            // modify button background
            var buttonBack = Common.GetChild(goMenuButton, "StudyEffectBack");

            if (!buttonBack)
            {
                throw new Exception("Failed to get child 'StudyEffectBack' from 'StudySkill,0'");
            }
            buttonBack.name = "MajordomoMenuButtonBack";

            var image = buttonBack.GetComponent <Image>();

            image.color = MajordomoWindow.MENU_BTN_BG_COLOR_UNSELECTED;

            var rectTransform = buttonBack.GetComponent <RectTransform>();

            rectTransform.anchorMin = new Vector2(0, 0);
            rectTransform.anchorMax = new Vector2(1, 0);
            rectTransform.offsetMin = new Vector2(0, 0);
            rectTransform.offsetMax = new Vector2(0, 30);

            // modify button icon
            var buttonIcon = Common.GetChild(goMenuButton, "StudySkillIcon,0");

            if (!buttonIcon)
            {
                throw new Exception("Failed to get child 'StudySkillIcon,0' from 'StudySkill,0'");
            }
            buttonIcon.name = "MajordomoMenuButtonIcon";

            rectTransform           = buttonIcon.GetComponent <RectTransform>();
            rectTransform.anchorMin = new Vector2(0, 1);
            rectTransform.anchorMax = new Vector2(1, 1);
            rectTransform.offsetMin = new Vector2(25, -80);
            rectTransform.offsetMax = new Vector2(-25, -20);

            var buttonIconImage = buttonIcon.GetComponent <Image>();

            buttonIconImage.sprite = ResourceLoader.CreateSpriteFromImage(iconPath);
            if (!buttonIconImage.sprite)
            {
                throw new Exception($"Failed to create sprite: {iconPath}");
            }

            // modify button text
            var buttonText = Common.GetChild(goMenuButton, "StudyEffectText");

            if (!buttonText)
            {
                throw new Exception("Failed to get child 'StudyEffectText' from 'StudySkill,0'");
            }
            buttonText.name = "MajordomoMenuButtonText";

            rectTransform           = buttonText.GetComponent <RectTransform>();
            rectTransform.anchorMin = new Vector2(0, 0);
            rectTransform.anchorMax = new Vector2(1, 0);
            rectTransform.offsetMin = new Vector2(0, 0);
            rectTransform.offsetMax = new Vector2(0, 30);

            var text = buttonText.GetComponent <Text>();

            if (!text)
            {
                throw new Exception("Failed to get Text component from 'StudyEffectText'");
            }
            text.text  = label;
            text.color = MajordomoWindow.MENU_BTN_COLOR_UNSELECTED;
            TaiwuCommon.SetFont(text);

            Common.RemoveComponent <SetFont>(buttonText);

            return(goMenuButton);
        }
Пример #3
0
        private GameObject CreateButton(string name, string label, UnityEngine.Events.UnityAction callback, GameObject parent)
        {
            // clone & modify button
            // 此函数的触发条件就是 BuildingWindow.instance 存在
            var studySkillButton = Common.GetChild(BuildingWindow.instance.studyActor, "StudySkill,0");

            if (!studySkillButton)
            {
                throw new Exception("Failed to get child 'StudySkill,0' from HomeSystem.instance.studyActor");
            }

            var goButton = UnityEngine.Object.Instantiate(studySkillButton, parent.transform);

            goButton.SetActive(true);
            goButton.name = name;
            goButton.tag  = "Untagged";

            var button = goButton.AddComponent <Button>();

            button.onClick.AddListener(callback);
            goButton.AddComponent <PointerClick>();

            Common.RemoveChildren(goButton, new List <string> {
                "StudySkillIcon,0"
            });

            // modify button background
            var buttonBack = Common.GetChild(goButton, "StudyEffectBack");

            if (!buttonBack)
            {
                throw new Exception("Failed to get child 'StudyEffectBack' from 'StudySkill,0'");
            }
            buttonBack.name = "ButtonBack";

            var image = buttonBack.GetComponent <Image>();

            image.color = PanelCharts.BTN_BG_COLOR_UNSELECTED;

            var rectTransform = buttonBack.GetComponent <RectTransform>();

            rectTransform.anchorMin = new Vector2(0, 0);
            rectTransform.anchorMax = new Vector2(1, 1);
            rectTransform.offsetMin = new Vector2(0, 0);
            rectTransform.offsetMax = new Vector2(0, 0);

            // modify button text
            var buttonText = Common.GetChild(goButton, "StudyEffectText");

            if (!buttonText)
            {
                throw new Exception("Failed to get child 'StudyEffectText' from 'StudySkill,0'");
            }
            buttonText.name = "ButtonText";

            rectTransform           = buttonText.GetComponent <RectTransform>();
            rectTransform.anchorMin = new Vector2(0, 0);
            rectTransform.anchorMax = new Vector2(1, 1);
            rectTransform.offsetMin = new Vector2(0, 0);
            rectTransform.offsetMax = new Vector2(0, 0);

            var text = buttonText.GetComponent <Text>();

            if (!text)
            {
                throw new Exception("Failed to get Text component from 'StudyEffectText'");
            }
            text.text  = label;
            text.color = PanelCharts.BTN_COLOR_UNSELECTED;
            TaiwuCommon.SetFont(text);

            Common.RemoveComponent <SetFont>(buttonText);

            return(goButton);
        }
Пример #4
0
        private GameObject CreateMenuButton(string name, UnityEngine.Events.UnityAction callback, string iconPath, string label)
        {
            // clone & modify button
            Debug.Assert(HomeSystem.instance.studyActor);
            var studySkillButton = Common.GetChild(HomeSystem.instance.studyActor, "StudySkill,0");

            Debug.Assert(studySkillButton);

            var goMenuButton = UnityEngine.Object.Instantiate(studySkillButton, this.menu.transform);

            goMenuButton.SetActive(true);
            goMenuButton.name = name;
            goMenuButton.tag  = "Untagged";

            var button = goMenuButton.AddComponent <Button>();

            button.onClick.AddListener(callback);
            goMenuButton.AddComponent <PointerClick>();

            // modify button background
            var buttonBack = Common.GetChild(goMenuButton, "StudyEffectBack");

            Debug.Assert(buttonBack);
            buttonBack.name = "MajordomoMenuButtonBack";

            var rectTransform = buttonBack.GetComponent <RectTransform>();

            rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x - 10, rectTransform.offsetMin.y);
            rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x + 10, rectTransform.offsetMax.y);

            // modify button icon
            var buttonIcon = Common.GetChild(goMenuButton, "StudySkillIcon,0");

            Debug.Assert(buttonIcon);
            buttonIcon.name = "MajordomoMenuButtonIcon";

            var buttonIconImage = buttonIcon.GetComponent <Image>();

            buttonIconImage.sprite = ResourceLoader.CreateSpriteFromImage(iconPath);
            if (!buttonIconImage.sprite)
            {
                throw new Exception($"Failed to create sprite: {iconPath}");
            }

            // modify button text
            var buttonText = Common.GetChild(goMenuButton, "StudyEffectText");

            Debug.Assert(buttonText);
            buttonText.name = "MajordomoMenuButtonText";

            rectTransform           = buttonText.GetComponent <RectTransform>();
            rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x - 10, rectTransform.offsetMin.y);
            rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x + 10, rectTransform.offsetMax.y);

            var text = buttonText.GetComponent <Text>();

            Debug.Assert(text);
            text.text = label;
            TaiwuCommon.SetFont(text);

            Common.RemoveComponent <SetFont>(buttonText);

            return(goMenuButton);
        }
Пример #5
0
        private void CreateMessagePage()
        {
            this.CreateMessagePageMenuControls();

            // clone & modify message view
            Debug.Assert(ActorMenu.instance.actorMassage);
            var oriMessageView = Common.GetChild(ActorMenu.instance.actorMassage, "ActorMassageView");

            Debug.Assert(oriMessageView);

            var messageView = UnityEngine.Object.Instantiate(oriMessageView, this.mainHolder.transform);

            messageView.SetActive(true);
            messageView.name = "MajordomoMessageView";

            // modify message view port
            var viewPort = Common.GetChild(messageView, "ActorMassageViewport");

            Debug.Assert(viewPort);
            viewPort.name = "MajordomoMessageViewport";

            // get message content, create message content item
            this.messageContent = Common.GetChild(viewPort, "ActorMassageText");
            Debug.Assert(this.messageContent);
            this.messageContent.name = "MajordomoMessageContent";

            var messageContentItem = UnityEngine.Object.Instantiate(this.messageContent, this.messageContent.transform);

            messageContentItem.SetActive(true);
            messageContentItem.name = "MajordomoMessageContentItem0";

            // modify message content
            Common.RemoveComponent <Text>(this.messageContent);
            Common.RemoveComponent <SetFont>(this.messageContent);

            var verticalLayoutGroup = this.messageContent.AddComponent <VerticalLayoutGroup>();

            verticalLayoutGroup.childForceExpandWidth  = false;
            verticalLayoutGroup.childForceExpandHeight = false;

            // modify message content item
            var text = messageContentItem.GetComponent <Text>();

            TaiwuCommon.SetFont(text);
            text.text = string.Empty;

            Common.RemoveComponent <ContentSizeFitter>(messageContentItem);
            Common.RemoveComponent <SetFont>(messageContentItem);

            // modify message scroll bar
            var scrollbar = Common.GetChild(messageView, "ActorMassageScrollbar");

            Debug.Assert(scrollbar);
            scrollbar.name = "MajordomoMessageScrollbar";

            // clone & modify page text
            var oriPageText = Common.GetChild(ActorMenu.instance.actorMassage, "PageText");

            Debug.Assert(oriPageText);

            var pageText = UnityEngine.Object.Instantiate(oriPageText, this.mainHolder.transform);

            pageText.SetActive(true);
            pageText.name = "MajordomoPageText";
            Common.TranslateUI(pageText, 0, 20);

            this.textMessagePage = pageText.GetComponent <Text>();
            Debug.Assert(this.textMessagePage);
            TaiwuCommon.SetFont(this.textMessagePage);

            Common.RemoveComponent <SetFont>(pageText);

            // clone & modify page button prev
            var oriPageButtonPrev = Common.GetChild(ActorMenu.instance.actorMassage, "Page-Button");

            Debug.Assert(oriPageButtonPrev);

            var pageButtonPrev = UnityEngine.Object.Instantiate(oriPageButtonPrev, this.mainHolder.transform);

            pageButtonPrev.SetActive(true);
            pageButtonPrev.name = "MajordomoPageButtonPrev";
            Common.TranslateUI(pageButtonPrev, 0, 20);

            var btnPrev = Common.RemoveComponent <Button>(pageButtonPrev, recreate: true);

            btnPrev.onClick.AddListener(() => this.ChangeMessagePage(next: false));

            // clone & modify page button next
            var oriPageButtonNext = Common.GetChild(ActorMenu.instance.actorMassage, "Page+Button");

            Debug.Assert(oriPageButtonNext);

            var pageButtonNext = UnityEngine.Object.Instantiate(oriPageButtonNext, this.mainHolder.transform);

            pageButtonNext.SetActive(true);
            pageButtonNext.name = "MajordomoPageButtonNext";
            Common.TranslateUI(pageButtonNext, 0, 20);

            var btnNext = Common.RemoveComponent <Button>(pageButtonNext, recreate: true);

            btnNext.onClick.AddListener(() => this.ChangeMessagePage(next: true));
        }
Пример #6
0
        private void CreateMainWindow()
        {
            // clone & modify main window
            Debug.Assert(QuquBox.instance.ququBoxWindow);
            this.window = UnityEngine.Object.Instantiate(
                QuquBox.instance.ququBoxWindow, QuquBox.instance.ququBoxWindow.transform.parent);
            this.window.SetActive(true);
            this.window.name = "MajordomoWindow";

            Common.RemoveComponent <QuquBox>(this.window);
            Common.RemoveChildren(this.window, new List <string> {
                "ChooseItemMask", "ItemsBack"
            });

            // modify main holder
            this.mainHolder = Common.GetChild(this.window, "QuquBoxHolder");
            Debug.Assert(this.mainHolder);
            this.mainHolder.name = "MajordomoWindowMainHolder";

            Common.RemoveComponent <GridLayoutGroup>(this.mainHolder);
            Common.RemoveChildren(this.mainHolder);

            // clone & modify menu
            this.menu = UnityEngine.Object.Instantiate(this.mainHolder, this.window.transform);
            this.menu.SetActive(true);
            this.menu.name = "MajordomoWindowMenu";

            Common.RemoveChildren(this.menu);

            // resize main holder & menu
            var   rectTransform   = this.mainHolder.GetComponent <RectTransform>();
            float width           = rectTransform.offsetMax.x - rectTransform.offsetMin.x;
            float mainHolderWidth = width * 0.9f;
            float menuWidth       = width - mainHolderWidth;

            rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x + menuWidth, rectTransform.offsetMin.y);

            rectTransform           = this.menu.GetComponent <RectTransform>();
            rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x - mainHolderWidth, rectTransform.offsetMax.y);

            // set menu layout
            int menuItemWidth   = 70;
            int menuItemMargin  = 20;
            var gridLayoutGroup = Common.RemoveComponent <GridLayoutGroup>(this.menu, recreate: true);

            gridLayoutGroup.padding        = new RectOffset(menuItemMargin, menuItemMargin, menuItemMargin, menuItemMargin);
            gridLayoutGroup.cellSize       = new Vector2(menuItemWidth, menuItemWidth);
            gridLayoutGroup.spacing        = new Vector2(menuItemMargin, menuItemMargin);
            gridLayoutGroup.startAxis      = GridLayoutGroup.Axis.Vertical;
            gridLayoutGroup.childAlignment = TextAnchor.UpperCenter;

            // modify close button
            var goCloseButton = Common.GetChild(this.window, "CloseQuquBoxButton");

            Debug.Assert(goCloseButton);
            goCloseButton.name = "MajordomoWindowCloseButton";

            var closeButton = Common.RemoveComponent <Button>(goCloseButton, recreate: true);

            closeButton.onClick.AddListener(() => this.Close());

            var escWinComponent = Common.RemoveComponent <EscWinComponent>(goCloseButton, recreate: true);

            escWinComponent.escEvent = new EscWinComponent.EscCompEvent();
            escWinComponent.escEvent.AddListener(() => this.Close());

            // modify summary bar
            var goSummaryBack = Common.GetChild(this.window, "AllQuquLevelBack");

            Debug.Assert(goSummaryBack);
            goSummaryBack.name = "MajordomoWindowSummaryBack";

            var goSummary = Common.GetChild(goSummaryBack, "AllQuquLevelText");

            Debug.Assert(goSummary);
            goSummary.name = "MajordomoWindowSummary";

            this.textSummary = goSummary.GetComponent <Text>();
            Debug.Assert(this.textSummary);
            TaiwuCommon.SetFont(this.textSummary);

            Common.RemoveComponent <SetFont>(goSummary);
        }
Пример #7
0
        private void CreatePanel()
        {
            // 此函数的触发条件就是 BuildingWindow.Start, 所以 BuildingWindow 的实例一定存在
            var ququBox = BuildingWindow.instance.GetComponentInChildren <QuquBox>();

            // clone & modify panel
            var oriPanel = Common.GetChild(ququBox.ququBoxWindow, "QuquBoxHolder");

            this.panel = UnityEngine.Object.Instantiate(oriPanel, this.parent.transform);
            this.panel.SetActive(true);
            this.panel.name = "MajordomoPanelLogs";

            var rectTransform = this.panel.GetComponent <RectTransform>();

            rectTransform.anchorMin = new Vector2(0, 0);
            rectTransform.anchorMax = new Vector2(1, 1);
            rectTransform.offsetMin = new Vector2(0, 0);
            rectTransform.offsetMax = new Vector2(0, 0);

            Common.RemoveComponent <GridLayoutGroup>(this.panel);
            Common.RemoveChildren(this.panel);

            // clone & modify message view
            var goActorMenu = Resources.Load <GameObject>("OldScenePrefabs/ActorMenu");
            var actorMenu   = goActorMenu.GetComponentInChildren <ActorMenu>();

            var oriMessageView = Common.GetChild(actorMenu.actorMassage, "ActorMassageView");

            if (!oriMessageView)
            {
                throw new Exception("Failed to get child 'ActorMassageView' from ActorMenu.actorMassage");
            }

            var messageView = UnityEngine.Object.Instantiate(oriMessageView, this.panel.transform);

            messageView.SetActive(true);
            messageView.name = "MajordomoMessageView";

            // modify message view port
            var viewPort = Common.GetChild(messageView, "ActorMassageViewport");

            if (!viewPort)
            {
                throw new Exception("Failed to get child 'ActorMassageViewport' from 'ActorMassageView'");
            }
            viewPort.name = "MajordomoMessageViewport";

            // get message content, create message content item
            this.messageContent = Common.GetChild(viewPort, "ActorMassageText");
            if (!this.messageContent)
            {
                throw new Exception("Failed to get child 'ActorMassageText' from 'ActorMassageViewport'");
            }
            this.messageContent.name = "MajordomoMessageContent";

            var messageContentItem = UnityEngine.Object.Instantiate(this.messageContent, this.messageContent.transform);

            messageContentItem.SetActive(true);
            messageContentItem.name = "MajordomoMessageContentItem";

            // modify message content
            Common.RemoveComponent <Text>(this.messageContent);
            Common.RemoveComponent <SetFont>(this.messageContent);

            var verticalLayoutGroup = this.messageContent.AddComponent <VerticalLayoutGroup>();

            verticalLayoutGroup.childForceExpandWidth  = false;
            verticalLayoutGroup.childForceExpandHeight = false;

            // modify message content item
            var text = messageContentItem.GetComponent <Text>();

            TaiwuCommon.SetFont(text);
            text.text = string.Empty;

            Common.RemoveComponent <ContentSizeFitter>(messageContentItem);
            Common.RemoveComponent <SetFont>(messageContentItem);

            // modify message scroll bar
            var scrollbar = Common.GetChild(messageView, "ActorMassageScrollbar");

            if (!scrollbar)
            {
                throw new Exception("Failed to get child 'ActorMassageScrollbar' from 'ActorMassageView'");
            }
            scrollbar.name = "MajordomoMessageScrollbar";

            // clone & modify page text
            var oriPageText = Common.GetChild(actorMenu.actorMassage, "PageText");

            if (!oriPageText)
            {
                throw new Exception("Failed to get child 'PageText' from ActorMenu.actorMassage");
            }

            var pageText = UnityEngine.Object.Instantiate(oriPageText, this.panel.transform);

            pageText.SetActive(true);
            pageText.name = "MajordomoPageText";
            Common.TranslateUI(pageText, 0, 20);

            this.textMessagePage = pageText.GetComponent <Text>();
            if (!this.textMessagePage)
            {
                throw new Exception("Failed to get Text component from 'PageText'");
            }
            TaiwuCommon.SetFont(this.textMessagePage);

            Common.RemoveComponent <SetFont>(pageText);

            // clone & modify page button prev
            var oriPageButtonPrev = Common.GetChild(actorMenu.actorMassage, "Page-Button");

            if (!oriPageButtonPrev)
            {
                throw new Exception("Failed to get child 'Page-Button' from ActorMenu.actorMassage");
            }

            var pageButtonPrev = UnityEngine.Object.Instantiate(oriPageButtonPrev, this.panel.transform);

            pageButtonPrev.SetActive(true);
            pageButtonPrev.name = "MajordomoPageButtonPrev";
            Common.TranslateUI(pageButtonPrev, 0, 20);

            var btnPrev = Common.RemoveComponent <Button>(pageButtonPrev, recreate: true);

            btnPrev.onClick.AddListener(() => this.ChangeMessagePage(next: false));

            // clone & modify page button next
            var oriPageButtonNext = Common.GetChild(actorMenu.actorMassage, "Page+Button");

            if (!oriPageButtonNext)
            {
                throw new Exception("Failed to get child 'Page+Button' from ActorMenu.actorMassage");
            }

            var pageButtonNext = UnityEngine.Object.Instantiate(oriPageButtonNext, this.panel.transform);

            pageButtonNext.SetActive(true);
            pageButtonNext.name = "MajordomoPageButtonNext";
            Common.TranslateUI(pageButtonNext, 0, 20);

            var btnNext = Common.RemoveComponent <Button>(pageButtonNext, recreate: true);

            btnNext.onClick.AddListener(() => this.ChangeMessagePage(next: true));
        }