private void SpawnItem(RequestItem requested) { if (requested.isPawn) { for (var i = 0; i < requested.amount; ++i) { var pawn = PawnGenerator.GeneratePawn(requested.item.pawnDef, Faction.OfPlayer); pawn.gender = requested.item.gender; var spawnSpot = CellFinder.RandomSpawnCellForPawnNear(traderPawn.Position, traderPawn.Map); GenSpawn.Spawn(pawn, spawnSpot, traderPawn.Map); } } else if (requested.item.type.HasQuality()) { for (var i = 0; i < requested.amount; ++i) { var thing = ThingMaker.MakeThing(requested.item.def, requested.item.stuffDef); thing.SetRandomQualityWeighted(); if (requested.item.type == ThingType.Buildings) { var minifiedThing = thing.MakeMinified(); if (minifiedThing.Stuff != requested.item.stuffDef) { minifiedThing.SetStuffDirect(requested.item.stuffDef); } if (!GenPlace.TryPlaceThing(minifiedThing, traderPawn.Position, traderPawn.Map, ThingPlaceMode.Near)) { Log.Error("Could not spawn " + thing.LabelCap + " near trader!"); } } else { if (!GenPlace.TryPlaceThing(thing, traderPawn.Position, traderPawn.Map, ThingPlaceMode.Near)) { Log.Error("Could not spawn " + thing.LabelCap + " near trader!"); } } } } else { var thing = ThingMaker.MakeThing(requested.item.def, requested.item.stuffDef); thing.stackCount = requested.amount; if (!GenPlace.TryPlaceThing(thing, traderPawn.Position, traderPawn.Map, ThingPlaceMode.Near)) { Log.Error("Could not spawn " + thing.LabelCap + " near trader!"); } } }
private void DrawRequestedItem(Rect rowRect, RequestItem requested, int index) { float removeItemButtonSize = 24; Text.Font = GameFont.Small; var price = requested.pricePerItem * requested.amount; if (index % 2 == 1) { Widgets.DrawLightHighlight(rowRect); } GUI.BeginGroup(rowRect); // Draw item icon float x = 0; float iconSize = 27; Text.Anchor = TextAnchor.MiddleLeft; var iconArea = new Rect(x, 0, iconSize, iconSize); Widgets.ThingIcon(iconArea, requested.item.tradeable.FirstThingTrader); x += iconSize + (iconSize / 4); var itemNameArea = new Rect(x, 0, rowRect.width - offsetFromRight - x, rowRect.height); var itemTitle = requested.item.thing.LabelCapNoCount; if (requested.isPawn) { itemTitle += " (" + requested.item.GenderString() + ")"; } else if (requested.item.type.HasQuality() && itemTitle.IndexOf("(normal", StringComparison.Ordinal) != -1) { itemTitle = itemTitle.Substring(0, itemTitle.IndexOf("(normal)", StringComparison.Ordinal)); } itemTitle += " x" + requested.amount; Widgets.Label(itemNameArea, itemTitle); x = rowRect.width - offsetFromRight; Widgets.DrawLineVertical(x, 0, rowRect.height); x += 10; var itemPriceArea = new Rect(x, 0, offsetFromRight - 10 - removeItemButtonSize, rowRect.height); Widgets.Label(itemPriceArea, price.ToStringMoney("F2")); var removeItemArea = new Rect(rowRect.width - removeItemButtonSize, 0, removeItemButtonSize, removeItemButtonSize); var isBeingTraded = !requested.removed; Widgets.Checkbox(removeItemArea.position, ref isBeingTraded, removeItemButtonSize); requested.removed = !isBeingTraded; if (requested.removed) { Widgets.DrawLineHorizontal(itemNameArea.x, rowRect.height / 2, Text.CalcSize(itemTitle).x); Widgets.DrawLineHorizontal(itemPriceArea.x, rowRect.height / 2, Text.CalcSize(price.ToStringMoney("F2")).x); } GUI.color = Color.white; GUI.EndGroup(); }