示例#1
0
        // shared between Weights and DynamicSlots
        public void AdjustTooltipEquipment(TooltipPrefab_Equipment tooltipInstance, MechComponentDef mechComponentDef)
        {
            var tooltip       = new TooltipPrefab_EquipmentAdapter(tooltipInstance);
            var reservedSlots = 0;

            if (mechComponentDef.Is <Weights>(out var weights))
            {
                reservedSlots += weights.ReservedSlots;
                var mechDef = Global.ActiveMechDef;
                if (mechDef != null)
                {
                    var tonnageChanges = CalculateWeightChanges(mechDef, weights);
                    tooltip.tonnageText.text = FormatChanges(mechComponentDef.Tonnage, tonnageChanges);
                }
            }

            if (mechComponentDef.Is <DynamicSlots.DynamicSlots>(out var dynamicSlots))
            {
                reservedSlots += dynamicSlots.ReservedSlots;
            }

            if (reservedSlots > 0)
            {
                tooltip.slotsText.text = $"{mechComponentDef.InventorySize} + {reservedSlots}";
            }
        }
示例#2
0
        public static void Postfix(TooltipPrefab_Equipment __instance, object data)
        {
            try
            {
                if (data == null)
                {
                    return;
                }

                var panel = panelReference.Target as MechLabPanel;
                if (panel == null)
                {
                    return;
                }

                var mechComponentDef = (MechComponentDef)data;
                EngineTooltip.AdjustTooltip(__instance, panel, mechComponentDef);
                EndoSteel.AdjustTooltip(__instance, panel, mechComponentDef);
                FerrosFibrous.AdjustTooltip(__instance, panel, mechComponentDef);
            }
            catch (Exception e)
            {
                Control.mod.Logger.LogError(e);
            }
        }
        public void AdjustTooltip(TooltipPrefab_Equipment tooltip, MechComponentDef componentDef)
        {
            var adapter = new TooltipPrefab_EquipmentAdapter(tooltip);

            //GUILogUtils.LogHierarchy(tooltip.transform);
            adapter.ShowBonuses = false;
        }
示例#4
0
        internal static void AdjustTooltipEquipment_ShowBonusSection(TooltipPrefab_Equipment tooltip, bool?show = null)
        {
            show ??= !string.IsNullOrEmpty(tooltip.bonusesText.OriginalText) && tooltip.bonusesText.OriginalText != "-";
            var text = tooltip.bonusesText.transform.parent.parent.parent;

            text.gameObject.SetActive(show.Value);
        }
