Example #1
0
        private string GetTileTip(int tile, int pathIndex)
        {
            int           num           = paths[pathIndex].NodesReversed.IndexOf(tile);
            int           num2          = ((num > 0) ? paths[pathIndex].NodesReversed[num - 1] : ((pathIndex >= paths.Count - 1 || paths[pathIndex + 1].NodesReversed.Count < 2) ? (-1) : paths[pathIndex + 1].NodesReversed[paths[pathIndex + 1].NodesReversed.Count - 2]));
            int           num3          = cachedTicksToWaypoint[pathIndex] + CaravanArrivalTimeEstimator.EstimatedTicksToArrive(paths[pathIndex].FirstNode, tile, paths[pathIndex], 0f, CaravanTicksPerMove, GenTicks.TicksAbs + cachedTicksToWaypoint[pathIndex]);
            int           num4          = GenTicks.TicksAbs + num3;
            StringBuilder stringBuilder = new StringBuilder();

            if (num3 != 0)
            {
                stringBuilder.AppendLine("EstimatedTimeToTile".Translate(num3.ToStringTicksToDays("0.##")));
            }
            stringBuilder.AppendLine("ForagedFoodAmount".Translate() + ": " + Find.WorldGrid[tile].biome.forageability.ToStringPercent());
            stringBuilder.Append(VirtualPlantsUtility.GetVirtualPlantsStatusExplanationAt(tile, num4));
            if (num2 != -1)
            {
                stringBuilder.AppendLine();
                stringBuilder.AppendLine();
                StringBuilder stringBuilder2 = new StringBuilder();
                float         num5           = WorldPathGrid.CalculatedMovementDifficultyAt(num2, perceivedStatic: false, num4, stringBuilder2);
                float         roadMovementDifficultyMultiplier = Find.WorldGrid.GetRoadMovementDifficultyMultiplier(tile, num2, stringBuilder2);
                stringBuilder.Append("TileMovementDifficulty".Translate() + ":\n" + stringBuilder2.ToString().Indented("  "));
                stringBuilder.AppendLine();
                stringBuilder.Append("  = ");
                stringBuilder.Append((num5 * roadMovementDifficultyMultiplier).ToString("0.#"));
            }
            return(stringBuilder.ToString());
        }
