示例#1
0
    // Update is called once per frame
    void Update()
    {
        transform.localPosition = new Vector3(
            0.0f,
            -(float)(TimeStats.beatCountModdable % 2),
            0.0f
            );

        if (Time.timeSinceLevelLoad < changeStartTime)
        {
            return;
        }
        currentDelay += 1;
        if (currentDelay < delay)
        {
            return;
        }
        currentDelay = 0;

        colIndex += 1;
        // int colIndex = TimeStats.beatCount;
        // if (colIndex == prevDoneCol) return;
        // prevDoneCol = colIndex;
        // if (colIndex < 0) return;
        if (colIndex >= ColContainer.childCount)
        {
            return;
        }


        // Debug.Log(allChildren[colIndex]);
        foreach (Transform floor in ColContainer.GetChild(colIndex))
        {
            DanceFloor dance = floor.GetComponent <DanceFloor>();
            floor.GetComponentInChildren <SpriteRenderer>().color = (
                ((colIndex + dance.posY) % 2 == 0)? color2 : color3
                );
        }
    }
        public override bool Run()
        {
            try
            {
                mPlayer = Target.ActorsUsingMe[0x0];
                bool       flag       = (mPlayer.Occupation is Music) && (mPlayer.Occupation.Level >= Music.GuitarBonusLevel);
                DanceFloor danceFloor = null;
                if (!MusicalInstrument.DoRouteForWatchOrDance(Actor, Target, out danceFloor))
                {
                    return(false);
                }
                mDanceFloor = danceFloor;
                if (mDanceFloor != null)
                {
                    mDanceFloor.AddToUseList(Actor);
                }
                mPlayInstance = mPlayer.CurrentInteraction as MusicalInstrument.PlayInstrument <TTarget>;
                if (mPlayInstance != null)
                {
                    if (!mPlayInstance.Performing)
                    {
                        return(false);
                    }
                    AddEventListeners();
                }
                if (flag)
                {
                    BeginCommodityUpdate(CommodityKind.Fun, Music.GuitarBonusFunMultiplier);
                }
                BeginCommodityUpdates();

                bool success = false;

                try
                {
                    AcquireStateMachine(Target.StateMachineName, AnimationPriority.kAPNormal);
                    SetActorAndEnter("x", Actor, "Enter");
                    AddJamControllerWatchListener();
                    AnimateSim("Watch");
                    mbIsWatchingRightNow = true;
                    Target.AddWatcher();
                    mFriendGainAlarm = Target.AddAlarmRepeating(Tuning.MinutesForLikingGain, TimeUnit.Minutes, new AlarmTimerCallback(GainFriendly), Tuning.MinutesForLikingGain, TimeUnit.Minutes, "Friendship Gain for Watch Music Playing", AlarmType.AlwaysPersisted);
                    MusicSkill element = mPlayer.SkillManager.GetElement(Target.SkillName) as MusicSkill;
                    if (element != null)
                    {
                        element.BeingWatched();
                    }
                    if (Target.mPlayingForTips && (Actor.IsOutside || Actor.LotCurrent.IsCommunityLot))
                    {
                        mTipChancePerCheck = Tuning.ChanceOfTipPerLevel[element.SkillLevel];
                        foreach (TraitNames names in Tuning.TraitsLessLikelyToTip)
                        {
                            if (Actor.TraitManager.HasElement(names))
                            {
                                mTipChancePerCheck *= Tuning.LessLikelyToTipMultiplier;
                            }
                        }
                        foreach (TraitNames names2 in Tuning.TraitsMoreLikelyToTip)
                        {
                            if (Actor.TraitManager.HasElement(names2))
                            {
                                mTipChancePerCheck *= Tuning.MoreLikelyToTipMultiplier;
                            }
                        }
                        mGoalTimeToTestTip = Tuning.TimePerTipTest;
                        timeTillTip        = RandomUtil.RandomFloatGaussianDistribution(Target.Tuning.ShortestSongLengthForTip, Target.Tuning.LongestSongLengthForTip);
                        success            = DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached), new Interaction <Sim, TTarget> .InsideLoopFunction(TippingLoop), mCurrentStateMachine);
                    }
                    else
                    {
                        success = DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached), new Interaction <Sim, TTarget> .InsideLoopFunction(WatchLoopBase), mCurrentStateMachine);
                    }
                    Target.RemoveAlarm(mFriendGainAlarm);
                    Target.RemoveWatcher();
                    SongFinished(true, mTryToTip);
                    RemoveJamControllerWatchListener();
                    if (mPlayInstance != null)
                    {
                        RemoveEventListeners();
                        mPlayInstance = null;
                    }
                }
                finally
                {
                    EndCommodityUpdates(success);
                }

                return(success);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }
