Exemplo n.º 1
0
    void RecycleDrumBall(TaiguDrumBall drumBall)
    {
        drumBall.IsKeyBall               = false;
        drumBall.transform.parent        = m_BallCache.transform;
        drumBall.transform.localPosition = Vector3.zero;
        drumBall.gameObject.SetActive(false);

        TaiguBallType ballType = drumBall.BallType;

        if (ballType == TaiguBallType.Red)
        {
            mUnuseRedBalls.Enqueue(drumBall);
        }
        else if (ballType == TaiguBallType.Blue)
        {
            mUnuseBlueBalls.Enqueue(drumBall);
        }
        else if (ballType == TaiguBallType.RBMix)
        {
            mUnuseMixBalls.Enqueue(drumBall);
        }
        else if (ballType == TaiguBallType.HoldBegin)
        {
            mUnuseHoldBalls.Enqueue(drumBall);
        }
        else
        {
            if (drumBall != null)
            {
                Destroy(drumBall.gameObject);
            }
        }
    }
Exemplo n.º 2
0
    TaiguBeatType FixBeatType(TaiguBeatType beatType)
    {
        if (beatType == TaiguBeatType.Left || beatType == TaiguBeatType.Right)
        {
            TaiguDrumBall drumBall = CurrentLeadBall();
            if (drumBall != null && drumBall.BallType == TaiguBallType.RBMix)
            {
                float checkOffset = drumBall.transform.position.x - m_CheckPos.position.x;
                if (mBeatResult.InCheckRange(checkOffset))
                {
                    if (mLastBeatType == TaiguBeatType.Nothing)
                    {
                        mLastBeatTime = Time.realtimeSinceStartup;
                        mLastBeatType = beatType;

                        beatType = TaiguBeatType.Ignore;
                    }
                    else if (mLastBeatType != beatType)
                    {
                        mLastBeatTime = 0f;
                        mLastBeatType = TaiguBeatType.Nothing;

                        beatType = TaiguBeatType.LRMix;
                    }
                }
            }
        }

        return(beatType);
    }
Exemplo n.º 3
0
    TaiguDrumBall CreateMixBall()
    {
        GameObject go = null;

        go       = (GameObject)Instantiate(m_MixBallPreb, m_MixBallPreb.transform.position, m_MixBallPreb.transform.rotation);
        go.layer = (int)GameLayer.UI;
        go.name  = "Mix";

        TaiguDrumBall drumBall = go.GetComponent <TaiguDrumBall>();

        drumBall.ResizeHoldBall(0);
        return(drumBall);
    }
Exemplo n.º 4
0
    TaiguDrumBall CreateHoldBall(float nKeyTimeSpace)
    {
        GameObject go = null;

        go       = (GameObject)Instantiate(m_HoldBallPreb, m_HoldBallPreb.transform.position, m_HoldBallPreb.transform.rotation);
        go.layer = (int)GameLayer.UI;
        go.name  = "Hold" + nHoldIndex.ToString();      //	给实例命名方便调试;
        nHoldIndex++;

        TaiguDrumBall drumBall = go.GetComponent <TaiguDrumBall>();

        drumBall.ResizeHoldBall(nKeyTimeSpace * mBallSpeed * 240.0f);
        return(drumBall);
    }
Exemplo n.º 5
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;
            }
        }
    }
Exemplo n.º 6
0
    void OnRoundBall(TimeLineElement tle)
    {
        TaiguBallType ballType      = (TaiguBallType)tle.GetParamByIndex(0);
        bool          isKeyBall     = (bool)tle.GetParamByIndex(1);
        float         nKeyTimeSpace = (float)tle.GetParamByIndex(2);

        TaiguDrumBall drumBall = ObtainDrumBall(ballType, nKeyTimeSpace);

        drumBall.IsKeyBall = isKeyBall;

        Vector3 v = drumBall.transform.localPosition;

        v.x = -1 * tle.m_Time * mBallSpeed * 240.0f;
        drumBall.transform.localPosition = v;

        mUsingBalls.Enqueue(drumBall);
    }
Exemplo n.º 7
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;
            }
        }
    }
Exemplo n.º 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);
    }
Exemplo n.º 9
0
    TaiguDrumBall ObtainDrumBall(TaiguBallType ballType, float nKeyTimeSpace)
    {
        TaiguDrumBall drumBall = null;

        switch (ballType)
        {
        case TaiguBallType.Red:
            if (mUnuseRedBalls.Count > 0)
            {
                drumBall = mUnuseRedBalls.Dequeue();
                drumBall.gameObject.SetActive(true);
            }
            else
            {
                drumBall = CreateRedBall();
            }
            break;

        case TaiguBallType.Blue:
            if (mUnuseBlueBalls.Count > 0)
            {
                drumBall = mUnuseBlueBalls.Dequeue();
                drumBall.gameObject.SetActive(true);
            }
            else
            {
                drumBall = CreateBlueBall();
            }
            break;

        case TaiguBallType.RBMix:
            if (mUnuseMixBalls.Count > 0)
            {
                drumBall = mUnuseMixBalls.Dequeue();
                drumBall.gameObject.SetActive(true);
            }
            else
            {
                drumBall = CreateMixBall();
            }
            break;

        case TaiguBallType.HoldBegin:
            if (mUnuseHoldBalls.Count > 0)
            {
                drumBall = mUnuseHoldBalls.Dequeue();
                drumBall.ResizeHoldBall(nKeyTimeSpace * mBallSpeed * 240.0f);
                drumBall.gameObject.SetActive(true);
            }
            else
            {
                drumBall = CreateHoldBall(nKeyTimeSpace);
            }
            break;
        }

        Vector3 pos = m_BallCaptain.transform.position;

        pos.x  = m_BeginPos.position.x;
        pos.z += mBallDepth * 0.001f;
        drumBall.transform.parent     = m_BallCaptain.transform;
        drumBall.transform.localScale = Vector3.one;
        drumBall.transform.position   = pos;
        mBallDepth++;

        return(drumBall);
    }