// ===================== Setup work =====================
        public override void SpawnSetup(Map map, bool respawningAfterLoad)
        {
            base.SpawnSetup(map, respawningAfterLoad);
            this.powerComp = base.GetComp <CompPowerTrader>();

            // Check if there is already another primary landing pad.
            if (this.Map.listerBuildings.ColonistsHaveBuilding(Util_ThingDefOf.LandingPad))
            {
                foreach (Building building in this.Map.listerBuildings.AllBuildingsColonistOfDef(Util_ThingDefOf.LandingPad))
                {
                    Building_LandingPad landingPad = building as Building_LandingPad;
                    if ((landingPad != this) &&
                        landingPad.isPrimary)
                    {
                        this.isPrimary = false;
                        break;
                    }
                }
            }
            if (this.beaconsAreSpawned == false)
            {
                SpawnBeacons();
                this.beaconsAreSpawned = true;
            }
            if (Scribe.mode == LoadSaveMode.PostLoadInit)
            {
                CheckForBlockingThing();
            }
            Util_OrbitalRelay.TryUpdateLandingPadAvailability(this.Map);
        }
 /// <summary>
 /// Notify beacons that powered is stopped.
 /// </summary>
 public void Notify_PowerStopped()
 {
     Util_OrbitalRelay.TryUpdateLandingPadAvailability(this.Map);
     foreach (Building building in this.Map.listerBuildings.AllBuildingsColonistOfDef(Util_ThingDefOf.LandingPadBeacon))
     {
         Building_LandingPadBeacon beacon = building as Building_LandingPadBeacon;
         if (beacon.landingPad == this)
         {
             beacon.Notify_PowerStopped();
         }
     }
 }
        public override void Destroy(DestroyMode mode = DestroyMode.Vanish)
        {
            Map map = this.Map;

            // Destroy all landing pad beacons.
            foreach (IntVec3 cell in this.OccupiedRect().Cells)
            {
                Thing thing = cell.GetFirstThing(this.Map, Util_ThingDefOf.LandingPadBeacon);
                if (thing != null)
                {
                    thing.Destroy();
                }
            }
            Util_OrbitalRelay.TryUpdateLandingPadAvailability(map);
            base.Destroy(mode);
        }
 public void NotifyShipTakingOff()
 {
     this.isReserved = false;
     Util_OrbitalRelay.TryUpdateLandingPadAvailability(this.Map);
 }
 // ===================== Other functions =====================
 public void NotifyShipLanding()
 {
     this.isReserved = true;
     Util_OrbitalRelay.TryUpdateLandingPadAvailability(this.Map);
 }