Пример #1
0
            public override InteractionInstance CreateInstance(ref InteractionInstanceParameters parameters)
            {
                InteractionInstance na = new HotAirBalloonSit();

                na.Init(ref parameters);
                return(na);
            }
Пример #2
0
            public PushWooHooOrTryForBaby(HotairBalloon obj, Sim actor, Sim target, bool autonomous, bool pushGetIn, InteractionDefinition definition)
            {
                mObject     = obj;
                mActor      = actor;
                mTarget     = target;
                mDefinition = definition;
                mAutonomous = autonomous;

                if (pushGetIn)
                {
                    HotAirBalloonSit entry = mActor.CurrentInteraction as HotAirBalloonSit;
                    if ((entry == null) || (entry.Target != mObject))
                    {
                        entry = HotAirBalloonSit.Singleton.CreateInstanceWithCallbacks(mObject, mActor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, OnActorCompleted, null) as HotAirBalloonSit;
                        if (!mActor.InteractionQueue.Add(entry))
                        {
                            return;
                        }
                    }

                    entry.mIsMaster = true;

                    HotAirBalloonSit instance = mTarget.CurrentInteraction as HotAirBalloonSit;
                    if ((instance == null) || (instance.Target != mObject))
                    {
                        instance = HotAirBalloonSit.Singleton.CreateInstanceWithCallbacks(mObject, mTarget, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, OnCompleted, null) as HotAirBalloonSit;
                        if (!mTarget.InteractionQueue.Add(instance))
                        {
                            mTargetFail = true;
                            return;
                        }
                    }

                    instance.mIsMaster = false;
                    instance.LinkedInteractionInstance = entry;
                }
                else
                {
                    OnCompleted(mActor, 1);
                }
            }
Пример #3
0
 public override InteractionInstance CreateInstance(ref InteractionInstanceParameters parameters)
 {
     InteractionInstance na = new HotAirBalloonSit();
     na.Init(ref parameters);
     return na;
 }
Пример #4
0
        public override bool Run()
        {
            try
            {
                Sim linkedActor = GetSelectedObject() as Sim;
                if (linkedActor == Actor)
                {
                    linkedActor = null;
                }

                if (linkedActor != null)
                {
                    HotAirBalloonSit entry = Singleton.CreateInstance(Target, linkedActor, GetPriority(), Autonomous, CancellableByPlayer) as HotAirBalloonSit;
                    entry.LinkedInteractionInstance = this;
                    linkedActor.InteractionQueue.Add(entry);
                }

                HotAirBalloonSit linked = LinkedInteractionInstance as HotAirBalloonSit;
                if (linked != null)
                {
                    linkedActor = linked.Actor;
                }

                bool isXActor = Target.mLeftActorId == 0x0L;
                if (!isXActor && (Target.mRightActorId != 0x0L))
                {
                    return(false);
                }

                if (isXActor)
                {
                    Target.mLeftActorId = Actor.SimDescription.SimDescriptionId;
                }
                else
                {
                    Target.mRightActorId = Actor.SimDescription.SimDescriptionId;
                }

                Route r = Actor.CreateRoute();

                if (linkedActor != null)
                {
                    r.AddObjectToIgnoreForRoute(linkedActor.ObjectId);
                }

                if (!r.PlanToSlot(Target, Slot.RoutingSlot_7).Succeeded())
                {
                    if (isXActor)
                    {
                        Target.mLeftActorId = 0x0L;
                    }
                    else
                    {
                        Target.mRightActorId = 0x0L;
                    }
                    return(false);
                }

                if ((Target.mTargetHeight != HotairBalloon.BalloonHeight.OnGround) || (Target.mCurrentHeight != HotairBalloon.BalloonHeight.OnGround))
                {
                    Actor.PlayRouteFailure();

                    if (isXActor)
                    {
                        Target.mLeftActorId = 0x0L;
                    }
                    else
                    {
                        Target.mRightActorId = 0x0L;
                    }
                    return(false);
                }

                r = Actor.CreateRoute();
                if (linkedActor != null)
                {
                    r.AddObjectToIgnoreForRoute(linkedActor.ObjectId);
                }

                r.AddObjectToIgnoreForRoute(Target.ObjectId);
                if (!r.PlanToSlot(Target, isXActor ? Slot.RoutingSlot_5 : Slot.RoutingSlot_2).Succeeded())
                {
                    Target.ResetParentingHierarchy(true);
                    r.PlanToSlot(Target, isXActor ? Slot.RoutingSlot_5 : Slot.RoutingSlot_2);
                }

                if (!Actor.DoRoute(r))
                {
                    if (isXActor)
                    {
                        Target.mLeftActorId = 0x0L;
                    }
                    else
                    {
                        Target.mRightActorId = 0x0L;
                    }
                    return(false);
                }

                StandardEntry();
                BeginCommodityUpdates();
                Animation.ForceAnimation(Actor.ObjectId, true);
                if (Target.mFlyStateMachine == null)
                {
                    Target.mFlyStateMachine = StateMachineClient.Acquire(Target, "hotairballoon_store", AnimationPriority.kAPDefault);
                    Target.mFlyStateMachine.SetActor("hotairBalloonX", Target);
                    Target.mFlyStateMachine.EnterState("hotairBalloonX", "BalloonLiftOff");
                }

                AcquireStateMachine("hotairballoon_store");
                mCurrentStateMachine.SetActor("x", Actor);
                mCurrentStateMachine.SetActor("hotairBalloonX", Target);
                mCurrentStateMachine.SetParameter("XSimR", isXActor ? YesOrNo.no : YesOrNo.yes);
                mCurrentStateMachine.EnterState("x", "EnterBalloon");
                Slot  slotName = isXActor ? ((Slot)(0xa820f8a5)) : ((Slot)(0xa820f8a2));
                float f        = (float)Math.Acos((double)(Target.ForwardVector * Actor.ForwardVector));
                if (float.IsNaN(f))
                {
                    f = 3.141593f;
                }

                Actor.ParentToSlot(Target, slotName, f, false);
                mCurrentStateMachine.RequestState("x", "IdleStand");
                EndCommodityUpdates(true);

                HotairBalloon.InBalloonPosture posture = new HotairBalloon.InBalloonPosture(Actor, Target, isXActor, mCurrentStateMachine);
                Actor.Posture = posture;

                if ((Autonomous) && (RandomUtil.RandomChance(HotairBalloon.kChanceToCallOverRomanticInterest)))
                {
                    Sim actor = Target.FindRomanticSimToRideWith(Actor);
                    if ((actor != null) && !actor.InteractionQueue.HasInteractionOfType(Singleton))
                    {
                        InteractionInstance entry = Singleton.CreateInstance(Target, actor, new InteractionPriority(InteractionPriorityLevel.Autonomous), true, true);
                        actor.InteractionQueue.Add(entry);
                        mCurrentStateMachine.RequestState("x", "CallOver");
                        mCurrentStateMachine.RequestState("x", "IdleStand");
                        mCurrentStateMachine.RequestState("x", "CallOver");
                        mCurrentStateMachine.RequestState("x", "IdleStand");
                    }
                }

                StandardExit();
                return(true);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }