private void CreateUpgradeWidgets(UpgradePrefab prefab, GameObject container) { foreach (PartUpgrade pu in prefab.upgrades) { // Don't create widgets for untracked upgrades if (pu.isUntracked) { continue; } // Create new widget PartListTooltipWidget newWidget = Instantiate(tooltip.extInfoModuleWidgetPrefab); newWidget.gameObject.name = "Upgrade tooltip widget"; // Add widget to list newWidget.transform.SetParent(container.transform, false); // Add "toggle" component if ((pu.upgradeState == PartUpgrade.UpgradeState.Enabled || pu.upgradeState == PartUpgrade.UpgradeState.Disabled)) { Toggle toggle = newWidget.gameObject.AddComponent <Toggle>(); toggle.isOn = (pu.upgradeState == PartUpgrade.UpgradeState.Enabled) ? true : false; toggle.enabled = true; toggle.onValueChanged.AddListener(onUpgradeToggle); } // Add the upgrade handler UpgradeWidgetComponent handler = newWidget.gameObject.AddComponent <UpgradeWidgetComponent>(); handler.partName = prefab.part.partInfo.name; handler.upgrade = pu.upgradeName; handler.upgradeState = pu.upgradeState; handler.isUpdated = false; // Create text newWidget.Setup(pu.GetTitle(), pu.GetInfo(prefab)); ToggleColors(handler, newWidget.GetComponent <Image>()); // Everything is good newWidget.gameObject.SetActive(true); } }
private void onUpgradeToggle(bool isOn) { UpgradeWidgetComponent upgradeComponent = EventSystem.current.currentSelectedGameObject.GetComponent <UpgradeWidgetComponent>(); if (isOn) { upgradeComponent.upgradeState = PartUpgrade.UpgradeState.Enabled; } else { upgradeComponent.upgradeState = PartUpgrade.UpgradeState.Disabled; } upgradeComponent.isUpdated = true; updateTooltip = true; }
// Update the state of every upgrades in the prefab in responseto player toggling // Update the enabled state of relevant Upgrades in the UpgradeHandler public void UpdateUpgradesState(UpgradeWidgetComponent toggledUpdate) { PartUpgrade pu = upgrades.Find(p => p.upgradeName == toggledUpdate.upgrade); pu.upgradeState = toggledUpdate.upgradeState; // We reenable overriden upgrades that may have been disabled : if (toggledUpdate.upgradeState == PartUpgrade.UpgradeState.Enabled) { pu.UpdateOverridenUpgrades(this); } // In case the player has disabled an upgrade, we need to enable the last overriden upgrade, if any else if (toggledUpdate.upgradeState == PartUpgrade.UpgradeState.Disabled) { pu.EnableLastOverridenUpgrade(this); } }
private void ToggleColors(UpgradeWidgetComponent handler, Image imageComponent) { switch (handler.upgradeState) { case PartUpgrade.UpgradeState.Unresearched: imageComponent.color = Color255(89, 139, 122); // blue break; case PartUpgrade.UpgradeState.Disabled: imageComponent.color = Color255(222, 193, 88); // yellow break; case PartUpgrade.UpgradeState.Overriden: imageComponent.color = Color255(177, 115, 87); // orange break; case PartUpgrade.UpgradeState.Enabled: imageComponent.color = Color255(149, 223, 102); // green break; } }
public void Update() { // Do nothing if there is no PartListTooltip on screen if (PartListTooltipMasterController.Instance.currentTooltip == null) { return; } // Do nothing if the tooltip hasn't changed since last update and we have nothing to update in the tooltip if (tooltip == PartListTooltipMasterController.Instance.currentTooltip && !updateTooltip && !toggleWidgets) { return; } // Get the upgrade prefab for this tooltip : UpgradePrefab upgradePrefab = GetTooltipInstance(); // ReferenceEquals is a workaround because unity does a silly overload of the == operator if (ReferenceEquals(upgradePrefab, null)) { return; } // Toggle widget visibility in response to user click on toggle widget, and do nothing else if (toggleWidgets) { toggleWidgets = false; ToggleWidgetsVisibility(upgradePrefab); return; } // Update everything needed in response to the player enabling/disabling an upgrade if (updateTooltip) { updateTooltip = false; // Update the upgrade prefab in response to player toggle UpgradeWidgetComponent[] upgrades = tooltip.panelExtended.gameObject.GetComponentsInChildren <UpgradeWidgetComponent>(); UpgradeWidgetComponent toggledWidget = upgrades.First(p => p.isUpdated); upgradePrefab.UpdateUpgradesState(toggledWidget); // Destroy upgrade widgets for (int k = 0; k < upgrades.Count(); k++) { Destroy(upgrades[k].gameObject); } } // If this is a new tooltip, we destroy the toggle widget if it exists else if (toggleWidget != null) { Destroy(toggleWidget.gameObject); toggleWidget = null; } // Update the PartUpgradeHandler with enabled upgrades for this part and ApplyUpgrades() on all modules ApplyUpgrades(upgradePrefab); // Rebuilding the tooltip cost string : tooltip.textCost.text = GetPartCost(upgradePrefab.part); // Update the part basic info with the new text : tooltip.textInfoBasic.text = GetPartInfo(upgradePrefab.part); // Update the module widgets text : UpdateModuleWidgetInfo(upgradePrefab); // Create the widget list toggle widget : if (toggleWidget == null && upgradePrefab.upgrades.Count > 0) { toggleWidget = CreateListToggleWidget(tooltip.panelExtended.gameObject.GetChild("Content"), upgradePrefab); } if (toggleWidget != null) { // Instantiate and setup the upgrade widgets CreateUpgradeWidgets(upgradePrefab, tooltip.panelExtended.gameObject.GetChild("Content")); // Toggle widgets visibility ToggleWidgetsVisibility(upgradePrefab); } }