private void DrawListEntry(Rect entryRect, AIPackageDef p, ref AIPackageDef selPackage, ref AIPackageDef unselPackage, bool alternate) { if (IsSelected(p)) { Widgets.DrawHighlightSelected(entryRect); if (Mouse.IsOver(entryRect)) TooltipHandler.TipRegion(entryRect, p.Tooltip); } else if (Mouse.IsOver(entryRect)) { Widgets.DrawHighlight(entryRect); TooltipHandler.TipRegion(entryRect, p.Tooltip); } else if (alternate) Widgets.DrawAltRect(entryRect); Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(entryRect, $" {p.LabelCap}"); Text.Anchor = TextAnchor.UpperLeft; if (Widgets.ButtonInvisible(entryRect)) { selPackage = p; unselPackage = null; } }
private static void DrawAIEntry(Rect entryRect, AIPackageDef p, bool alternate) { if (Mouse.IsOver(entryRect)) { Widgets.DrawHighlight(entryRect); TooltipHandler.TipRegion(entryRect, p.Tooltip); } else if (alternate) { Widgets.DrawAltRect(entryRect); } Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(entryRect, $" {p.LabelCap}"); Text.Anchor = TextAnchor.UpperLeft; }
public override void DoWindowContents(Rect inRect) { try { GUI.BeginGroup(inRect); Rect titleRect = new Rect(0f, 0f, inRect.width, TitleBarHeight); Text.Anchor = TextAnchor.MiddleCenter; Text.Font = GameFont.Medium; Widgets.Label(titleRect, "AI Packages"); Text.Anchor = TextAnchor.UpperLeft; Text.Font = GameFont.Small; Rect availableRect = new Rect(0f, titleRect.yMax + VerticalMargin, ListViewSize.x, inRect.height - titleRect.yMax - AcceptButtonSize.y - VerticalMargin * 2); Widgets.DrawBoxSolid(availableRect, BoxColor); DrawList(availableRect, AvailablePackagesForDesign, availableScrollPos, ref selAvailable, ref selDesign, true); Rect chosenRect = new Rect(inRect.width - ListViewSize.x, availableRect.y, ListViewSize.x, availableRect.height); Widgets.DrawBoxSolid(chosenRect, BoxColor); DrawList(chosenRect, PackagesTemp, designScrollPos, ref selDesign, ref selAvailable, false); float butX = availableRect.xMax + ((chosenRect.x - availableRect.xMax) / 2) - ListButtonSize.x / 2; Rect addButtonRect = new Rect(butX, availableRect.center.y - VerticalMargin - ListButtonSize.y, ListButtonSize.x, ListButtonSize.y); if (Widgets.ButtonText(addButtonRect, "->")) { if (selAvailable != null) { availableTemp.Remove(selAvailable); packagesTemp.Add(selAvailable); selDesign = selAvailable; selAvailable = null; } } Rect removeButtonRect = new Rect(addButtonRect.x, availableRect.center.y + VerticalMargin, ListButtonSize.x, ListButtonSize.y); if (Widgets.ButtonText(removeButtonRect, "<-")) { if (selDesign != null) { packagesTemp.Remove(selDesign); availableTemp.Add(selDesign); selAvailable = selDesign; selDesign = null; } } Rect cancelButtonRect = new Rect(0f, inRect.height - AcceptButtonSize.y, AcceptButtonSize.x, AcceptButtonSize.y); if (Widgets.ButtonText(cancelButtonRect, "Cancel")) { Find.WindowStack.TryRemove(this); } Rect acceptButtonRect = new Rect(inRect.width - AcceptButtonSize.x, cancelButtonRect.y, AcceptButtonSize.x, AcceptButtonSize.y); if (Widgets.ButtonText(acceptButtonRect, "Accept")) { design.AIPackages.Clear(); design.AIPackages.AddRange(packagesTemp); BlueprintUIUtil.StatDummy(design).InitialiseFromBlueprint(); RimWorld.StatsReportUtility.Reset(); Find.WindowStack.TryRemove(this); } } finally { GUI.EndGroup(); } }
private bool IsSelected(AIPackageDef d) { return selAvailable == d || selDesign == d; }
private void DrawList(Rect rect, List<AIPackageDef> packages, Vector2 scrollPos, ref AIPackageDef selPackage, ref AIPackageDef unselPackage, bool reportNoPackages) { if (packages.Count > 0) { try { GUI.BeginGroup(rect); Rect outRect = new Rect(0f, 0f, rect.width, rect.width); float height = packages.Count * EntryHeight; Rect viewRect = new Rect(0f, 0f, outRect.width - 16f, height); float curY = 0f; bool alternate = false; Widgets.BeginScrollView(outRect, ref scrollPos, viewRect); foreach (var p in packages) { Rect entryRect = new Rect(0f, curY, viewRect.width, EntryHeight); DrawListEntry(entryRect, p, ref selPackage, ref unselPackage, alternate); alternate = !alternate; curY += EntryHeight; } Widgets.EndScrollView(); } finally { GUI.EndGroup(); } } else if (reportNoPackages) { Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(rect, "No AI packages found"); Text.Anchor = TextAnchor.UpperLeft; } }
public void AddAIPackage(AIPackageDef package) { aiPackages.Add(package); }