/// <summary> /// 移除该控件并发送消息 /// </summary> /// <param name="cs"></param> /// <param name="ste">0初始化 1 未被敲击 2 被敲中</param> /// <param name="ht"></param> private void RemoveAndSendMsg(CadenceSign cs, byte ste, HitType ht) { LayoutRoot.Children.Remove(cs.currentSign); indexActual++; cs.state = ste; HitArgs ha = new HitArgs(); ha.HitType = ht; OnHit(this, ha); }
/// <summary> /// 播放击中光环动画 /// </summary> /// <param name="arg2"></param> private void PlayHitFlash(HitArgs arg2) { if (arg2.DrumType == DrumType.FaceAll || arg2.DrumType == DrumType.SideAll) { fpPlayer.Play(1); } else { fpPlayer.Play(0); } }
/// <summary> /// 通知有按键按下 /// </summary> /// <param name="key"></param> public void NotifyKeyDown(DrumType dt) { if (SignEnd()) return; for (int i = indexActual; i < signCount; ) { if (null == CadenceSigns) return; CadenceSign cs = CadenceSigns[i]; double atime = (lapseTime - arriveEndPointOffset);// / (1 * speed);//当前实际流逝时间 if (CommHelper.Abs(cs.DelayTimeMill - atime) <= normalArrage) { //double lv = Canvas.GetLeft(cs.currentSign); cs.currentSign.Visibility = Visibility.Collapsed; LayoutRoot.Children.Remove(cs.currentSign); indexActual++; cs.state = 2; HitArgs ha = new HitArgs(); ha.DrumType = dt; ha.SignSource = cs; ha.HitType = HitType.Normal; if (cs.drumType != DrumType.FaceAll && cs.drumType != DrumType.SideAll) { cs.DelayTimeMill -= (int)(10 * speed); } if (CommHelper.Abs(cs.DelayTimeMill - atime) <= niceArrage) { ha.HitType = HitType.Nice; } //得分算出来后计算按键是否对应 if (!KnockKeyIsCodex(cs, dt)) { ha.HitType = HitType.Lost; } OnHit(this, ha); return; } else if (CommHelper.Abs(cs.DelayTimeMill - atime) <= lostArrage) { RemoveAndSendMsg(cs, 1, HitType.Lost); return; } else { return;//没有满足的直接跳出 } } }
/// <summary> /// 敲击后如果有信号进入范围触发的方法 /// </summary> /// <param name="arg1"></param> /// <param name="arg2"></param> void cpSignPanel_OnHit(CadencePanel arg1, HitArgs arg2) { switch (arg2.HitType) { case HitType.Lost: rlsPlayer.Play(HitType.Lost); currentGri.BadHits++; if (currentGri.MaxDoubleHits < dhtPanel.HitCount) currentGri.MaxDoubleHits = dhtPanel.HitCount; dhtPanel.ClearHit(); break; case HitType.Normal: dhtPanel.AddHit(); spScore.AddScore(dhtPanel.HitCount * 20); fpScore.AddFetch(dhtPanel.HitCount * 3); currentGri.NormalHits++; PlayHitFlash(arg2); rlsPlayer.Play(HitType.Normal); break; case HitType.Nice: dhtPanel.AddHit(); spScore.AddScore(dhtPanel.HitCount * 35); fpScore.AddFetch(dhtPanel.HitCount * 6); currentGri.CoolHits++; PlayHitFlash(arg2); rlsPlayer.Play(HitType.Nice); break; } }