Exemplo n.º 1
0
        public static Vector2 CardSize(CompToggleDef compToggleDef)
        {
            var width    = InspectPaneUtility.PaneWidthFor((MainTabWindow_Inspect)MainButtonDefOf.Inspect.TabWindow);
            var rowCount = Math.Min(compToggleDef.Props.toggleDefs.Count, MaxRows);

            return(new Vector2(width, TotalRowHeight(rowCount) + CardPadding * 2 + ExtraTopPadding));
        }
        // RimWorld.CharacterCardUtility
        public static void DrawCard(Rect rect, ThingWithComps selectedThing)
        {
            GUI.BeginGroup(rect);

            CompToggleDef compToggleDef = selectedThing.GetComp <CompToggleDef>();

            if (compToggleDef != null)
            {
                float ts    = Text.CalcSize(selectedThing.LabelCap).x;
                float y     = rect.y;
                Rect  rect2 = new Rect(((rect.width / 2) - ts) + SpacingOffset, y, rect.width, HeaderSize);
                y        += (float)rect2.height;
                Text.Font = GameFont.Medium;
                Widgets.Label(rect2, selectedThing.LabelCap);
                Text.Font = GameFont.Small;
                Widgets.ListSeparator(ref y, rect2.width, "Select one of the following:");

                // add all the buttons for the toggle defs
                foreach (ThingDef td in compToggleDef.toggleDefs)
                {
                    Rect rect3    = new Rect(0f, y, rect.width, 20f);
                    bool isactive = false;
                    if (selectedThing.def == td)
                    {
                        isactive = true;
                    }
                    if (Widgets.RadioButtonLabeled(rect3, td.LabelCap, isactive))
                    {
                        //Log.Message(".. change location to "+td.LabelCap);

                        // CHange def then give it a new id. Hopefully nothing index on the id
                        Map     map = selectedThing.Map;
                        IntVec3 loc = selectedThing.Position;
                        Rot4    rot = selectedThing.Rotation;
                        selectedThing.DeSpawn();
                        selectedThing.def           = td;
                        selectedThing.thingIDNumber = -1;
                        ThingIDMaker.GiveIDTo(selectedThing); // necessary
                        GenSpawn.Spawn(selectedThing, loc, map, rot);
                        break;
                    }
                    y += 25f;
                }
            }

            GUI.EndGroup();
        }
Exemplo n.º 3
0
        protected override void FillTab()
        {
            ThingWithComps selected = Find.Selector.SingleSelectedThing as ThingWithComps;
            CompToggleDef  td       = selected.GetComp <CompToggleDef>();

            if (td == null)
            {
                Log.Warning("selected thing has no CompToggleDef for ITab_ToggleDef");
            }
            this.labelKey = ((CompProperties_ToggleDef)td.props).labelKey;//"UM_TabToggleDef";//.Translate();
            if (this.labelKey == null)
            {
                this.labelKey = "TOGGLEDEF";
            }
            Rect rect = new Rect(17f, 17f, ToggleDefCardUtility.CardSize.x, ToggleDefCardUtility.CardSize.y);

            ToggleDefCardUtility.DrawCard(rect, selected);
        }
Exemplo n.º 4
0
        public static void DrawCard(Vector2 size, CompToggleDef compToggleDef)
        {
            var selectedThing = compToggleDef.parent;
            var toggleDefs    = compToggleDef.Props.toggleDefs;

            var rect = new Rect(0f, ExtraTopPadding, size.x, size.y - ExtraTopPadding).ContractedBy(CardPadding);

            var rowCount = toggleDefs.Count;
            var yMin     = -RowHeight;
            var yMax     = rect.height;

            if (rowCount > MaxRows)
            {
                if (lastSelectedThing != selectedThing)
                {
                    lastSelectedThing = selectedThing;
                    scrollPosition.y  = toggleDefs.IndexOf(selectedThing.def) * (RowHeight + RowGap);
                }
                var viewRect = new Rect(0f, 0f, rect.width - GenUI.ScrollBarWidth - CardPadding, TotalRowHeight(rowCount));
                Widgets.BeginScrollView(rect, ref scrollPosition, viewRect);
                rect.width = viewRect.width;
                yMin      += scrollPosition.y;
                yMax      += scrollPosition.y;
            }
            else
            {
                GUI.BeginGroup(rect);
            }

            // Add the rows for each toggle def.
            var y = 0f;

            foreach (var toggleDef in toggleDefs)
            {
                if (y > yMax)
                {
                    break;
                }
                if (y >= yMin)
                {
                    var rowRect          = new Rect(0f, y, rect.width, RowHeight);
                    var iconAndLabelRect = rowRect.LeftPartPixels(rowRect.width - (Widgets.RadioButtonSize + DefLabelOffsetX));
                    Widgets.DefLabelWithIcon(iconAndLabelRect, toggleDef, DefIconMargin, DefLabelOffsetX);
                    var iconRect = new Rect(DefIconMargin, y + DefIconMargin, DefIconSize, DefIconSize);
                    if (Widgets.ButtonInvisible(iconRect))
                    {
                        Find.WindowStack.Add(new Dialog_InfoCard(toggleDef));
                    }
                    var isSelected = selectedThing.def == toggleDef;
                    RadioButtonDraw(rowRect.width - Widgets.RadioButtonSize, y, isSelected);
                    if (!isSelected && Widgets.ButtonInvisible(rowRect.RightPartPixels(rowRect.width - iconRect.xMax - DefLabelOffsetX)))
                    {
                        SwapThing(selectedThing, toggleDef);
                        break;
                    }
                }
                y += RowHeight + RowGap;
            }

            if (rowCount > MaxRows)
            {
                Widgets.EndScrollView();
            }
            else
            {
                GUI.EndGroup();
            }
        }