private static void SwapThing(ThingWithComps thing, ThingDef newDef) { var map = thing.Map; var loc = thing.Position; var rot = thing.Rotation; var eqTracker = thing.ParentHolder as Pawn_EquipmentTracker; if (eqTracker != null) { eqTracker.Remove(thing); } else { thing.DeSpawn(); } thing.def = newDef; // Refresh verbs. foreach (var comp in thing.AllComps) { if (comp is IVerbOwner verbOwner && verbOwner.VerbTracker is VerbTracker verbTracker) { VerbsNeedReinitOnLoad(verbTracker); _ = verbTracker.AllVerbs; } } // Refresh graphics. thing.Notify_ColorChanged(); if (eqTracker != null) { eqTracker.AddEquipment(thing); } else if (GenSpawn.Spawn(thing, loc, map, rot) != null) { Find.Selector.Select(thing, playSound: false); } }