public void CancelStartup()
        {
            Messages.Message("WTH_Message_MechanoidBeacon_Cancelled".Translate(), new RimWorld.Planet.GlobalTargetInfo(this.Position, this.Map), MessageTypeDefOf.NegativeEvent);
            CompHibernatable_MechanoidBeacon compHibernatable = this.TryGetComp <CompHibernatable_MechanoidBeacon>();

            compHibernatable.State = HibernatableStateDefOf.Hibernating;
        }
        public void StartupHibernatingParts()
        {
            CompHibernatable_MechanoidBeacon compHibernatable = this.TryGetComp <CompHibernatable_MechanoidBeacon>();

            if (compHibernatable != null && compHibernatable.State == HibernatableStateDefOf.Hibernating)
            {
                compHibernatable.Startup();
            }
        }
        public IEnumerable <Gizmo> StartupGizmos()
        {
            bool   isDisabled       = false;
            string disabledReason   = "";
            bool   rogueAIAvailable = false;

            if (GetComp <CompHibernatable_MechanoidBeacon>().coolDownTicks > 0)
            {
                isDisabled     = true;
                disabledReason = "WTH_CompHibernatable_MechanoidBeacon_Cooldown".Translate(((GetComp <CompHibernatable_MechanoidBeacon>().coolDownTicks / (float)GenDate.TicksPerDay)).ToStringDecimalIfSmall());
            }
            foreach (ThingWithComps thing in this.Map.listerThings.AllThings.OfType <ThingWithComps>())
            {
                if (thing.def == WTH_DefOf.WTH_RogueAI)
                {
                    rogueAIAvailable = true;
                }
                if (thing.TryGetComp <CompHibernatable_MechanoidBeacon>() is CompHibernatable_MechanoidBeacon comp && comp.State == HibernatableStateDefOf.Starting)
                {
                    if (thing.def == ThingDefOf.Ship_Reactor)
                    {
                        isDisabled     = true;
                        disabledReason = "WTH_Reason_ReactorWarmingUp".Translate();
                    }

                    if (thing.def == WTH_DefOf.WTH_MechanoidBeacon)
                    {
                        isDisabled     = true;
                        disabledReason = "WTH_Reason_BeaconActive".Translate();
                    }
                }
            }
            if (!rogueAIAvailable)
            {
                isDisabled     = true;
                disabledReason = "WTH_Reason_NoRogueAI".Translate();
            }
            if (!GetComp <CompPowerTrader>().PowerOn)
            {
                isDisabled     = true;
                disabledReason = "WTH_Reason_NoPower".Translate();
            }


            yield return(new Command_Action
            {
                action = delegate
                {
                    CompHibernatable_MechanoidBeacon comp = GetComp <CompHibernatable_MechanoidBeacon>();
                    float numDays = comp.Props.startupDays + comp.extraStartUpDays;
                    DiaNode diaNode = new DiaNode("WTH_BeaconWarmupWarning".Translate(numDays.ToStringDecimalIfSmall()));
                    DiaOption diaOption = new DiaOption("Confirm".Translate());
                    diaOption.action = delegate
                    {
                        StartupHibernatingParts();
                    };
                    diaOption.resolveTree = true;
                    diaNode.options.Add(diaOption);
                    DiaOption diaOption2 = new DiaOption("GoBack".Translate());
                    diaOption2.resolveTree = true;
                    diaNode.options.Add(diaOption2);
                    Find.WindowStack.Add(new Dialog_NodeTree(diaNode, true, false, null));
                },
                disabled = isDisabled,
                disabledReason = disabledReason,
                defaultLabel = "WTH_MechanoidBeaconStartup_Label".Translate(),
                defaultDesc = "WTH_MechanoidBeaconStartup_Description".Translate(),
                hotKey = KeyBindingDefOf.Misc1,
                icon = ContentFinder <Texture2D> .Get("UI/Commands/DesirePower", true)
            });
        }