Example #2
0
        public static void DrawCaravanInfo(CaravanInfo info, CaravanInfo?info2, int currentTile, int?ticksToArrive, float lastMassFlashTime, Rect rect, bool lerpMassColor = true, string extraDaysWorthOfFoodTipInfo = null, bool multiline = false)
        {
            tmpInfo.Clear();
            string text = info.massUsage.ToStringEnsureThreshold(info.massCapacity, 0) + " / " + info.massCapacity.ToString("F0") + " " + "kg".Translate();
            object obj2;

            if (info2.HasValue)
            {
                string[]    obj       = new string[5];
                CaravanInfo value     = info2.Value;
                float       massUsage = value.massUsage;
                CaravanInfo value2    = info2.Value;
                obj[0] = massUsage.ToStringEnsureThreshold(value2.massCapacity, 0);
                obj[1] = " / ";
                CaravanInfo value3 = info2.Value;
                obj[2] = value3.massCapacity.ToString("F0");
                obj[3] = " ";
                obj[4] = "kg".Translate();
                obj2   = string.Concat(obj);
            }
            else
            {
                obj2 = null;
            }
            string text2 = (string)obj2;
            List <TransferableUIUtility.ExtraInfo> list = tmpInfo;
            string key                     = "Mass".Translate();
            string value4                  = text;
            Color  massColor               = GetMassColor(info.massUsage, info.massCapacity, lerpMassColor);
            float  massUsage2              = info.massUsage;
            float  massCapacity            = info.massCapacity;
            string massCapacityExplanation = info.massCapacityExplanation;
            float? massUsage3;

            if (info2.HasValue)
            {
                CaravanInfo value5 = info2.Value;
                massUsage3 = value5.massUsage;
            }
            else
            {
                massUsage3 = null;
            }
            float?massCapacity2;

            if (info2.HasValue)
            {
                CaravanInfo value6 = info2.Value;
                massCapacity2 = value6.massCapacity;
            }
            else
            {
                massCapacity2 = null;
            }
            object massCapacity2Explanation;

            if (info2.HasValue)
            {
                CaravanInfo value7 = info2.Value;
                massCapacity2Explanation = value7.massCapacityExplanation;
            }
            else
            {
                massCapacity2Explanation = null;
            }
            string massTip     = GetMassTip(massUsage2, massCapacity, massCapacityExplanation, massUsage3, massCapacity2, (string)massCapacity2Explanation);
            string secondValue = text2;
            Color  secondColor;

            if (info2.HasValue)
            {
                CaravanInfo value8     = info2.Value;
                float       massUsage4 = value8.massUsage;
                CaravanInfo value9     = info2.Value;
                secondColor = GetMassColor(massUsage4, value9.massCapacity, lerpMassColor);
            }
            else
            {
                secondColor = Color.white;
            }
            list.Add(new TransferableUIUtility.ExtraInfo(key, value4, massColor, massTip, secondValue, secondColor, lastMassFlashTime));
            if (info.extraMassUsage != -1f)
            {
                string text3 = info.extraMassUsage.ToStringEnsureThreshold(info.extraMassCapacity, 0) + " / " + info.extraMassCapacity.ToString("F0") + " " + "kg".Translate();
                object obj4;
                if (info2.HasValue)
                {
                    string[]    obj3           = new string[5];
                    CaravanInfo value10        = info2.Value;
                    float       extraMassUsage = value10.extraMassUsage;
                    CaravanInfo value11        = info2.Value;
                    obj3[0] = extraMassUsage.ToStringEnsureThreshold(value11.extraMassCapacity, 0);
                    obj3[1] = " / ";
                    CaravanInfo value12 = info2.Value;
                    obj3[2] = value12.extraMassCapacity.ToString("F0");
                    obj3[3] = " ";
                    obj3[4] = "kg".Translate();
                    obj4    = string.Concat(obj3);
                }
                else
                {
                    obj4 = null;
                }
                string text4 = (string)obj4;
                List <TransferableUIUtility.ExtraInfo> list2 = tmpInfo;
                string key2                         = "CaravanMass".Translate();
                string value13                      = text3;
                Color  massColor2                   = GetMassColor(info.extraMassUsage, info.extraMassCapacity, lerpMassColor: true);
                float  extraMassUsage2              = info.extraMassUsage;
                float  extraMassCapacity            = info.extraMassCapacity;
                string extraMassCapacityExplanation = info.extraMassCapacityExplanation;
                float? massUsage5;
                if (info2.HasValue)
                {
                    CaravanInfo value14 = info2.Value;
                    massUsage5 = value14.extraMassUsage;
                }
                else
                {
                    massUsage5 = null;
                }
                float?massCapacity3;
                if (info2.HasValue)
                {
                    CaravanInfo value15 = info2.Value;
                    massCapacity3 = value15.extraMassCapacity;
                }
                else
                {
                    massCapacity3 = null;
                }
                object massCapacity2Explanation2;
                if (info2.HasValue)
                {
                    CaravanInfo value16 = info2.Value;
                    massCapacity2Explanation2 = value16.extraMassCapacityExplanation;
                }
                else
                {
                    massCapacity2Explanation2 = null;
                }
                string massTip2     = GetMassTip(extraMassUsage2, extraMassCapacity, extraMassCapacityExplanation, massUsage5, massCapacity3, (string)massCapacity2Explanation2);
                string secondValue2 = text4;
                Color  secondColor2;
                if (info2.HasValue)
                {
                    CaravanInfo value17         = info2.Value;
                    float       extraMassUsage3 = value17.extraMassUsage;
                    CaravanInfo value18         = info2.Value;
                    secondColor2 = GetMassColor(extraMassUsage3, value18.extraMassCapacity, lerpMassColor: true);
                }
                else
                {
                    secondColor2 = Color.white;
                }
                list2.Add(new TransferableUIUtility.ExtraInfo(key2, value13, massColor2, massTip2, secondValue2, secondColor2));
            }
            string text5 = "CaravanMovementSpeedTip".Translate();

            if (!info.tilesPerDayExplanation.NullOrEmpty())
            {
                text5 = text5 + "\n\n" + info.tilesPerDayExplanation;
            }
            if (info2.HasValue)
            {
                CaravanInfo value19 = info2.Value;
                if (!value19.tilesPerDayExplanation.NullOrEmpty())
                {
                    string      str     = text5;
                    CaravanInfo value20 = info2.Value;
                    text5 = str + "\n\n-----\n\n" + value20.tilesPerDayExplanation;
                }
            }
            List <TransferableUIUtility.ExtraInfo> list3 = tmpInfo;
            string key3    = "CaravanMovementSpeed".Translate();
            string value21 = info.tilesPerDay.ToString("0.#") + " " + "TilesPerDay".Translate();
            Color  color   = GenUI.LerpColor(TilesPerDayColor, info.tilesPerDay);
            string tip     = text5;
            object secondValue3;

            if (info2.HasValue)
            {
                CaravanInfo value22 = info2.Value;
                secondValue3 = value22.tilesPerDay.ToString("0.#") + " " + "TilesPerDay".Translate();
            }
            else
            {
                secondValue3 = null;
            }
            Color secondColor3;

            if (info2.HasValue)
            {
                List <Pair <float, Color> > tilesPerDayColor = TilesPerDayColor;
                CaravanInfo value23 = info2.Value;
                secondColor3 = GenUI.LerpColor(tilesPerDayColor, value23.tilesPerDay);
            }
            else
            {
                secondColor3 = Color.white;
            }
            list3.Add(new TransferableUIUtility.ExtraInfo(key3, value21, color, tip, (string)secondValue3, secondColor3));
            List <TransferableUIUtility.ExtraInfo> list4 = tmpInfo;
            string key4 = "DaysWorthOfFood".Translate();
            string daysWorthOfFoodLabel = GetDaysWorthOfFoodLabel(info.daysWorthOfFood, multiline);
            Color  daysWorthOfFoodColor = GetDaysWorthOfFoodColor(info.daysWorthOfFood, ticksToArrive);
            string tip2 = "DaysWorthOfFoodTooltip".Translate() + extraDaysWorthOfFoodTipInfo + "\n\n" + VirtualPlantsUtility.GetVirtualPlantsStatusExplanationAt(currentTile, Find.TickManager.TicksAbs);
            object secondValue4;

            if (info2.HasValue)
            {
                CaravanInfo value24 = info2.Value;
                secondValue4 = GetDaysWorthOfFoodLabel(value24.daysWorthOfFood, multiline);
            }
            else
            {
                secondValue4 = null;
            }
            Color secondColor4;

            if (info2.HasValue)
            {
                CaravanInfo value25 = info2.Value;
                secondColor4 = GetDaysWorthOfFoodColor(value25.daysWorthOfFood, ticksToArrive);
            }
            else
            {
                secondColor4 = Color.white;
            }
            list4.Add(new TransferableUIUtility.ExtraInfo(key4, daysWorthOfFoodLabel, daysWorthOfFoodColor, tip2, (string)secondValue4, secondColor4));
            string text6 = info.foragedFoodPerDay.Second.ToString("0.#");
            object obj5;

            if (info2.HasValue)
            {
                CaravanInfo value26 = info2.Value;
                obj5 = value26.foragedFoodPerDay.Second.ToString("0.#");
            }
            else
            {
                obj5 = null;
            }
            string text7 = (string)obj5;
            string str2  = "ForagedFoodPerDayTip".Translate();

            str2 = str2 + "\n\n" + info.foragedFoodPerDayExplanation;
            if (info2.HasValue)
            {
                string      str3    = str2;
                CaravanInfo value27 = info2.Value;
                str2 = str3 + "\n\n-----\n\n" + value27.foragedFoodPerDayExplanation;
            }
            if (info.foragedFoodPerDay.Second > 0f)
            {
                goto IL_06ad;
            }
            if (info2.HasValue)
            {
                CaravanInfo value28 = info2.Value;
                if (value28.foragedFoodPerDay.Second > 0f)
                {
                    goto IL_06ad;
                }
            }
            goto IL_076b;
IL_06ad:
            string text8 = (!multiline) ? " " : "\n";

            if (!info2.HasValue)
            {
                string text9 = text6;
                text6 = text9 + text8 + "(" + info.foragedFoodPerDay.First.label + ")";
            }
            else
            {
                string   text9 = text7;
                string[] obj6  = new string[5]
                {
                    text9,
                    text8,
                    "(",
                    null,
                    null
                };
                CaravanInfo value29 = info2.Value;
                obj6[3] = value29.foragedFoodPerDay.First.label.Truncate(50f);
                obj6[4] = ")";
                text7   = string.Concat(obj6);
            }
            goto IL_076b;
IL_076b:
            tmpInfo.Add(new TransferableUIUtility.ExtraInfo("ForagedFoodPerDay".Translate(), text6, Color.white, str2, text7, Color.white));
            string text10 = "CaravanVisibilityTip".Translate();

            if (!info.visibilityExplanation.NullOrEmpty())
            {
                text10 = text10 + "\n\n" + info.visibilityExplanation;
            }
            if (info2.HasValue)
            {
                CaravanInfo value30 = info2.Value;
                if (!value30.visibilityExplanation.NullOrEmpty())
                {
                    string      str4    = text10;
                    CaravanInfo value31 = info2.Value;
                    text10 = str4 + "\n\n-----\n\n" + value31.visibilityExplanation;
                }
            }
            List <TransferableUIUtility.ExtraInfo> list5 = tmpInfo;
            string key5    = "Visibility".Translate();
            string value32 = info.visibility.ToStringPercent();
            Color  color2  = GenUI.LerpColor(VisibilityColor, info.visibility);
            string tip3    = text10;
            object secondValue5;

            if (info2.HasValue)
            {
                CaravanInfo value33 = info2.Value;
                secondValue5 = value33.visibility.ToStringPercent();
            }
            else
            {
                secondValue5 = null;
            }
            Color secondColor5;

            if (info2.HasValue)
            {
                List <Pair <float, Color> > visibilityColor = VisibilityColor;
                CaravanInfo value34 = info2.Value;
                secondColor5 = GenUI.LerpColor(visibilityColor, value34.visibility);
            }
            else
            {
                secondColor5 = Color.white;
            }
            list5.Add(new TransferableUIUtility.ExtraInfo(key5, value32, color2, tip3, (string)secondValue5, secondColor5));
            TransferableUIUtility.DrawExtraInfo(tmpInfo, rect);
        }
