public override bool Run()
            {
                if (this.CheckForCancelAndCleanup())
                {
                    return(false);
                }

                Microwave microwave = GlobalFunctions.GetClosestObject <Microwave>(Actor, false, true, null, null);

                if (microwave == null)
                {
                    return(false);
                }
                if (Target.Parent == Actor)
                {
                    if (microwave.RouteToMicrowave(this))
                    {
                        string actorNameForMicrowave = (Target as IMicrowavable).ActorNameForMicrowave;
                        microwave.AddToUseList(Actor);
                        try
                        {
                            microwave.SimStateMachineClient.SetActor(actorNameForMicrowave, Target);
                            microwave.SimStateMachineClient.SetActor("x", Actor);
                            microwave.SimStateMachineClient.AddOneShotScriptEventHandler(1001u, new SacsEventHandler(microwave.StartLoopSoundCallback));
                            microwave.SimStateMachineClient.EnterState("x", "Enter - Holding " + actorNameForMicrowave);
                            microwave.SimStateMachineClient.RequestState("x", "Start Microwave");
                            microwave.MicrowaveSelfStateMachineClient.EnterState("Microwave", "Enter");
                            microwave.MicrowaveSelfStateMachineClient.RequestState("Microwave", "Loop - Cook");
                            microwave.On = true;
                            microwave.AddCookingAlarm((Target as IPartOfCookingProcess).CookingProcess.CookTimeLeftMinutes / microwave.CookTimeSpeedMultiplier);
                            microwave.SimStateMachineClient.RequestState("x", "Exit - Hands Empty");
                        }
                        finally
                        {
                            microwave.RemoveFromUseList(Actor);
                        }
                        if (Actor.HasExitReason(ExitReason.Canceled))
                        {
                            return(false);
                        }
                        Actor.InteractionQueue.PushAsContinuation(TakeBloodFromMicrowave.Singleton, microwave, true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }

                return(true);
            }