Пример #1
0
        private float FindBestScale(out bool onlyOneRow, out int maxPerGlobalRow)
        {
            float num = 1f;
            List <TacticalColonistBar.Entry> entries = TacticUtils.TacticalColonistBar.Entries;
            int num2 = CalculateGroupsCount();

            while (true)
            {
                float scaleMultiplier = 1f;
                if (!TacticalGroupsSettings.HideGroups)
                {
                    var count = TacticUtils.AllColonyGroups.Count;
                    count += TacticUtils.AllCaravanGroups.Count;
                    if (!WorldRendererUtility.WorldRenderedNow && count > 0)
                    {
                        var activeColony = TacticUtils.AllColonyGroups.Where(x => x.Map == Find.CurrentMap).FirstOrDefault();
                        if (activeColony != null)
                        {
                            count += TacticUtils.GetAllPawnGroupFor(activeColony).Take(TacticalGroupsSettings.GroupRowCount).Count();
                            count += TacticUtils.GetAllSubGroupFor(activeColony).Take(TacticalGroupsSettings.SubGroupRowCount).Count();
                        }
                    }
                    scaleMultiplier += (float)count / 10f;
                }

                float num3 = ((TacticalColonistBar.BaseSize.x + TacticalGroupsSettings.ColonistBarSpacing) * num);
                float num4 = (MaxColonistBarWidth - (float)(num2 - 1) * 25f * num) / scaleMultiplier;
                maxPerGlobalRow = Mathf.FloorToInt(num4 / num3);
                onlyOneRow      = true;
                if (TryDistributeHorizontalSlotsBetweenGroups(maxPerGlobalRow))
                {
                    int  allowedRowsCountForScale = GetAllowedRowsCountForScale(num);
                    bool flag = true;
                    int  num5 = -1;
                    for (int i = 0; i < entries.Count; i++)
                    {
                        if (num5 != entries[i].group)
                        {
                            num5 = entries[i].group;
                            int num6 = Mathf.CeilToInt((float)entriesInGroup[entries[i].group] / (float)horizontalSlotsPerGroup[entries[i].group]);
                            if (num6 > 1)
                            {
                                onlyOneRow = false;
                            }
                            if (num6 > allowedRowsCountForScale)
                            {
                                flag = false;
                                break;
                            }
                        }
                    }
                    if (flag)
                    {
                        break;
                    }
                }
                num *= 0.95f;
            }
            return(num);
        }