Example #3
0
        public static void DrawCaravanInfo(CaravanUIUtility.CaravanInfo info, CaravanUIUtility.CaravanInfo?info2, int currentTile, int?ticksToArrive, float lastMassFlashTime, Rect rect, bool lerpMassColor = true, string extraDaysWorthOfFoodTipInfo = null, bool multiline = false)
        {
            CaravanUIUtility.tmpInfo.Clear();
            string value = string.Concat(new string[]
            {
                info.massUsage.ToStringEnsureThreshold(info.massCapacity, 0),
                " / ",
                info.massCapacity.ToString("F0"),
                " ",
                "kg".Translate()
            });
            string secondValue = (!info2.HasValue) ? null : string.Concat(new string[]
            {
                info2.Value.massUsage.ToStringEnsureThreshold(info2.Value.massCapacity, 0),
                " / ",
                info2.Value.massCapacity.ToString("F0"),
                " ",
                "kg".Translate()
            });

            CaravanUIUtility.tmpInfo.Add(new TransferableUIUtility.ExtraInfo("Mass".Translate(), value, CaravanUIUtility.GetMassColor(info.massUsage, info.massCapacity, lerpMassColor), CaravanUIUtility.GetMassTip(info.massUsage, info.massCapacity, info.massCapacityExplanation, (!info2.HasValue) ? null : new float?(info2.Value.massUsage), (!info2.HasValue) ? null : new float?(info2.Value.massCapacity), (!info2.HasValue) ? null : info2.Value.massCapacityExplanation), secondValue, (!info2.HasValue) ? Color.white : CaravanUIUtility.GetMassColor(info2.Value.massUsage, info2.Value.massCapacity, lerpMassColor), lastMassFlashTime));
            if (info.extraMassUsage != -1f)
            {
                string value2 = string.Concat(new string[]
                {
                    info.extraMassUsage.ToStringEnsureThreshold(info.extraMassCapacity, 0),
                    " / ",
                    info.extraMassCapacity.ToString("F0"),
                    " ",
                    "kg".Translate()
                });
                string secondValue2 = (!info2.HasValue) ? null : string.Concat(new string[]
                {
                    info2.Value.extraMassUsage.ToStringEnsureThreshold(info2.Value.extraMassCapacity, 0),
                    " / ",
                    info2.Value.extraMassCapacity.ToString("F0"),
                    " ",
                    "kg".Translate()
                });
                CaravanUIUtility.tmpInfo.Add(new TransferableUIUtility.ExtraInfo("CaravanMass".Translate(), value2, CaravanUIUtility.GetMassColor(info.extraMassUsage, info.extraMassCapacity, true), CaravanUIUtility.GetMassTip(info.extraMassUsage, info.extraMassCapacity, info.extraMassCapacityExplanation, (!info2.HasValue) ? null : new float?(info2.Value.extraMassUsage), (!info2.HasValue) ? null : new float?(info2.Value.extraMassCapacity), (!info2.HasValue) ? null : info2.Value.extraMassCapacityExplanation), secondValue2, (!info2.HasValue) ? Color.white : CaravanUIUtility.GetMassColor(info2.Value.extraMassUsage, info2.Value.extraMassCapacity, true), -9999f));
            }
            string text = "CaravanMovementSpeedTip".Translate();

            if (!info.tilesPerDayExplanation.NullOrEmpty())
            {
                text = text + "\n\n" + info.tilesPerDayExplanation;
            }
            if (info2.HasValue && !info2.Value.tilesPerDayExplanation.NullOrEmpty())
            {
                text = text + "\n\n-----\n\n" + info2.Value.tilesPerDayExplanation;
            }
            CaravanUIUtility.tmpInfo.Add(new TransferableUIUtility.ExtraInfo("CaravanMovementSpeed".Translate(), info.tilesPerDay.ToString("0.#") + " " + "TilesPerDay".Translate(), GenUI.LerpColor(CaravanUIUtility.TilesPerDayColor, info.tilesPerDay), text, (!info2.HasValue) ? null : (info2.Value.tilesPerDay.ToString("0.#") + " " + "TilesPerDay".Translate()), (!info2.HasValue) ? Color.white : GenUI.LerpColor(CaravanUIUtility.TilesPerDayColor, info2.Value.tilesPerDay), -9999f));
            CaravanUIUtility.tmpInfo.Add(new TransferableUIUtility.ExtraInfo("DaysWorthOfFood".Translate(), CaravanUIUtility.GetDaysWorthOfFoodLabel(info.daysWorthOfFood, multiline), CaravanUIUtility.GetDaysWorthOfFoodColor(info.daysWorthOfFood, ticksToArrive), "DaysWorthOfFoodTooltip".Translate() + extraDaysWorthOfFoodTipInfo + "\n\n" + VirtualPlantsUtility.GetVirtualPlantsStatusExplanationAt(currentTile, Find.TickManager.TicksAbs), (!info2.HasValue) ? null : CaravanUIUtility.GetDaysWorthOfFoodLabel(info2.Value.daysWorthOfFood, multiline), (!info2.HasValue) ? Color.white : CaravanUIUtility.GetDaysWorthOfFoodColor(info2.Value.daysWorthOfFood, ticksToArrive), -9999f));
            string text2 = info.foragedFoodPerDay.Second.ToString("0.#");
            string text3 = (!info2.HasValue) ? null : info2.Value.foragedFoodPerDay.Second.ToString("0.#");
            string text4 = "ForagedFoodPerDayTip".Translate();

            text4 = text4 + "\n\n" + info.foragedFoodPerDayExplanation;
            if (info2.HasValue)
            {
                text4 = text4 + "\n\n-----\n\n" + info2.Value.foragedFoodPerDayExplanation;
            }
            if (info.foragedFoodPerDay.Second > 0f || (info2.HasValue && info2.Value.foragedFoodPerDay.Second > 0f))
            {
                string text5 = (!multiline) ? " " : "\n";
                if (!info2.HasValue)
                {
                    string text6 = text2;
                    text2 = string.Concat(new string[]
                    {
                        text6,
                        text5,
                        "(",
                        info.foragedFoodPerDay.First.label,
                        ")"
                    });
                }
                else
                {
                    string text6 = text3;
                    text3 = string.Concat(new string[]
                    {
                        text6,
                        text5,
                        "(",
                        info2.Value.foragedFoodPerDay.First.label.Truncate(50f, null),
                        ")"
                    });
                }
            }
            CaravanUIUtility.tmpInfo.Add(new TransferableUIUtility.ExtraInfo("ForagedFoodPerDay".Translate(), text2, Color.white, text4, text3, Color.white, -9999f));
            string text7 = "CaravanVisibilityTip".Translate();

            if (!info.visibilityExplanation.NullOrEmpty())
            {
                text7 = text7 + "\n\n" + info.visibilityExplanation;
            }
            if (info2.HasValue && !info2.Value.visibilityExplanation.NullOrEmpty())
            {
                text7 = text7 + "\n\n-----\n\n" + info2.Value.visibilityExplanation;
            }
            CaravanUIUtility.tmpInfo.Add(new TransferableUIUtility.ExtraInfo("Visibility".Translate(), info.visibility.ToStringPercent(), GenUI.LerpColor(CaravanUIUtility.VisibilityColor, info.visibility), text7, (!info2.HasValue) ? null : info2.Value.visibility.ToStringPercent(), (!info2.HasValue) ? Color.white : GenUI.LerpColor(CaravanUIUtility.VisibilityColor, info2.Value.visibility), -9999f));
            TransferableUIUtility.DrawExtraInfo(CaravanUIUtility.tmpInfo, rect);
        }
