void AddCombo(Global.TIMING_JUAGE_TYPE type) { combo.Add(); int curCombo = combo.GetCount(); mark += GetMark(curCombo - 1, type, true); Eff.instance.ShowCombo100(curCombo > 100, this.index); scoreData.score = mark; scoreData.comboCount++; if (curCombo % 100 == 0 && curCombo > 1) { Sounder.instance.Play("连击加成音效100"); } else if (curCombo % 10 == 0 && curCombo > 1) { combo10Eff.gameObject.SetActive(true); combo10Eff.PlayParticles(); Sounder.instance.Play("连击加成音效"); } else { combo1Eff.gameObject.SetActive(true); combo1Eff.PlayParticles(); } if (curCombo % 20 == 0) { AddHP(1); } }
/// <summary> /// 得到分数 /// </summary> /// <param name="curCombo"></param> /// <param name="type"></param> /// <returns></returns> static public int GetMark(int curCombo, Global.TIMING_JUAGE_TYPE type, bool playSound = false) { int addMark = 0; switch (type) { case Global.TIMING_JUAGE_TYPE.PREFECT: addMark += 30; break; case Global.TIMING_JUAGE_TYPE.COOL: addMark += 20; break; case Global.TIMING_JUAGE_TYPE.GOOD: addMark += 10; break; } float awardFactor = 0.5f; addMark = (int)((Mathf.Floor((float)curCombo / 10) * awardFactor + 1) * (float)addMark); if (curCombo % 100 == 0 && curCombo > 0) { addMark += (int)((float)addMark * ((float)curCombo / 100f) * 0.1f); } return(addMark); }
public void Show(Global.TIMING_JUAGE_TYPE type) { for (int i = 0; i < judgeEffects.Length; i++) { judgeEffects[i].gameObject.SetActive(i == (int)type); judgeEffects[i].PlayParticles(); } gameObject.GetComponent <Animation>().Stop(); gameObject.GetComponent <Animation>().Play(PlayMode.StopAll); }
/// <summary> /// 设置箭头,计算分数 /// </summary> /// <param name="type"></param> void SetArrowResult(Global.TIMING_JUAGE_TYPE type, Arrow arrow, bool isMainBeat = true) { switch (type) { case Global.TIMING_JUAGE_TYPE.BAD: Sounder.instance.Play("BAD音效"); break; } if (arrow.isLastOne) { bool end = true; if (arrow is LongPressArrow) { LongPressArrow longPress = arrow as LongPressArrow; switch (longPress.subState) { case Arrow.STATE.PRESSING: case Arrow.STATE.READY: end = false; break; } } if (hp > 0 && end) { ClearnArrow(); Eff.instance.lastHit.SetActive(true); BeatGame.instance.ArrowComplete(); } } if (type != Global.TIMING_JUAGE_TYPE.MISS) { int comboTime = combo.GetCount(); GetComponent <AudioSource>().volume = comboTime < 10 ? 0.7f : 1; if (isMainBeat) { GetComponent <AudioSource>().PlayOneShot(leftRightClip); } } timingJudge.Show(type); if (type < Global.TIMING_JUAGE_TYPE.BAD) { AddCombo(type); BeatLight bl = null; switch (arrow.songTime.direction) { case SongInfo.DIRECTION.LEFT: bl = leftLight; break; case SongInfo.DIRECTION.RIGHT: bl = rightLight; break; case SongInfo.DIRECTION.UP: bl = upLight; break; case SongInfo.DIRECTION.DOWN: bl = downLight; break; } bl.Show(); Eff.instance.ScreenHit(arrow.songTime.direction); } else { //道具 if (correctProp != null && DataUtils.mode == Global.MODE.MODE_1P) { if (correctProp.Use()) { Sounder.instance.Play("道具消耗音效"); AddCombo(Global.TIMING_JUAGE_TYPE.PREFECT); Eff.instance.ScreenHit(arrow.songTime.direction); type = Global.TIMING_JUAGE_TYPE.PREFECT; } else { combo.Reset(); } } else { combo.Reset(); } switch (type) { case Global.TIMING_JUAGE_TYPE.BAD: mark += 5; //bad加5 break; case Global.TIMING_JUAGE_TYPE.MISS: RefreshHP(); break; } } scoreData.AddJuade(info.data, type); markText.SetValue(mark); }
/// <summary> /// 按键 /// </summary> /// <param name="d"></param> /// <param name="keyState"></param> public void PressKey(SongInfo.DIRECTION d, JoystickManager.JOYSTICK_KEY_STATE keyState) { Arrow a; GameObject targetArrow = null; for (int i = 0, c = arrows.Count; i < c; i++) { a = arrows[i]; if (a.songTime.direction != d) { continue; } switch (a.songTime.direction) { case SongInfo.DIRECTION.UP: targetArrow = upArrow; break; case SongInfo.DIRECTION.DOWN: targetArrow = downArrow; break; case SongInfo.DIRECTION.LEFT: targetArrow = leftArrow; break; case SongInfo.DIRECTION.RIGHT: targetArrow = rightArrow; break; } float dis = Vector3.Distance(a.transform.position, targetArrow.transform.position); Global.TIMING_JUAGE_TYPE type = GetJuade(dis); if (a is LongPressArrow) { LongPressArrow l = a as LongPressArrow; switch (l.state) { case LongPressArrow.STATE.READY: //准备好时,如果按下相应的链接又在区域内,改变为按下状态 if (type != Global.TIMING_JUAGE_TYPE.NONE && keyState == JoystickManager.JOYSTICK_KEY_STATE.KEY_DOWN) { l.SetState(LongPressArrow.STATE.PRESSING); l.pressingTime = runTime; SetArrowResult(type, a); float offset = targetArrow.transform.position.y - a.transform.position.y; a.transform.position = targetArrow.transform.position; l.height += offset * 100; l.AddLongEff(targetArrow.transform.position); return; } break; case LongPressArrow.STATE.PRESSING: //如果按下状态时弹起,改为失败状态 if (keyState == JoystickManager.JOYSTICK_KEY_STATE.KEY_UP) { dis = Vector3.Distance(l.GetSecondArrowPos(), targetArrow.transform.position); Global.TIMING_JUAGE_TYPE secondType = GetJuade(dis); if (secondType != Global.TIMING_JUAGE_TYPE.NONE) { l.SetState(LongPressArrow.STATE.SUCCESS); l.subState = Arrow.STATE.SUCCESS; KillArrow(a); SetArrowResult(secondType, a, false); Eff.instance.AddArrowEff(targetArrow.transform.position, a.songTime.direction); } else { l.SetState(LongPressArrow.STATE.FAILED); } return; } break; } } else { if (keyState == JoystickManager.JOYSTICK_KEY_STATE.KEY_DOWN) { if (type != Global.TIMING_JUAGE_TYPE.NONE) { KillArrow(a); SetArrowResult(type, a); Eff.instance.AddArrowEff(targetArrow.transform.position, a.songTime.direction); return; } } } } }
public void AddJuade(SongData data, Global.TIMING_JUAGE_TYPE type) { juadeType2Count[(int)type]++; }