コード例 #1
0
        public void ColonistBarOnGUI()
        {
            if (!Visible)
            {
                return;
            }
            if (Event.current.type != EventType.Layout)
            {
                List <Entry> entries          = Entries;
                int          num              = -1;
                bool         showGroupFrames  = ShowGroupFrames;
                int          reorderableGroup = -1;
                GUI.color = Color.white;
                Text.Font = GameFont.Tiny;

                var createGroupRect = ColonistBarDrawLocsFinder.createGroupRect;
                if (Mouse.IsOver(createGroupRect))
                {
                    GUI.DrawTexture(createGroupRect, Textures.CreateGroupIconHover);
                    TooltipHandler.TipRegion(createGroupRect, Strings.CreateGroupTooltip);
                }
                else if (!TacticalGroupsSettings.HideCreateGroup)
                {
                    GUI.DrawTexture(createGroupRect, Textures.CreateGroupIcon);
                }

                HandleGroupingClicks(createGroupRect);
                Rect optionsGearRect = new Rect(createGroupRect.x + (createGroupRect.width / 3f), createGroupRect.y + createGroupRect.height + 5, Textures.OptionsGear.width, Textures.OptionsGear.height);
                if (Mouse.IsOver(optionsGearRect))
                {
                    GUI.DrawTexture(optionsGearRect, Textures.OptionsGearHover);
                    if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
                    {
                        TieredFloatMenu floatMenu = new OptionsMenu(null, null, optionsGearRect, Textures.OptionsMenu);
                        Find.WindowStack.Add(floatMenu);
                    }
                    TooltipHandler.TipRegion(optionsGearRect, Strings.OptionsGearTooltip);
                }
                else if (!TacticalGroupsSettings.HideCreateGroup)
                {
                    GUI.DrawTexture(optionsGearRect, Textures.OptionsGear);
                }
                for (var i = 0; i < ColonistBarDrawLocsFinder.pawnGroupDrawLoc.Count; i++)
                {
                    ColonistBarDrawLocsFinder.pawnGroupDrawLoc[i].colonistGroup.Draw(ColonistBarDrawLocsFinder.pawnGroupDrawLoc[i].rect);
                }
                for (var i = 0; i < ColonistBarDrawLocsFinder.colonyGroupDrawLoc.Count; i++)
                {
                    ColonistBarDrawLocsFinder.colonyGroupDrawLoc[i].colonistGroup.Draw(ColonistBarDrawLocsFinder.colonyGroupDrawLoc[i].rect);
                }
                for (var i = 0; i < ColonistBarDrawLocsFinder.caravanGroupDrawLoc.Count; i++)
                {
                    ColonistBarDrawLocsFinder.caravanGroupDrawLoc[i].colonistGroup.Draw(ColonistBarDrawLocsFinder.caravanGroupDrawLoc[i].rect);
                }

                for (var i = 0; i < ColonistBarDrawLocsFinder.pawnGroupDrawLoc.Count; i++)
                {
                    ColonistBarDrawLocsFinder.pawnGroupDrawLoc[i].colonistGroup.DrawOverlays(ColonistBarDrawLocsFinder.pawnGroupDrawLoc[i].rect);
                }

                for (var i = 0; i < ColonistBarDrawLocsFinder.colonyGroupDrawLoc.Count; i++)
                {
                    ColonistBarDrawLocsFinder.colonyGroupDrawLoc[i].colonistGroup.DrawOverlays(ColonistBarDrawLocsFinder.colonyGroupDrawLoc[i].rect);
                }

                for (var i = 0; i < ColonistBarDrawLocsFinder.caravanGroupDrawLoc.Count; i++)
                {
                    ColonistBarDrawLocsFinder.caravanGroupDrawLoc[i].colonistGroup.DrawOverlays(ColonistBarDrawLocsFinder.caravanGroupDrawLoc[i].rect);
                }

                for (int i = 0; i < cachedDrawLocs.Count; i++)
                {
                    Entry entry = entries[i];
                    bool  flag  = num != entry.group;
                    num = entry.group;
                    if (flag)
                    {
                        reorderableGroup = ReorderableWidget.NewGroup(entry.reorderAction, ReorderableDirection.Horizontal, SpaceBetweenColonistsHorizontal, entry.extraDraggedItemOnGUI);
                    }
                    bool reordering;
                    if (entry.pawn != null)
                    {
                        drawer.HandleClicks(cachedDrawLocs[i], entry.pawn, reorderableGroup, out reordering);
                    }
                    else
                    {
                        reordering = false;
                    }
                    if (Event.current.type != EventType.Repaint)
                    {
                        continue;
                    }
                    if (flag && showGroupFrames)
                    {
                        drawer.DrawGroupFrame(entry.group);
                    }
                    if (entry.pawn != null)
                    {
                        drawer.DrawColonist(cachedDrawLocs[i], entry.pawn, entry.map, colonistsToHighlight.Contains(entry.pawn), reordering);
                        Faction faction = entry.pawn.GetExtraMiniFaction();
                        if (faction == null)
                        {
                            faction = entry.pawn.GetExtraHomeFaction();
                        }
                        if (faction != null)
                        {
                            GUI.color = faction.Color;
                            float num2 = cachedDrawLocs[i].width * 0.5f;
                            GUI.DrawTexture(new Rect(cachedDrawLocs[i].xMax - num2 - 2f, cachedDrawLocs[i].yMax - num2 - 2f, num2, num2), faction.def.FactionIcon);
                            GUI.color = Color.white;
                        }
                    }
                }
                num = -1;
                if (showGroupFrames)
                {
                    for (int j = 0; j < cachedDrawLocs.Count; j++)
                    {
                        Entry entry2 = entries[j];
                        bool  num3   = num != entry2.group;
                        num = entry2.group;
                        if (num3)
                        {
                            drawer.HandleGroupFrameClicks(entry2.group);
                        }
                    }
                }
            }
            if (Event.current.type == EventType.Repaint)
            {
                colonistsToHighlight.Clear();
            }

            if (Find.TickManager.TicksGame % 1000 == 0)
            {
                foreach (var group in TacticUtils.AllGroups)
                {
                    group.Sort();
                }
            }
        }