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); } }
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); }
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); }
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); }
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)); }
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); }
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)); }