Пример #2
0
        private void CalculateDrawLocs(List <Rect> outDrawLocs, float scale, bool onlyOneRow, int maxPerGlobalRow)
        {
            outDrawLocs.Clear();
            int num = maxPerGlobalRow;

            if (onlyOneRow)
            {
                for (int i = 0; i < horizontalSlotsPerGroup.Count; i++)
                {
                    horizontalSlotsPerGroup[i] = Mathf.Min(horizontalSlotsPerGroup[i], entriesInGroup[i]);
                }
                num = TacticUtils.TacticalColonistBar.Entries.Count;
            }
            int   num2 = CalculateGroupsCount();
            float num3 = (TacticalColonistBar.BaseSize.x + TacticalGroupsSettings.ColonistBarSpacingX) * scale;
            float num4 = ((float)num * num3 + (float)(num2 - 1) * 25f * scale);

            if (!TacticalGroupsSettings.HideGroups)
            {
                if (!WorldRendererUtility.WorldRenderedNow)
                {
                    var activeColony = TacticUtils.AllColonyGroups.FirstOrDefault(x => x.Map == Find.CurrentMap);
                    if (activeColony != null)
                    {
                        num4 += TacticUtils.GetAllPawnGroupFor(activeColony).Take(TacticalGroupsSettings.GroupRowCount).Sum(x => x.GroupIconWidth + x.GroupIconMargin);
                        num4 += TacticUtils.GetAllSubGroupFor(activeColony).Take(TacticalGroupsSettings.SubGroupRowCount).Sum(x => x.GroupIconWidth + x.GroupIconMargin);
                    }
                }
            }

            List <TacticalColonistBar.Entry> entries = TacticUtils.TacticalColonistBar.Entries;
            int   num5 = -1;
            int   num6 = -1;
            float num7 = ((float)UI.screenWidth - num4) / 2f;

            num7 += TacticalGroupsSettings.ColonistBarPositionX;
            bool createGroupAssigned = false;

            for (int j = 0; j < entries.Count; j++)
            {
                if (num5 != entries[j].group)
                {
                    if (num5 >= 0)
                    {
                        num7 += 25f * scale;
                        num7 += ((float)GetHorizontalSlotsPerGroup(num5)) * scale * (TacticalColonistBar.BaseSize.x + TacticalGroupsSettings.ColonistBarSpacingX);
                    }
                    if (!TacticalGroupsSettings.HideGroups)
                    {
                        if (entries[j].caravanGroup != null)
                        {
                            caravanGroupDrawLoc.Add(new MappedValue(entries[j].caravanGroup, new Rect(num7 - (25f * scale), TacticalGroupsSettings.ColonistBarPositionY,
                                                                                                      entries[j].caravanGroup.GroupIconWidth, entries[j].caravanGroup.GroupIconHeight)));
                            num7 += entries[j].caravanGroup.GroupIconWidth;
                        }
                        else if (entries[j].colonyGroup != null)
                        {
                            if (entries[j].colonyGroup.Map == Find.CurrentMap)
                            {
                                if (!WorldRendererUtility.WorldRenderedNow)
                                {
                                    var list = TacticUtils.GetAllSubGroupFor(entries[j].colonyGroup);
                                    if (list.Any())
                                    {
                                        list.Reverse();
                                        var initPos = num7;
                                        var xPos    = num7;
                                        var yPos    = TacticalGroupsSettings.ColonistBarPositionY;
                                        for (var groupID = 0; groupID < list.Count(); groupID++)
                                        {
                                            if (groupID > 0 && groupID % TacticalGroupsSettings.SubGroupRowCount == 0)
                                            {
                                                xPos  = initPos;
                                                yPos += list[groupID].GroupIconHeight + 7;
                                            }
                                            pawnGroupDrawLoc.Add(new MappedValue(list[groupID], new Rect(xPos, yPos, list[groupID].GroupIconWidth, list[groupID].GroupIconHeight)));
                                            xPos += list[groupID].GroupIconWidth + 5;
                                        }
                                        list  = list.Take(TacticalGroupsSettings.SubGroupRowCount).ToList();
                                        num7 += list.Sum(x => x.GroupIconWidth + 5);
                                    }
                                }
                            }

                            colonyGroupDrawLoc.Add(new MappedValue(entries[j].colonyGroup, new Rect(num7, TacticalGroupsSettings.ColonistBarPositionY,
                                                                                                    entries[j].colonyGroup.GroupIconWidth, entries[j].colonyGroup.GroupIconHeight)));

                            num7 += entries[j].colonyGroup.GroupIconWidth + entries[j].colonyGroup.GroupIconMargin;
                            if (entries[j].colonyGroup.Map == Find.CurrentMap)
                            {
                                if (!WorldRendererUtility.WorldRenderedNow)
                                {
                                    var list = TacticUtils.GetAllPawnGroupFor(entries[j].colonyGroup);
                                    if (list.Any())
                                    {
                                        list.Reverse();
                                        var initPos = num7;
                                        var xPos    = num7;
                                        var yPos    = TacticalGroupsSettings.ColonistBarPositionY;
                                        for (var groupID = 0; groupID < list.Count(); groupID++)
                                        {
                                            if (groupID > 0 && groupID % TacticalGroupsSettings.GroupRowCount == 0)
                                            {
                                                xPos  = initPos;
                                                yPos += list[groupID].GroupIconHeight + 25;
                                            }
                                            pawnGroupDrawLoc.Add(new MappedValue(list[groupID], new Rect(xPos, yPos, list[groupID].GroupIconWidth, list[groupID].GroupIconHeight)));
                                            xPos += list[groupID].GroupIconWidth + list[groupID].GroupIconMargin;
                                        }
                                        list  = list.Take(TacticalGroupsSettings.GroupRowCount).ToList();
                                        num7 += list.Sum(x => x.GroupIconWidth + x.GroupIconMargin);
                                    }
                                }
                            }
                        }
                    }
                    if (entries[j].colonyGroup != null)
                    {
                        if (entries[j].colonyGroup?.Map == Find.CurrentMap)
                        {
                            createGroupRect     = new Rect(num7, TacticalGroupsSettings.ColonistBarPositionY, Textures.CreateGroupIcon.width, Textures.CreateGroupIcon.height);
                            num7               += Textures.CreateGroupIcon.width + 20f;
                            createGroupAssigned = true;
                        }
                    }
                    else if (!createGroupAssigned)
                    {
                        createGroupRect = new Rect(num7, TacticalGroupsSettings.ColonistBarPositionY, Textures.CreateGroupIcon.width, Textures.CreateGroupIcon.height);
                        num7           += Textures.CreateGroupIcon.width + 20f;
                    }
                    num6 = 0;
                    num5 = entries[j].group;
                }
                else
                {
                    num6++;
                }
                Vector2 drawLoc = GetDrawLoc(num7, TacticalGroupsSettings.ColonistBarPositionY, entries[j].group, num6, scale);
                outDrawLocs.Add(new Rect(drawLoc.x, drawLoc.y, TacticUtils.TacticalColonistBar.Size.x, TacticUtils.TacticalColonistBar.Size.y));
            }
        }