Exemplo n.º 1
0
        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}";
            }
        }
Exemplo n.º 2
0
        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";
                }
            }
        }
Exemplo n.º 3
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;
            }
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
            }
        }