public static bool FillTabVehicleCaravan(ITab_Pawn_FormingCaravan __instance, ref List <Thing> ___thingsToSelect, Vector2 ___size, ref float ___lastDrawnHeight, ref Vector2 ___scrollPosition, ref List <Thing> ___tmpSingleThing) { if ((Find.Selector.SingleSelectedThing as Pawn).GetLord().LordJob is LordJob_FormAndSendVehicles) { ___thingsToSelect.Clear(); Rect outRect = new Rect(default, ___size).ContractedBy(10f);
static void Prefix(ITab_Pawn_FormingCaravan __instance) { // Make caravan tab slightly bigger to account for the new buttons if (patched) { return; } var sizeMethod = __instance.GetType().GetField("size", BindingFlags.NonPublic | BindingFlags.Instance); var size = sizeMethod.GetValue(__instance) as Vector2?; if (size.HasValue && size.Value.x <= 500) { sizeMethod.SetValue(__instance, new Vector2(size.Value.x + 50, size.Value.y)); } patched = true; }
protected override void FillTab() { this.thingsToSelect.Clear(); Rect outRect = new Rect(default(Vector2), this.size).ContractedBy(10f); outRect.yMin += 20f; Rect rect = new Rect(0f, 0f, outRect.width - 16f, Mathf.Max(this.lastDrawnHeight, outRect.height)); Widgets.BeginScrollView(outRect, ref this.scrollPosition, rect, true); float num = 0f; this.DoItemsLists(rect, ref num); this.lastDrawnHeight = num; Widgets.EndScrollView(); if (this.thingsToSelect.Any <Thing>()) { ITab_Pawn_FormingCaravan.SelectNow(this.thingsToSelect); this.thingsToSelect.Clear(); } }
/// <summary> /// Draw items in VehicleCaravan that is currently being formed /// </summary> /// <param name="inRect"></param> /// <param name="curY"></param> /// <param name="tmpSingleThing"></param> /// <param name="instance"></param> public static void DoItemsListForVehicle(Rect inRect, ref float curY, ref List <Thing> tmpSingleThing, ITab_Pawn_FormingCaravan instance) { LordJob_FormAndSendVehicles lordJob_FormAndSendCaravanVehicle = (LordJob_FormAndSendVehicles)(Find.Selector.SingleSelectedThing as Pawn).GetLord().LordJob; Rect position = new Rect(0f, curY, (inRect.width - 10f) / 2f, inRect.height); float a = 0f; GUI.BeginGroup(position); Widgets.ListSeparator(ref a, position.width, "ItemsToLoad".Translate()); bool flag = false; foreach (TransferableOneWay transferableOneWay in lordJob_FormAndSendCaravanVehicle.transferables) { if (transferableOneWay.CountToTransfer > 0 && transferableOneWay.HasAnyThing) { flag = true; MethodInfo doThingRow = AccessTools.Method(type: typeof(ITab_Pawn_FormingCaravan), name: "DoThingRow"); object[] args = new object[] { transferableOneWay.ThingDef, transferableOneWay.CountToTransfer, transferableOneWay.things, position.width, a }; doThingRow.Invoke(instance, args); a = (float)args[4]; } } if (!flag) { Widgets.NoneLabel(ref a, position.width, null); } GUI.EndGroup(); Rect position2 = new Rect((inRect.width + 10f) / 2f, curY, (inRect.width - 10f) / 2f, inRect.height); float b = 0f; GUI.BeginGroup(position2); Widgets.ListSeparator(ref b, position2.width, "LoadedItems".Translate()); bool flag2 = false; foreach (Pawn pawn in lordJob_FormAndSendCaravanVehicle.lord.ownedPawns) { if (!pawn.inventory.UnloadEverything) { foreach (Thing thing in pawn.inventory.innerContainer) { flag2 = true; tmpSingleThing.Clear(); tmpSingleThing.Add(thing); MethodInfo doThingRow = AccessTools.Method(type: typeof(ITab_Pawn_FormingCaravan), name: "DoThingRow"); object[] args = new object[] { thing.def, thing.stackCount, tmpSingleThing, position2.width, b }; doThingRow.Invoke(instance, args); b = (float)args[4]; } } } if (!flag2) { Widgets.NoneLabel(ref b, position.width, null); } GUI.EndGroup(); curY += Mathf.Max(a, b); }