示例#5
0
        public static void Postfix(TooltipPrefab_Equipment __instance, object data)
        {
            try
            {
                if (data == null)
                {
                    return;
                }

                var panel = MechLab.Current;
                if (panel == null)
                {
                    return;
                }

                var adapter = new TooltipPrefab_EquipmentAdapter(__instance);

                var mechComponentDef = (MechComponentDef)data;
                EngineTooltip.AdjustTooltip(adapter, panel, mechComponentDef);
                Armor.AdjustTooltip(adapter, panel, mechComponentDef);
                Structure.AdjustTooltip(adapter, panel, mechComponentDef);
            }

            catch (Exception e)
            {
                Control.mod.Logger.LogError(e);
            }
        }
 public void AdjustTooltip(TooltipPrefab_Equipment tooltip, MechComponentDef componentDef)
 {
     foreach (var cc in componentDef.GetComponents <IAdjustTooltip>())
     {
         cc.AdjustTooltip(tooltip, componentDef);
     }
 }
        // show extended engine information (as its now shown anywhere else)
        internal static void AdjustTooltip(TooltipPrefab_Equipment tooltip, MechLabPanel panel, MechComponentDef mechComponentDef)
        {
            var engineDef = mechComponentDef.GetEngineDef();

            if (engineDef == null)
            {
                return;
            }

            var engineRef = panel.activeMechInventory.Select(x => x.GetEngineRef()).FirstOrDefault(x => x != null);

            if (engineRef == null)
            {
                return;
            }

            var heatDissipation = engineRef.GetEngineHeatDissipation();

            int minHeatSinks, maxHeatSinks;

            Control.calc.CalcHeatSinks(engineDef, out minHeatSinks, out maxHeatSinks);
            var maxAdditionalHeatSinks = maxHeatSinks - minHeatSinks;

            float walkSpeed, runSpeed, TTwalkSpeed;

            Control.calc.CalcSpeeds(engineDef, panel.activeMechDef.Chassis.Tonnage, out walkSpeed, out runSpeed, out TTwalkSpeed);
            var additionalRunSpeed = runSpeed - UnityGameInstance.BattleTechGame.MechStatisticsConstants.MinSprintFactor;
            var gyroWeight         = Control.calc.CalcGyroWeight(engineDef);
            var engineWeight       = mechComponentDef.Tonnage - gyroWeight;

            var originalText = tooltip.detailText.text;

            tooltip.detailText.text = "";

            var htype = engineRef.IsDHS ? "Double Heat Sinks" : "Standard Heat Sinks";

            tooltip.detailText.text += "<i>" + htype + "</i>" +
                                       "   Internal: <b>" + minHeatSinks + "</b>" +
                                       "   Additional: <b>" + engineRef.AdditionalHeatSinkCount + "</b> / <b>" + maxAdditionalHeatSinks + "</b>";

            tooltip.detailText.text += "\r\n" +
                                       "<i>Speeds</i>" +
                                       "   Cruise <b>" + walkSpeed + "</b>" +
                                       " / Top <b>" + runSpeed + "</b>";

            tooltip.detailText.text += "\r\n" +
                                       "<i>Weights</i>" +
                                       "   Engine: <b>" + engineWeight + "</b> Ton" +
                                       "   Gyro: <b>" + gyroWeight + "</b> Ton";

            tooltip.detailText.text += "\r\n";
            tooltip.detailText.text += "\r\n";
            tooltip.detailText.text += originalText;

            tooltip.bonusesText.text = string.Format("- {0} Heat / Turn + {1} Top Speed", heatDissipation, additionalRunSpeed);
        }
        internal static void AdjustTooltip(TooltipPrefab_Equipment tooltip, MechLabPanel panel, MechComponentDef mechComponentDef)
        {
            if (!mechComponentDef.IsFerrosFibrous())
            {
                return;
            }

            int count;
            var tonnage = WeightSavings(panel.activeMechDef, out count);

            tooltip.bonusesText.text = string.Format("- {0} ton,  {1} / {2}", tonnage, count, Control.settings.FerrosFibrousRequiredCriticals);
        }
示例#9
0
        internal static void AdjustTooltip(TooltipPrefab_Equipment tooltip, MechLabPanel panel, MechComponentDef mechComponentDef)
        {
            if (!mechComponentDef.IsStructure())
            {
                return;
            }

            var calculator = new StructureWeightSavingCalculator(panel.activeMechDef);
            var tonnage    = calculator.WeightSavings;

            tooltip.bonusesText.text = string.Format("- {0} ton,  {1} / {2}", tonnage, calculator.Count, calculator.RequiredCount);
        }
