示例#1
0
    void PlayHitAniSuper(TaiguBallType ballType, BeatResultRank beatRank)
    {
        ParticleSystem curPs = null;

        if (beatRank == BeatResultRank.Miss || beatRank == BeatResultRank.None)
        {
            curPs = m_psMiss;
        }
        else
        {
            if (ballType == TaiguBallType.Red)
            {
                curPs = m_psRed;
            }
            else if (ballType == TaiguBallType.Blue)
            {
                curPs = m_psBlue;
            }
            else if (ballType == TaiguBallType.RBMix)
            {
                curPs = m_psMix;
            }
            else if (ballType == TaiguBallType.HoldBegin)
            {
                curPs = m_psYellow;
            }
        }

        if (curPs != null)
        {
            curPs.gameObject.SetActive(true);
            curPs.Stop();
            curPs.Play();
        }
    }
示例#2
0
    void OnBeatResult(BeatResultRank rank)
    {
        int aniIndex = (int)rank - 1;

        if (aniIndex < m_BeatRankAni.Length)
        {
            _HidePlayingRankAni();

            mPlayingRankAni = m_BeatRankAni[aniIndex];
            mPlayingRankAni.gameObject.SetActive(true);
            mPlayingRankAni.Play();
        }
    }
示例#3
0
    // Beat---------------------------------------------------------
    void CheckExceed()
    {
        GameObject roundBar = CurrentLeadRoundBar();

        if (roundBar != null)
        {
            if (roundBar.transform.position.x > m_CheckEdgeRight.position.x)
            {
                mUsingRoundBar.Dequeue();
                RecycleRoundBar(roundBar);
            }
        }

        TaiguDrumBall drumBall = CurrentLeadBall();

        if (drumBall != null)
        {
            if (drumBall.EndBall.position.x > m_CheckEdgeRight.position.x)
            {
                float checkOffset = drumBall.transform.position.x - m_CheckPos.position.x;
                if (drumBall.BallType != TaiguBallType.HoldBegin)
                {
                    HandleBeat(true, checkOffset, m_headRank, true);
                }
                else
                {
                    if (m_headRank == BeatResultRank.Miss || m_headRank == BeatResultRank.Bad || m_headRank == BeatResultRank.None)
                    {
                        mBeatResult.AddBeatCheck(0, BeatResultRank.Miss);
                        SendMessage("OnBeatResult", BeatResultRank.Miss, SendMessageOptions.RequireReceiver);
                        SendMessage("OnBeatCombo", mBeatResult.ComnoCount.Value, SendMessageOptions.DontRequireReceiver);
                        PlayHitAniSuper(TaiguBallType.HoldBegin, BeatResultRank.Miss);
                    }
                    drumBall = mUsingBalls.Dequeue();

                    if (drumBall.IsKeyBall)
                    {
                        ///m_Match.HandleRoundMark(mRoundIndex, mBeatResult.LatestRoundMark, mBeatResult.LatestBeatRank, mBeatResult.LatestRoundRank);

                        ++mRoundIndex;
                        mBeatResult.StartNewRound();
                    }

                    RecycleDrumBall(drumBall);
                }
                m_headRank = BeatResultRank.None;
            }
        }
    }
示例#4
0
 void OnRankAction(BeatResultRank rank)
 {
     if (m_bIsDancer && OwnerAni != null)
     {
         if (rank == BeatResultRank.Miss)
         {
             OwnerAni.CrossFade(Miss);
             OwnerAni.Blend(DanceStart, 1f);
         }
         else
         {
             OwnerAni.Blend(DanceStart, 0f);
         }
     }
 }
示例#5
0
    void CheckBeat(TaiguBeatType beatType)
    {
        TaiguDrumBall drumBall = CurrentLeadBall();

        if (drumBall != null)
        {
            float checkOffset = drumBall.transform.position.x - m_CheckPos.position.x;

            bool isCheck = false;
            switch (drumBall.BallType)
            {
            case TaiguBallType.HoldBegin:
                if (drumBall.transform.position.x >= m_CheckPos.position.x && drumBall.EndBall.position.x <= m_CheckPos.position.x)
                {
                    isCheck = true;
                }
                break;

            default:
                isCheck = mBeatResult.InCheckRange(checkOffset);
                break;
            }

            if (isCheck)
            {
                bool isValid = IsBeatValid(drumBall.BallType, beatType);

                bool isEnd = true;
                if (drumBall.BallType == TaiguBallType.HoldBegin)
                {
                    isEnd = false;
                }

                BeatResultRank headRank = HandleBeat(isValid, checkOffset, m_headRank, isEnd);
                if (m_headRank == BeatResultRank.None)
                {
                    m_headRank = headRank;
                }

                mLastBeatTime = 0f;
                mLastBeatType = TaiguBeatType.Nothing;
            }
        }
    }