示例#3
0
        public bool BaseRunEx()
        {
            mRelationship = Relationship.Get(Actor, Target, true);
            if (mRelationship == null)
            {
                return(false);
            }
            bool flag = false;

            if (IsSlowDance)
            {
                string reason;
                GreyedOutTooltipCallback greyedOutTooltipCallback = null;
                if (CommonSocials.CanGetRomantic(Actor, Target, false, false, true, ref greyedOutTooltipCallback, out reason))
                {
                    flag = true;
                }
            }
            else
            {
                foreach (CommodityTypes types in kAcceptableCommodities)
                {
                    if (mRelationship.STC.CurrentCommodity == types)
                    {
                        flag = true;
                        break;
                    }
                }
            }

            Definition interactionDefinition = InteractionDefinition as Definition;
            IDanceable danceObject           = interactionDefinition.DanceObject;

            if (flag)
            {
                mDanceFloor = DanceFloor.FindAndRouteOntoADanceFloorWithFollower(Actor, Target, danceObject);
                if (mDanceFloor != null)
                {
                    mDanceFloor.AddToUseList(Actor);
                    if (!mDanceFloor.IsActorUsingMe(Target))
                    {
                        mDanceFloor.AddToUseList(Target);
                    }
                }
            }

            Stereo targetStereo = interactionDefinition.TargetStereo;

            if (targetStereo != null)
            {
                targetStereo.AddSimListener(Actor);
                targetStereo.AddSimListener(Target);
            }

            string         instanceName = "SocialJigTwoPerson";
            ProductVersion baseGame     = ProductVersion.BaseGame;

            if (IsSlowDance)
            {
                instanceName = "SlowdanceJig";
                baseGame     = ProductVersion.EP8;
            }

            SocialJig = GlobalFunctions.CreateObjectOutOfWorld(instanceName, baseGame) as SocialJigTwoPerson;
            bool succeeded = false;

            Actor.SynchronizationLevel  = Sim.SyncLevel.NotStarted;
            Target.SynchronizationLevel = Sim.SyncLevel.NotStarted;
            string name = (Stereo.PartySimIsGettingMusicFromPartyLocation(Actor, danceObject) || Stereo.PartySimIsGettingMusicFromPartyLocation(Target, danceObject)) ? LocalizeString("BeRockingDancingTogether", new object[0x0]) : LocalizeString("BeDancingTogether", new object[0x0]);

            if (BeginSocialInteraction(new SocialInteractionB.Definition(null, name, false), true, false))
            {
                IGlass objectInRightHand = Actor.GetObjectInRightHand() as IGlass;
                if (objectInRightHand != null)
                {
                    objectInRightHand.PutGlassAway();
                }
                objectInRightHand = Target.GetObjectInRightHand() as IGlass;
                if (objectInRightHand != null)
                {
                    objectInRightHand.PutGlassAway();
                }

                string             stateMachineName = IsSlowDance ? "slowdance_together" : "dance_together";
                StateMachineClient smc = StateMachineClient.Acquire(Actor, stateMachineName);
                if (IsSlowDance)
                {
                    smc.SetActor("x", Actor);
                    smc.SetActor("y", Target);
                }
                else
                {
                    smc.SetActor("x", Target);
                    smc.SetActor("y", Actor);
                }
                smc.EnterState("x", "enter");
                smc.EnterState("y", "enter");
                if (GameUtils.IsInstalled(ProductVersion.EP7))
                {
                    smc.SetParameter("xIsProper", Target.HasTrait(TraitNames.Proper));
                    smc.SetParameter("yIsProper", Actor.HasTrait(TraitNames.Proper));
                }
                BeginCommodityUpdates();
                smc.RequestState(false, "x", "Ask_To_Dance");
                smc.RequestState(true, "y", "Ask_To_Dance");
                if (flag)
                {
                    smc.RequestState(false, "x", "Last_Sync");
                    smc.RequestState(true, "y", "Last_Sync");
                    smc.RequestState(false, "x", "dance");
                    smc.RequestState(true, "y", "dance");
                    Actor.SkillManager.StartGainAndAddSkillIfNeeded(SkillNames.Dancing, Stereo.kRateOfSkillGainForDancing);
                    Target.SkillManager.StartGainAndAddSkillIfNeeded(SkillNames.Dancing, Stereo.kRateOfSkillGainForDancing);
                    if (IsSlowDance)
                    {
                        EventTracker.SendEvent(EventTypeId.kSlowDanced, Actor, Target);
                        EventTracker.SendEvent(EventTypeId.kSlowDanced, Target, Actor);
                    }
                    succeeded = DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached), new InteractionInstance.InsideLoopFunction(DanceTogetherDelegate), smc);
                    Actor.SkillManager.StopSkillGain(SkillNames.Dancing);
                    Target.SkillManager.StopSkillGain(SkillNames.Dancing);
                    smc.RequestState(false, "x", "friendly");
                    smc.RequestState(true, "y", "friendly");
                }
                else
                {
                    smc.RequestState(false, "x", "awkward");
                    smc.RequestState(true, "y", "awkward");
                    mRelationship.LTR.UpdateLiking(Stereo.kLtrDecreaseAfterRejectingDanceTogether);
                    succeeded = false;
                }
            }

            Definition definition2 = InteractionDefinition as Definition;

            if ((definition2 != null) && (definition2.DanceObject is DJTurntable))
            {
                EventTracker.SendEvent(EventTypeId.kDanceToDJMusic, Target);
                EventTracker.SendEvent(EventTypeId.kDanceToDJMusic, Actor);
            }

            EndCommodityUpdates(succeeded);
            Actor.ClearSynchronizationData();
            return(succeeded);
        }
        private new void ExitAndTip(bool keepWatching)
        {
            try
            {
                AnimateSim("AfterWatch");
                Vector3 position = Actor.Position;
                if ((mTippingStatus == Tipping.WillTip) && (mPlayInstance != null))
                {
                    bool flag = false;
                    if (Actor.ExitReason == ExitReason.Finished)
                    {
                        flag = true;
                        Actor.ClearExitReasons();
                    }

                    if (Tip(Actor, mPlayer, Target, Tuning.MoneyPerLevel, Tuning.MoneyPerCompositionPlayed))
                    {
                        mTippingStatus = Tipping.HasTipped;
                    }

                    if (flag)
                    {
                        Actor.AddExitReason(ExitReason.Finished);
                    }
                }

                if (keepWatching)
                {
                    Route r = Actor.CreateRoute();
                    r.PlanToPoint(position);
                    r.DoRouteFail = false;
                    if (!Actor.DoRoute(r))
                    {
                        if (mDanceFloor != null)
                        {
                            mDanceFloor.RemoveFromUseList(Actor);
                            mDanceFloor = null;
                        }
                        DanceFloor danceFloor = null;
                        MusicalInstrument.DoRouteForWatchOrDance(Actor, Target, out danceFloor);
                        mDanceFloor = danceFloor;
                        if (mDanceFloor != null)
                        {
                            mDanceFloor.AddToUseList(Actor);
                        }
                    }
                    Actor.RouteTurnToFace(mPlayer.Position);
                    AnimateSim("Watch");
                    mbIsWatchingRightNow = true;
                }
                else
                {
                    AnimateSim("Exit");
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
            }
        }