Пример #1
0
        private UpgradePrefab GetTooltipInstance()
        {
            // Get the PartListTooltip
            tooltip = PartListTooltipMasterController.Instance.currentTooltip;

            // Find the currently shown part in the list of updated parts instances
            var           field         = typeof(PartListTooltip).GetField("partInfo", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
            AvailablePart partInfo      = (AvailablePart)field.GetValue(tooltip);
            UpgradePrefab upgradePrefab = upgradePrefabs.Find(p => p.part.partInfo == partInfo);

            if (ReferenceEquals(upgradePrefab, null)) // Workaround because unity does a silly overload of the == operator
            {
                Debug.LogWarning("[UpgradesUIextensions] Part upgrade stats for \"" + partInfo.title + "\" not found, using default stats.");
            }
            return(upgradePrefab);
        }
Пример #2
0
        private void UpdateInfoToolTip(bool getHoveredpart = true)
        {
            // Get the part if requested
            if (getHoveredpart)
            {
                selectedPart = hoveredPart;
            }
            if (selectedPart == null)
            {
                ShowInfoToolTip(false);
                return;
            }

            // Create the UI
            if (!objectsCreated)
            {
                //UIPartActionWindow customPAW = Instantiate(UIPartActionController.Instance.windowPrefab);
                //customPAW.transform.SetParent(UIMasterController.Instance.actionCanvas.transform, false);
                //customPAW.gameObject.SetActive(true);
                //customPAW.gameObject.name = "FloatingPartTooltip";
                //customPAW.Setup(selectedPart, UIPartActionWindow.DisplayType.Selected, UI_Scene.Editor);
                //customPAW.gameObject.GetChild("VerticalLayout").DestroyGameObject();

                //infoToolTipInstance = Instantiate(FindObjectOfType<PartListTooltipController>().tooltipPrefab, customPAW.gameObject.transform);
                //infoToolTip = infoToolTipInstance.gameObject;
                //infoToolTip.transform.SetSiblingIndex(2);

                // Create tooltip object
                infoToolTipInstance = Instantiate(FindObjectOfType <PartListTooltipController>().tooltipPrefab, DialogCanvasUtil.DialogCanvasRect);
                infoToolTip         = infoToolTipInstance.gameObject;

                // Get various UI GameObjects
                descriptionText      = infoToolTip.GetChild("DescriptionText");
                descriptionTopObject = infoToolTip.GetChild("Scroll View");
                descriptionContent   = descriptionText.transform.parent.gameObject;
                manufacturerPanel    = infoToolTip.GetChild("ManufacturerPanel");
                primaryInfoTopObject = infoToolTip.GetChild("ThumbAndPrimaryInfo").GetChild("Scroll View");
                footerTopObject      = infoToolTip.GetChild("Footer");
                extWidgetsContent    = infoToolTipInstance.panelExtended.GetChild("Content");

                // Make it draggable
                DragPanelOffsettable dragpanel = infoToolTip.AddComponent <DragPanelOffsettable>();
                dragpanel.edgeOffset = 20;

                // Remove part thumbnail
                infoToolTip.GetChild("ThumbContainer").DestroyGameObject();
                // Remove RMBHint
                infoToolTip.GetChild("RMBHint").DestroyGameObject();
                // Remove module widget list variant spacer
                infoToolTipInstance.extInfoListSpacerVariants.gameObject.DestroyGameObject();

                // Adjust size
                LayoutElement leftPanel = infoToolTip.GetChild("StandardInfo").GetComponent <LayoutElement>();
                leftPanel.preferredWidth = 240;
                leftPanel.minWidth       = 240;
                LayoutElement costPanel = infoToolTip.GetChild("CostPanel").GetComponent <LayoutElement>();
                costPanel.preferredWidth = 150;

                // Add switcher toggle
                infoButton = CreateButton(footerTopObject.transform, OnSwitcherToggle);
                infoButton.GetComponent <LayoutElement>().minWidth        = 106;
                infoButton.GetComponent <LayoutElement>().preferredHeight = 24;
                infoButton.GetComponentInChildren <TextMeshProUGUI>().SetText("Show part info");

                objectsCreated = true;
            }

            // Destroy module/ressource widgets
            PartListTooltipWidget[] extWidgets = extWidgetsContent.GetComponentsInChildren <PartListTooltipWidget>(true);
            for (int i = 0; i < extWidgets.Count(); i++)
            {
                extWidgets[i].gameObject.DestroyGameObject();
            }

            // Destroy switcher widgets
            PartListTooltipWidget[] switchWidgets = descriptionContent.GetComponentsInChildren <PartListTooltipWidget>(true);
            for (int i = 0; i < switchWidgets.Count(); i++)
            {
                switchWidgets[i].gameObject.DestroyGameObject();
            }

            // TODO: revert scrollbars to top

            bool hasSwitcher = false;

            // Create partmodule and switcher widgets
            foreach (PartModule pm in selectedPart.Modules)
            {
                if (!pm.enabled || !pm.isEnabled)
                {
                    continue;
                }

                AvailablePart.ModuleInfo pmInfo = GetModuleInfo(pm);

                if (pm is ModuleB9PartSwitch || pm is ModulePartVariants)
                {
                    SetupSwitcherWidget(pm, pmInfo, descriptionContent.transform, infoToolTipInstance.extInfoVariantsWidgePrefab);
                    hasSwitcher = true;
                    continue;
                }

                if (string.IsNullOrEmpty(pmInfo.info))
                {
                    continue;
                }

                PartListTooltipWidget widget = Instantiate(infoToolTipInstance.extInfoModuleWidgetPrefab);
                widget.Setup(pmInfo.moduleDisplayName, pmInfo.info);
                widget.transform.SetParent(infoToolTipInstance.extInfoListContainer, false);
            }

            // Move or hide module spacer
            if (infoToolTipInstance.extInfoListContainer.childCount > 2 && selectedPart.Resources.Count > 0)
            {
                infoToolTipInstance.extInfoListSpacer.gameObject.SetActive(true);
                infoToolTipInstance.extInfoListSpacer.SetSiblingIndex(infoToolTipInstance.extInfoListContainer.childCount - 1);
            }
            else
            {
                infoToolTipInstance.extInfoListSpacer.gameObject.SetActive(false);
            }

            // Add ressource widgets
            foreach (PartResource pr in selectedPart.Resources)
            {
                AvailablePart.ResourceInfo prInfo = GetResourceInfo(pr);

                if (string.IsNullOrEmpty(prInfo.info))
                {
                    continue;
                }
                //if (RemoveControlCharacters(pm.GetInfo()).Equals("")) continue;

                PartListTooltipWidget widget = Instantiate(infoToolTipInstance.extInfoRscWidgePrefab);
                widget.Setup(prInfo.displayName, prInfo.info);
                widget.transform.SetParent(infoToolTipInstance.extInfoListContainer, false);
            }

            // Setup info
            infoToolTipInstance.textName.text         = selectedPart.partInfo.title;
            infoToolTipInstance.textManufacturer.text = selectedPart.partInfo.manufacturer;
            infoToolTipInstance.textDescription.text  = selectedPart.partInfo.description;
            infoToolTipInstance.textInfoBasic.text    = GetPartInfo(selectedPart);
            infoToolTipInstance.textCost.text         =
                Localizer.Format("#autoLOC_456128", new string[]
            {
                "<sprite=\"CurrencySpriteAsset\" name=\"Funds\" tint=1>",
                (
                    selectedPart.partInfo.cost
                    + selectedPart.GetModuleCosts(0.0f, ModifierStagingSituation.CURRENT)     //TODO: this is wrong if ressource amount != maxamount
                ).ToString("N2")
            });

            infoToolTipInstance.panelExtended.SetActive(infoToolTipInstance.extInfoListContainer.GetComponentsInChildren <PartListTooltipWidget>(true).Count() > 0);

            // Reposition tooltip if new part selected
            if (getHoveredpart)
            {
                UIMasterController.RepositionTooltip((RectTransform)infoToolTip.transform, Vector2.one, 8f);
            }

            // Update switcher button visibility
            infoButton.SetActive(hasSwitcher);
            ShowSwitcherWidgets(hasSwitcher);
        }