示例#6
0
        private int GetRankBaseScore(RhythmBallType ballType, BeatResultRank rank)
        {
            int[] arrScoreDefault =
            {
                0,                              // miss
                250,                            // bad
                300,                            // good
                400,                            // cool
                500,                            // perfect
            };

            int[] arrScoreDoubleClick =
            {
                0,                              // miss
                300,                            // bad
                400,                            // good
                600,                            // cool
                800,                            // perfect
            };

            int[] arrScoreBevelTR =
            {
                0,                              // miss
                300,                            // bad
                400,                            // good
                500,                            // cool
                600,                            // perfect
            };

            int[] arrScoreBevelBL =
            {
                0,                              // miss
                300,                            // bad
                400,                            // good
                500,                            // cool
                600,                            // perfect
            };

            int[] arrScoreDoubleLongPress =
            {
                0,                              // miss
                300,                            // bad
                400,                            // good
                600,                            // cool
                800,                            // perfect
            };

            int[] arrScoreBatter =
            {
                0,                              // miss
                300,                            // bad
                400,                            // good
                600,                            // cool
                800,                            // perfect
            };

            switch (ballType)
            {
            case RhythmBallType.DoubleClick:
                return(arrScoreDoubleClick[(int)rank - 1]);

            case RhythmBallType.BevelTR:
                return(arrScoreBevelTR[(int)rank - 1]);

            case RhythmBallType.BevelBL:
                return(arrScoreBevelBL[(int)rank - 1]);

            case RhythmBallType.DoubleLongPress:
                return(arrScoreDoubleLongPress[(int)rank - 1]);

            case RhythmBallType.Batter:
                return(arrScoreBatter[(int)rank - 1]);

            default:
                return(arrScoreDefault[(int)rank - 1]);
            }
        }
示例#7
0
    public BeatResultRank AddBeatCheck(float offset, BeatResultRank headRank)
    {
        BeatResultRank rank = BeatResultRank.None;

        if (headRank != BeatResultRank.None)
        {
            rank = headRank;
            switch (rank)
            {
            case BeatResultRank.Perfect:
            case BeatResultRank.Cool:
            case BeatResultRank.Good:
                ++mComboCount.Value;
                break;

            case BeatResultRank.Bad:
            case BeatResultRank.Miss:
                mComboCount.Value = 0;
                break;

            default:
                break;
            }
        }
        else
        {
            if (offset >= -mPerfectRange && offset <= mPerfectRange)
            {
                rank = BeatResultRank.Perfect;
                ++mComboCount.Value;
            }
            else if (offset >= -mCoolRange && offset <= mCoolRange)
            {
                rank = BeatResultRank.Cool;
                ++mComboCount.Value;
            }
            else if (offset >= -mGoodRange && offset <= mGoodRange)
            {
                rank = BeatResultRank.Good;
                ++mComboCount.Value;
            }
            else if (offset >= -mTotalRange && offset <= mTotalRange)
            {
                rank = BeatResultRank.Bad;
                mComboCount.Value = 0;
            }
            else
            {
                rank = BeatResultRank.Miss;
                mComboCount.Value = 0;
            }
        }

        int comboLevel = (mComboCount.Value > 100 ? 10 : mComboCount.Value / 10);
        int markIndex  = (int)rank - 1;
        int rankMark   = mBaseMark[markIndex];

        ///rankMark += FashionValueData.GetAdditionFashionValue(rank, mAdditionList);
        mLatestBeatMark.Value = rankMark + rankMark * comboLevel * mComboBonus / 100;
        mLatestBeatRank.Value = (int)rank;

        mLatestRoundMark.Value += mLatestBeatMark.Value;
        mLatestRoundRank.Add(mLatestBeatRank.Clone());

        return(rank);
    }
示例#8
0
    private BeatResultRank HandleBeat(bool isValid, float checkOffset, BeatResultRank headRank, bool isEnd)
    {
        BeatResultRank curHeadRank = BeatResultRank.None;
        TaiguDrumBall  drumBall    = null;

        if (isEnd)
        {
            drumBall = mUsingBalls.Dequeue();
        }
        else
        {
            drumBall = mUsingBalls.Peek();
        }

        bool          isKeyBall = drumBall.IsKeyBall;
        TaiguBallType ballType  = drumBall.BallType;
        Vector3       ballPos   = drumBall.transform.position;

#if !MODE_ALLCOMBO
        if (isValid)
        {
            if (isEnd)
            {
                headRank = BeatResultRank.None;
            }
            curHeadRank = mBeatResult.AddBeatCheck(checkOffset, headRank);
        }
        else
        {
            mBeatResult.AddBeatMiss();
            curHeadRank = BeatResultRank.Miss;
        }

        PlayHitAniNormal(ballType, ballPos);
#else
        if (RoomData.IsPlaySuperMode)
        {
            PlayHitAniSuper(ballType, curHeadRank);
        }
        else
        {
            PlayHitAniNormal(ballType, ballPos);
        }
        mBeatResult.AddBeatCheck(0, BeatResultRank.None);
#endif

        ///m_Match.HandleBeatMark(mRoundIndex, mBeatResult.LatestBeatMark, mBeatResult.ComnoCount);

        SendMessage("OnBeatResult", (BeatResultRank)mBeatResult.LatestBeatRank.Value, SendMessageOptions.RequireReceiver);
        SendMessage("OnBeatCombo", mBeatResult.ComnoCount.Value, SendMessageOptions.DontRequireReceiver);
        if (isEnd)
        {
            if (isKeyBall)
            {
                ///m_Match.HandleRoundMark(mRoundIndex, mBeatResult.LatestRoundMark, mBeatResult.LatestBeatRank, mBeatResult.LatestRoundRank);

                ++mRoundIndex;
                mBeatResult.StartNewRound();
            }

            RecycleDrumBall(drumBall);
        }
        return(curHeadRank);
    }