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(); }
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); }
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(); } }