public static void UIProductEntry_UpdateProduct_Postfix(UIProductEntry __instance) { int statTimeLevel = __instance.productionStatWindow.statTimeLevel; if (statTimeLevel != 5) { __instance.productLabel.text += " / Theoretical max"; __instance.productLabel.resizeTextForBestFit = true; __instance.productLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(150, 24); __instance.productText.resizeTextForBestFit = true; __instance.consumeLabel.text += " / Theoretical max"; __instance.consumeLabel.resizeTextForBestFit = true; __instance.consumeLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(150, 24); __instance.consumeText.resizeTextForBestFit = true; string produce = "0"; string consume = "0"; if (counter.ContainsKey(__instance.itemId)) { var productMetrics = counter[__instance.itemId]; produce = FormatMetric(productMetrics.production); consume = FormatMetric(productMetrics.consumption); } __instance.productText.text = $"{__instance.productText.text.Trim()} / {produce}"; __instance.consumeText.text = $"{__instance.consumeText.text.Trim()} / {consume}"; } }
public static void UIProductEntry_UpdateProduct_Postfix(UIProductEntry __instance) { //default font size 34 //Debug.Log(__instance.consumeText.); int statTimeLevel = __instance.productionStatWindow.statTimeLevel; if (statTimeLevel != 5) { __instance.productLabel.text += "\n Theoretical max"; Debug.Log($"{__instance.productText.GetComponent<RectTransform>().rect}, {__instance.productText.GetComponent<RectTransform>().offsetMin} , {__instance.productText.GetComponent<RectTransform>().offsetMax}, {__instance.productText.GetComponent<RectTransform>().anchoredPosition}, {__instance.productText.GetComponent<RectTransform>().anchorMax}, {__instance.productText.GetComponent<RectTransform>().anchorMin}"); __instance.productLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(200, 24); __instance.productText.GetComponent <RectTransform>().offsetMin = new Vector2(-100, -6); //__instance.productText.GetComponent<RectTransform>().wi //__instance.consumeText.fontSize = 30; __instance.consumeLabel.text += " / Theoretical max"; //__instance.consumeLabel.GetComponent<RectTransform>().sizeDelta = new Vector2(200, 24); //__instance.consumeText.GetComponent<RectTransform>().sizeDelta = new Vector2(200, 56); if (counter.ContainsKey(__instance.itemId)) { var productMetrics = counter[__instance.itemId]; __instance.productText.text += $" / {formatMetric(productMetrics.production, statTimeLevel)}"; __instance.consumeText.text += $" / {formatMetric(productMetrics.consumption, statTimeLevel)}"; } else { __instance.productText.text += $" / 0"; __instance.consumeText.text += $" / 0"; } } }
static void Postfix(UIProductEntry __instance, Text ___consumeLabel, Text ___productText, Text ___consumeText, Text ___chargeCapacityText, Text ___energyConsumptionText) { DspFontPatcher.logDebug("Patching UIProductEntry"); ___consumeLabel.horizontalOverflow = HorizontalWrapMode.Overflow; ___productText.horizontalOverflow = HorizontalWrapMode.Overflow; ___consumeText.horizontalOverflow = HorizontalWrapMode.Overflow; if (___chargeCapacityText != null) { ___chargeCapacityText.horizontalOverflow = HorizontalWrapMode.Overflow; } if (___energyConsumptionText != null) { ___energyConsumptionText.horizontalOverflow = HorizontalWrapMode.Overflow; } }
public static void UIProductEntry_UpdateProduct_Postfix(UIProductEntry __instance) { if (__instance.productionStatWindow.statTimeLevel == 5) { return; } if (!enhancements.TryGetValue(__instance, out EnhancedUIProductEntryElements enhancement)) { enhancement = EnhanceUIProductEntry(__instance); } string originalProductText = __instance.productText.text.Trim(); string originalConsumeText = __instance.consumeText.text.Trim(); string producers = "0"; string consumers = "0"; string maxProduction = "0"; string maxConsumption = "0"; string unit = "/min"; int divider = 1; //add values per second if (displaySec) { divider = 60; unit = "/sec"; originalProductText = $"{FormatMetric(ReverseFormat(originalProductText) / divider)}"; originalConsumeText = $"{FormatMetric(ReverseFormat(originalConsumeText) / divider)}"; } __instance.productUnitLabel.text = __instance.consumeUnitLabel.text = enhancement.maxProductionUnit.text = enhancement.maxConsumptionUnit.text = unit; if (counter.ContainsKey(__instance.itemId)) { var productMetrics = counter[__instance.itemId]; maxProduction = FormatMetric(productMetrics.production / divider); maxConsumption = FormatMetric(productMetrics.consumption / divider); producers = productMetrics.producers.ToString(); consumers = productMetrics.consumers.ToString(); } __instance.productText.text = $"{originalProductText}"; __instance.consumeText.text = $"{originalConsumeText}"; enhancement.maxProductionValue.text = maxProduction; enhancement.maxConsumptionValue.text = maxConsumption; enhancement.counterProductionValue.text = producers; enhancement.counterConsumptionValue.text = consumers; enhancement.maxProductionValue.color = enhancement.counterProductionValue.color = __instance.productText.color; enhancement.maxConsumptionValue.color = enhancement.counterConsumptionValue.color = __instance.consumeText.color; }
private static EnhancedUIProductEntryElements EnhanceUIProductEntry(UIProductEntry __instance) { __instance.itemIcon.transform.parent.GetComponent <RectTransform>().sizeDelta = new Vector2(80, 80); __instance.itemIcon.transform.parent.GetComponent <RectTransform>().anchoredPosition = new Vector2(22, 12); __instance.favoriteBtn1.GetComponent <RectTransform>().anchoredPosition = new Vector2(26, -32); __instance.favoriteBtn2.GetComponent <RectTransform>().anchoredPosition = new Vector2(49, -32); __instance.favoriteBtn3.GetComponent <RectTransform>().anchoredPosition = new Vector2(72, -32); __instance.itemName.transform.SetParent(__instance.itemIcon.transform.parent, false); var itemNameRect = __instance.itemName.GetComponent <RectTransform>(); itemNameRect.pivot = new Vector2(0.5f, 0f); itemNameRect.anchorMin = new Vector2(0, 0); itemNameRect.anchorMax = new Vector2(1f, 0); itemNameRect.anchoredPosition = new Vector2(0, 0); __instance.itemIcon.transform.parent.GetComponent <RectTransform>().sizeDelta = new Vector2(80, 80); __instance.itemName.resizeTextForBestFit = true; __instance.itemName.resizeTextMaxSize = 14; __instance.itemName.alignment = TextAnchor.MiddleCenter; __instance.itemName.alignByGeometry = true; __instance.itemName.horizontalOverflow = HorizontalWrapMode.Wrap; __instance.itemName.lineSpacing = 0.6f; var sepLine = __instance.consumeUnitLabel.transform.parent.Find("sep-line"); sepLine.GetComponent <RectTransform>().pivot = new Vector2(0f, 1f); sepLine.GetComponent <RectTransform>().rotation = Quaternion.Euler(0f, 0f, 90f); sepLine.GetComponent <RectTransform>().sizeDelta = new Vector2(1, 336); sepLine.GetComponent <RectTransform>().anchoredPosition = new Vector2(0, -50); __instance.productLabel.alignment = TextAnchor.UpperRight; __instance.productLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(labelsWidth, 24); __instance.productLabel.GetComponent <RectTransform>().anchoredPosition = new Vector2(initialXOffset, 0); __instance.productLabel.GetComponent <RectTransform>().ForceUpdateRectTransforms(); __instance.productText.alignByGeometry = true; __instance.productText.resizeTextForBestFit = true; __instance.productText.resizeTextMaxSize = 34; __instance.productText.alignment = TextAnchor.LowerRight; __instance.productText.GetComponent <RectTransform>().sizeDelta = new Vector2(valuesWidth, 40); __instance.productText.GetComponent <RectTransform>().anchoredPosition = new Vector2(initialXOffset, 56); __instance.productUnitLabel.alignByGeometry = true; __instance.productUnitLabel.alignment = TextAnchor.LowerLeft; __instance.productUnitLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(unitsWidth, 24); __instance.productUnitLabel.GetComponent <RectTransform>().pivot = new Vector2(0f, 0f); __instance.productUnitLabel.GetComponent <RectTransform>().anchoredPosition = new Vector2(initialXOffset + valuesWidth + 4, -42); __instance.consumeLabel.alignment = TextAnchor.UpperRight; __instance.consumeLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(labelsWidth, 24); __instance.consumeLabel.GetComponent <RectTransform>().anchoredPosition = new Vector2(initialXOffset, -60); __instance.consumeText.alignByGeometry = true; __instance.consumeText.resizeTextForBestFit = true; __instance.consumeText.resizeTextMaxSize = 34; __instance.consumeText.alignment = TextAnchor.LowerRight; __instance.consumeText.GetComponent <RectTransform>().sizeDelta = new Vector2(valuesWidth, 40); __instance.consumeText.GetComponent <RectTransform>().anchoredPosition = new Vector2(initialXOffset, -4); __instance.consumeUnitLabel.alignByGeometry = true; __instance.consumeUnitLabel.alignment = TextAnchor.LowerLeft; __instance.consumeUnitLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(unitsWidth, 24); __instance.consumeUnitLabel.GetComponent <RectTransform>().anchorMin = new Vector2(0f, 0f); __instance.consumeUnitLabel.GetComponent <RectTransform>().anchorMax = new Vector2(0f, 0f); __instance.consumeUnitLabel.GetComponent <RectTransform>().pivot = new Vector2(0f, 0f); __instance.consumeUnitLabel.GetComponent <RectTransform>().anchoredPosition = new Vector2(initialXOffset + valuesWidth + 4, -4); var maxProductionLabel = CopyText(__instance.productLabel, new Vector2(maxOffset, 0)); maxProductionLabel.text = "Theoretical Max"; var maxProductionValue = CopyText(__instance.productText, new Vector2(maxOffset, 0)); maxProductionValue.text = "0"; var maxProductionUnit = CopyText(__instance.productUnitLabel, new Vector2(maxOffset, 0)); maxProductionUnit.text = "/min"; var maxConsumptionLabel = CopyText(__instance.consumeLabel, new Vector2(maxOffset, 0)); maxConsumptionLabel.text = "Theoretical Max"; var maxConsumptionValue = CopyText(__instance.consumeText, new Vector2(maxOffset, 0)); maxConsumptionValue.text = "0"; var maxConsumptionUnit = CopyText(__instance.consumeUnitLabel, new Vector2(maxOffset, 0)); maxConsumptionUnit.text = "/min"; var counterProductionLabel = CopyText(__instance.productLabel, new Vector2(-initialXOffset, 0)); counterProductionLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(60, 40); counterProductionLabel.text = "Producers"; var counterProductionValue = CopyText(__instance.productText, new Vector2(-initialXOffset, 0)); counterProductionValue.GetComponent <RectTransform>().sizeDelta = new Vector2(60, 40); counterProductionValue.text = "0"; var counterConsumptionLabel = CopyText(__instance.consumeLabel, new Vector2(-initialXOffset, 0)); counterConsumptionLabel.GetComponent <RectTransform>().sizeDelta = new Vector2(60, 40); counterConsumptionLabel.text = "Consumers"; var counterConsumptionValue = CopyText(__instance.consumeText, new Vector2(-initialXOffset, 0)); counterConsumptionValue.GetComponent <RectTransform>().sizeDelta = new Vector2(60, 40); counterConsumptionValue.text = "0"; var enhancement = new EnhancedUIProductEntryElements() { maxProductionLabel = maxProductionLabel, maxProductionValue = maxProductionValue, maxProductionUnit = maxProductionUnit, maxConsumptionLabel = maxConsumptionLabel, maxConsumptionValue = maxConsumptionValue, maxConsumptionUnit = maxConsumptionUnit, counterProductionLabel = counterProductionLabel, counterProductionValue = counterProductionValue, counterConsumptionLabel = counterConsumptionLabel, counterConsumptionValue = counterConsumptionValue }; enhancements.Add(__instance, enhancement); return(enhancement); }
public static void UIProductEntry__OnUpdate_Postfix(UIProductEntry __instance) { if (__instance.productionStatWindow == null || !__instance.productionStatWindow.isProductionTab) { return; } if (!enhancements.TryGetValue(__instance, out EnhancedUIProductEntryElements enhancement)) { enhancement = EnhanceUIProductEntry(__instance); } bool isTotalTimeWindow = __instance.productionStatWindow.timeLevel == 5; string originalProductText = __instance.productText.text.Trim(); string originalConsumeText = __instance.consumeText.text.Trim(); float originalProductValue = ReverseFormat(originalProductText); float originalConsumeValue = ReverseFormat(originalConsumeText); string producers = "0"; string consumers = "0"; string maxProduction = "0"; string maxConsumption = "0"; string unitRate = displayPerSecond.Value ? "/sec" : "/min"; string unit = isTotalTimeWindow ? "" : "/min"; int divider = 1; bool alertOnLackOfProduction = false; bool warnOnHighMaxConsumption = false; //add values per second if (displayPerSecond.Value) { divider = 60; unit = !isTotalTimeWindow ? "/sec" : unit; if (!isTotalTimeWindow) { originalProductValue = originalProductValue / divider; originalConsumeValue = originalConsumeValue / divider; originalProductText = $"{FormatMetric(originalProductValue)}"; originalConsumeText = $"{FormatMetric(originalConsumeValue)}"; } } __instance.productUnitLabel.text = __instance.consumeUnitLabel.text = unit; enhancement.maxProductionUnit.text = enhancement.maxConsumptionUnit.text = unitRate; if (counter.ContainsKey(__instance.entryData.itemId)) { var productMetrics = counter[__instance.entryData.itemId]; float maxProductValue = productMetrics.production / divider; float maxConsumeValue = productMetrics.consumption / divider; maxProduction = FormatMetric(maxProductValue); maxConsumption = FormatMetric(maxConsumeValue); producers = productMetrics.producers.ToString(); consumers = productMetrics.consumers.ToString(); if (originalConsumeValue >= (maxProductValue * BetterStats.lackOfProductionRatioTrigger.Value)) { alertOnLackOfProduction = true; } if (maxConsumeValue >= (maxProductValue * BetterStats.consumptionToProductionRatioTrigger.Value)) { warnOnHighMaxConsumption = true; } } __instance.productText.text = $"{originalProductText}"; __instance.consumeText.text = $"{originalConsumeText}"; enhancement.maxProductionValue.text = maxProduction; enhancement.maxConsumptionValue.text = maxConsumption; enhancement.counterProductionValue.text = producers; enhancement.counterConsumptionValue.text = consumers; enhancement.maxProductionValue.color = enhancement.counterProductionValue.color = __instance.productText.color; enhancement.maxConsumptionValue.color = enhancement.counterConsumptionValue.color = __instance.consumeText.color; if (alertOnLackOfProduction && !isTotalTimeWindow) { enhancement.maxProductionValue.color = __instance.consumeText.color = new Color(1f, .25f, .25f, .5f); } if (warnOnHighMaxConsumption && !isTotalTimeWindow) { enhancement.maxConsumptionValue.color = new Color(1f, 1f, .25f, .5f); } }