Example #4
0
        public static void DrawCaravanInfo(CaravanInfo info, CaravanInfo?info2, int currentTile, int?ticksToArrive, float lastMassFlashTime, Rect rect, bool lerpMassColor = true, string extraDaysWorthOfFoodTipInfo = null, bool multiline = false)
        {
            tmpInfo.Clear();
            TaggedString taggedString  = info.massUsage.ToStringEnsureThreshold(info.massCapacity, 0) + " / " + info.massCapacity.ToString("F0") + " " + "kg".Translate();
            TaggedString taggedString2 = info2.HasValue ? (info2.Value.massUsage.ToStringEnsureThreshold(info2.Value.massCapacity, 0) + " / " + info2.Value.massCapacity.ToString("F0") + " " + "kg".Translate()) : ((TaggedString)null);

            tmpInfo.Add(new TransferableUIUtility.ExtraInfo("Mass".Translate(), taggedString, GetMassColor(info.massUsage, info.massCapacity, lerpMassColor), GetMassTip(info.massUsage, info.massCapacity, info.massCapacityExplanation, info2.HasValue ? new float?(info2.Value.massUsage) : null, info2.HasValue ? new float?(info2.Value.massCapacity) : null, info2.HasValue ? info2.Value.massCapacityExplanation : null), taggedString2, info2.HasValue ? GetMassColor(info2.Value.massUsage, info2.Value.massCapacity, lerpMassColor) : Color.white, lastMassFlashTime));
            if (info.extraMassUsage != -1f)
            {
                TaggedString taggedString3 = info.extraMassUsage.ToStringEnsureThreshold(info.extraMassCapacity, 0) + " / " + info.extraMassCapacity.ToString("F0") + " " + "kg".Translate();
                TaggedString taggedString4 = info2.HasValue ? (info2.Value.extraMassUsage.ToStringEnsureThreshold(info2.Value.extraMassCapacity, 0) + " / " + info2.Value.extraMassCapacity.ToString("F0") + " " + "kg".Translate()) : ((TaggedString)null);
                tmpInfo.Add(new TransferableUIUtility.ExtraInfo("CaravanMass".Translate(), taggedString3, GetMassColor(info.extraMassUsage, info.extraMassCapacity, lerpMassColor: true), GetMassTip(info.extraMassUsage, info.extraMassCapacity, info.extraMassCapacityExplanation, info2.HasValue ? new float?(info2.Value.extraMassUsage) : null, info2.HasValue ? new float?(info2.Value.extraMassCapacity) : null, info2.HasValue ? info2.Value.extraMassCapacityExplanation : null), taggedString4, info2.HasValue ? GetMassColor(info2.Value.extraMassUsage, info2.Value.extraMassCapacity, lerpMassColor: true) : Color.white));
            }
            string text = "CaravanMovementSpeedTip".Translate();

            if (!info.tilesPerDayExplanation.NullOrEmpty())
            {
                text = text + "\n\n" + info.tilesPerDayExplanation;
            }
            if (info2.HasValue && !info2.Value.tilesPerDayExplanation.NullOrEmpty())
            {
                text = text + "\n\n-----\n\n" + info2.Value.tilesPerDayExplanation;
            }
            tmpInfo.Add(new TransferableUIUtility.ExtraInfo("CaravanMovementSpeed".Translate(), info.tilesPerDay.ToString("0.#") + " " + "TilesPerDay".Translate(), GenUI.LerpColor(TilesPerDayColor, info.tilesPerDay), text, info2.HasValue ? (info2.Value.tilesPerDay.ToString("0.#") + " " + "TilesPerDay".Translate()) : ((TaggedString)null), info2.HasValue ? GenUI.LerpColor(TilesPerDayColor, info2.Value.tilesPerDay) : Color.white));
            tmpInfo.Add(new TransferableUIUtility.ExtraInfo("DaysWorthOfFood".Translate(), GetDaysWorthOfFoodLabel(info.daysWorthOfFood, multiline), GetDaysWorthOfFoodColor(info.daysWorthOfFood, ticksToArrive), "DaysWorthOfFoodTooltip".Translate() + extraDaysWorthOfFoodTipInfo + "\n\n" + VirtualPlantsUtility.GetVirtualPlantsStatusExplanationAt(currentTile, Find.TickManager.TicksAbs), info2.HasValue ? GetDaysWorthOfFoodLabel(info2.Value.daysWorthOfFood, multiline) : null, info2.HasValue ? GetDaysWorthOfFoodColor(info2.Value.daysWorthOfFood, ticksToArrive) : Color.white));
            string       text2         = info.foragedFoodPerDay.Second.ToString("0.#");
            string       text3         = info2.HasValue ? info2.Value.foragedFoodPerDay.Second.ToString("0.#") : null;
            TaggedString taggedString5 = "ForagedFoodPerDayTip".Translate();

            taggedString5 += "\n\n" + info.foragedFoodPerDayExplanation;
            if (info2.HasValue)
            {
                taggedString5 += "\n\n-----\n\n" + info2.Value.foragedFoodPerDayExplanation;
            }
            if (info.foragedFoodPerDay.Second > 0f || (info2.HasValue && info2.Value.foragedFoodPerDay.Second > 0f))
            {
                string text4 = multiline ? "\n" : " ";
                if (!info2.HasValue)
                {
                    text2 = text2 + text4 + "(" + info.foragedFoodPerDay.First.label + ")";
                }
                else
                {
                    text3 = text3 + text4 + "(" + info2.Value.foragedFoodPerDay.First.label.Truncate(50f) + ")";
                }
            }
            tmpInfo.Add(new TransferableUIUtility.ExtraInfo("ForagedFoodPerDay".Translate(), text2, Color.white, taggedString5, text3, Color.white));
            string text5 = "CaravanVisibilityTip".Translate();

            if (!info.visibilityExplanation.NullOrEmpty())
            {
                text5 = text5 + "\n\n" + info.visibilityExplanation;
            }
            if (info2.HasValue && !info2.Value.visibilityExplanation.NullOrEmpty())
            {
                text5 = text5 + "\n\n-----\n\n" + info2.Value.visibilityExplanation;
            }
            tmpInfo.Add(new TransferableUIUtility.ExtraInfo("Visibility".Translate(), info.visibility.ToStringPercent(), GenUI.LerpColor(VisibilityColor, info.visibility), text5, info2.HasValue ? info2.Value.visibility.ToStringPercent() : null, info2.HasValue ? GenUI.LerpColor(VisibilityColor, info2.Value.visibility) : Color.white));
            TransferableUIUtility.DrawExtraInfo(tmpInfo, rect);
        }