public override InteractionInstance CreateInstance(ref InteractionInstanceParameters parameters) { InteractionInstance na = new HotAirBalloonSit(); na.Init(ref parameters); return(na); }
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); } }
public override InteractionInstance CreateInstance(ref InteractionInstanceParameters parameters) { InteractionInstance na = new HotAirBalloonSit(); na.Init(ref parameters); return na; }
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); } }