示例#10
0
        public void AdjustTooltip(TooltipPrefab_Equipment tooltipInstance, MechComponentDef mechComponentDef)
        {
            var coreDef = mechComponentDef.GetComponent <EngineCoreDef>();

            if (coreDef == null)
            {
                return;
            }

            var panel = Global.ActiveMechLabPanel;

            if (panel == null)
            {
                return;
            }

            var engine = panel.GetEngine();

            if (engine == null)
            {
                return;
            }

            engine.CoreDef = coreDef;

            var movement = coreDef.GetMovement(panel.activeMechDef.Chassis.Tonnage);

            var tooltip      = new TooltipPrefab_EquipmentAdapter(tooltipInstance);
            var originalText = tooltip.detailText.text;

            tooltip.detailText.text = "";

            tooltip.detailText.text += "<i>Speeds</i>" +
                                       "   Cruise <b>" + movement.WalkSpeed + "</b>" +
                                       " / Top <b>" + movement.RunSpeed + "</b>";

            tooltip.detailText.text += "\r\n" +
                                       "<i>Weights [Ton]</i>" +
                                       "   Engine: <b>" + engine.EngineTonnage + "</b>" +
                                       "   Gyro: <b>" + engine.GyroTonnage + "</b>" +
                                       "   Sinks: <b>" + engine.HeatSinkTonnage + "</b>";

            tooltip.tonnageText.text = $"{engine.TotalTonnage}";

            tooltip.detailText.text += "\r\n";
            tooltip.detailText.text += "\r\n";
            tooltip.detailText.text += originalText;
            tooltip.detailText.SetAllDirty();
        }
        public static void Postfix(TooltipPrefab_Equipment __instance, object data)
        {
            try
            {
                BonusDescriptions.AdjustTooltipEquipment_ShowBonusSection(__instance);

                if (data is MechComponentDef def)
                {
                    OverrideDescriptionsFeature.Shared.AdjustTooltipEquipment(__instance, def);
                }
            }
            catch (Exception e)
            {
                Control.Logger.Error.Log(e);
            }
        }
        public void AdjustTooltip(TooltipPrefab_Equipment tooltipInstance, MechComponentDef mechComponentDef)
        {
            var def = mechComponentDef.GetComponent <EngineHeatBlockDef>();

            if (def == null)
            {
                return;
            }

            var panel = Global.ActiveMechLabPanel;

            if (panel == null)
            {
                return;
            }

            var engine = panel.GetEngine();

            if (engine == null)
            {
                return;
            }

            engine.EngineHeatBlockDef = def;

            var tooltip      = new TooltipPrefab_EquipmentAdapter(tooltipInstance);
            var originalText = tooltip.detailText.text;

            tooltip.detailText.text = "";

            tooltip.detailText.text += $"<i>{engine.MechHeatSinkDef.FullName}</i>" +
                                       $"\r\n   Internal" +
                                       $"   Free: <b>{engine.HeatSinkInternalFreeMaxCount}</b> " +
                                       $"   Additional: <b>{engine.EngineHeatBlockDef.HeatSinkCount} / {engine.HeatSinkInternalAdditionalMaxCount}</b>" +
                                       $"\r\n   External" +
                                       $"   Free: <b>{engine.HeatSinkExternalFreeCount} / {engine.HeatSinkExternalFreeMaxCount}</b> " +
                                       $"   Additional: <b>{engine.HeatSinkExternalAdditionalCount}</b>" +
                                       "\r\n";

            tooltip.detailText.text += "\r\n";
            tooltip.detailText.text += "\r\n";
            tooltip.detailText.text += originalText;
            tooltip.detailText.SetAllDirty();

            tooltip.bonusesText.text = BonusValueEngineHeatDissipation(engine) + ", " + BonusValueEngineHeatSinkCounts(engine);
            tooltip.bonusesText.SetAllDirty();
        }
示例#13
0
        public static void Postfix(TooltipPrefab_Equipment __instance, object data)
        {
            try
            {
                var adapter = new TooltipPrefab_EquipmentAdapter(__instance);
                adapter.ShowBonuses = true;

                if (data is MechComponentDef def)
                {
                    OverrideDescriptionsFeature.Shared.AdjustTooltipEquipment(__instance, def);
                }
            }
            catch (Exception e)
            {
                Control.mod.Logger.LogError(e);
            }
        }
示例#14
0
        public static void Postfix(TooltipPrefab_Equipment __instance, object data)
        {
            try
            {
                if (data == null)
                {
                    return;
                }

                var adapter = new TooltipPrefab_EquipmentAdapter(__instance);

                var mechComponentDef = (MechComponentDef)data;
                EngineHandler.Shared.AdjustTooltip(adapter, mechComponentDef);
                WeightsHandler.Shared.AdjustTooltip(adapter, mechComponentDef);
            }
            catch (Exception e)
            {
                Control.mod.Logger.LogError(e);
            }
        }
