//public override void Destroy(DestroyMode mode = DestroyMode.Vanish)
 public static void Prefix(Frame __instance, DestroyMode mode)
 {
     if (mode != DestroyMode.Vanish && mode != DestroyMode.FailConstruction && mode != DestroyMode.KillFinalize)
     {
         DestroyedBuildings.RemoveAt(__instance.Position, __instance.Map);
     }
 }
 //public override void DeSpawn(DestroyMode mode = DestroyMode.Vanish)
 public static void Prefix(Blueprint __instance, DestroyMode mode)
 {
     if (mode != DestroyMode.Vanish)
     {
         DestroyedBuildings.RemoveAt(__instance.Position, __instance.Map);
     }
 }
        //public static Thing Spawn(Thing newThing, IntVec3 loc, Map map, Rot4 rot, WipeMode wipeMode = WipeMode.Vanish, bool respawningAfterLoad = false)
        public static Thing CheckForRevival(Thing newThing, IntVec3 loc, Map map, Rot4 rot, WipeMode wipeMode = WipeMode.Vanish, bool respawningAfterLoad = false)
        {
            Thing thing = GenSpawn.Spawn(newThing, loc, map, rot, wipeMode, respawningAfterLoad);

            DestroyedBuildings.ReviveBuilding(thing, loc, map);                 //After spawn so SpawnSetup is called, comps created.
            return(thing);
        }
        public static void RemoveAt(IntVec3 pos, Map map)
        {
            DestroyedBuildings comp = map.GetComponent <DestroyedBuildings>();

            if (comp.destroyedBuildings.TryGetValue(pos, out Thing building))
            {
                Log.Message($"Forgetting destroyed: {building}");
                //Probably should set building.mapIndexOrState to -2
                comp.destroyedBuildings.Remove(pos);
            }
        }
        public static void SaveBuilding(Thing thing, Map map)
        {
            if (!BuildingReviver.CanDo(thing))
            {
                return;
            }

            DestroyedBuildings comp = map.GetComponent <DestroyedBuildings>();

            Log.Message($"Saving {thing} to {map}:{thing.Position}");
            comp.destroyedBuildings[thing.Position] = thing;
        }
        public static void ReviveBuilding(Thing newBuilding, IntVec3 pos, Map map)
        {
            DestroyedBuildings comp = map.GetComponent <DestroyedBuildings>();

            if (comp.destroyedBuildings.TryGetValue(pos, out Thing building))
            {
                Log.Message($"got {building}");

                BuildingReviver.Transfer(building, newBuilding);

                comp.destroyedBuildings.Remove(pos);
            }
        }