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); } } }
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); }
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); }
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); }
// 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; } } }
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); }
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; } } }
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); }
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); }