示例#15
0
        public static void Postfix(TooltipPrefab_Equipment __instance, object data, TextMeshProUGUI ___detailText)
        {
            Mod.Log.Debug($"TP_E:SD - Init");
            SimGameState sgs = UnityGameInstance.BattleTechGame.Simulation;

            if (data != null && ___detailText != null && sgs != null)
            {
                // Calculate total gear storage size
                MechComponentDef mcDef = (MechComponentDef)data;
                float            componentStorageSize = Helper.CalculateGearStorageSize(mcDef);
                double           totalSize            = Helper.GetGearInventorySize(sgs);

                int storageCost = 0;
                if (totalSize > 0)
                {
                    // Handle exponentiation of cost
                    int totalCost = Helper.CalculateTotalForGearCargo(sgs, totalSize);

                    double sizeFraction = componentStorageSize / totalSize;
                    storageCost = (int)Math.Ceiling(totalCost * sizeFraction);
                    Mod.Log.Debug($"    totalCost: {totalCost}  storageSize: {componentStorageSize}  sizeFraction: {sizeFraction}  fractionalCost: {storageCost}");
                }
                else
                {
                    // Assume no exponentiation when there is no gear
                    double factoredSize = Math.Ceiling(componentStorageSize * Mod.Config.GearFactor);
                    double scaledUnits  = Math.Pow(factoredSize, Mod.Config.GearExponent);
                    storageCost = (int)(Mod.Config.GearCostPerUnit * scaledUnits);
                    Mod.Log.Info($"  totalUnits:{componentStorageSize} x factor:{Mod.Config.GearFactor} = {factoredSize}");
                }

                Text newDetails = new Text(mcDef.Description.Details + $"\n\n<color=#FF0000>Cargo Cost:{SimGameState.GetCBillString(storageCost)} from {componentStorageSize}u size</color>");
                Mod.Log.Debug($"  Setting details: {newDetails}u");
                ___detailText.SetText(newDetails.ToString());
            }
            else
            {
                Mod.Log.Debug($"TP_E:SD - Skipping");
            }
        }
示例#16
0
        public void AdjustTooltip(TooltipPrefab_Equipment tooltipInstance, MechComponentDef mechComponentDef)
        {
            var weights = mechComponentDef.GetComponent <Weights>();

            if (weights == null)
            {
                return;
            }

            var mechDef = Global.ActiveMechDef;

            if (mechDef == null)
            {
                return;
            }

            var tonnageChanges = CalculateWeightChanges(mechDef, weights);

            var tooltip = new TooltipPrefab_EquipmentAdapter(tooltipInstance);

            tooltip.tonnageText.text = FormatChanges(mechComponentDef.Tonnage, tonnageChanges);

            // TODO move to own feature... SlotsHandler or SizeHandler
            var reservedSlots = weights.ReservedSlots;

            if (mechComponentDef.Is <DynamicSlots.DynamicSlots>(out var dynamicSlots))
            {
                reservedSlots += dynamicSlots.ReservedSlots;
            }

            if (reservedSlots > 0)
            {
                tooltip.slotsText.text = $"{mechComponentDef.InventorySize} + {reservedSlots}";
            }

            tooltip.bonusesText.SetAllDirty();
        }
示例#17
0
            public static void Postfix(TooltipPrefab_Equipment __instance, object data, LocalizableText ___bonusesText)
            {
                try
                {
                    Logger.Debug("[TooltipPrefab_Equipment_SetData_POSTFIX] Comma-separating bonusesText");

                    MechComponentDef mechComponentDef = (MechComponentDef)data;
                    if (string.IsNullOrEmpty(mechComponentDef.BonusValueA) && string.IsNullOrEmpty(mechComponentDef.BonusValueB))
                    {
                        ___bonusesText.SetText("-", Array.Empty <object>());
                    }
                    // BEN: Added these
                    else if (!string.IsNullOrEmpty(mechComponentDef.BonusValueA) && string.IsNullOrEmpty(mechComponentDef.BonusValueB))
                    {
                        ___bonusesText.SetText(mechComponentDef.BonusValueA, Array.Empty <object>());
                    }
                    else if (string.IsNullOrEmpty(mechComponentDef.BonusValueA) && !string.IsNullOrEmpty(mechComponentDef.BonusValueB))
                    {
                        ___bonusesText.SetText(mechComponentDef.BonusValueB, Array.Empty <object>());
                    }
                    // :NEB
                    else
                    {
                        // BEN: Added missing comma
                        ___bonusesText.SetText("{0}, {1}", new object[]
                        {
                            mechComponentDef.BonusValueA,
                            mechComponentDef.BonusValueB
                        });
                    }
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                }
            }
示例#18
0
 public void AdjustTooltipEquipment(TooltipPrefab_Equipment tooltip, MechComponentDef componentDef)
 {
     WeightsHandler.Shared.AdjustTooltipEquipment(tooltip, componentDef);
 }
示例#19
0
 public void AdjustTooltipEquipment(TooltipPrefab_Equipment tooltip, MechComponentDef componentDef)
 {
     // we list bonuses in the description, disable bonus sections
     AdjustTooltipEquipment_ShowBonusSection(tooltip, false);
 }