//miss判定 public void missHit(KeyTime aTime) { foreach (Note tNote in mNotes) { if (tNote == null) { continue; //音符なし } if (!(tNote.mCorrectQuarterBeat < aTime.mQuarterBeat)) { continue; //キー入力のタイミングが過ぎていない } Note.HitResult tResult = tNote.missHit(); if (tResult == Note.HitResult.miss) { continue;//既に評価されていた } //missの評価にする Subject.sendMessage(new Message("missedNote", new Arg(new Dictionary <string, object>() { { "note", tNote }, { "evaluation", TypeEvaluation.Evaluation.miss }, { "hitResult", tResult } }))); } }
//キー入力 public bool hit(KeyCode aKey, float aSecond, Note.HitNoteType aType) { int tLength = (mTriplet) ? 3 : 4; for (int i = 0; i < tLength; i++) { if (mNotes[i] == null) { continue; //音符なし } float tSecond = MusicScoreData.quarterBeatToMusicTime(mNotes[i].mCorrectQuarterBeat); TypeEvaluation.Evaluation tEvaluation = TypeEvaluation.evaluate(aSecond, tSecond); if (tEvaluation == TypeEvaluation.Evaluation.miss) { continue; //タイミングがあってない } //タイミングOK Note.HitResult tHitResult = mNotes[i].hit(aKey, aType); if (tHitResult == Note.HitResult.miss) { continue; //hitしなかった } //hitしたメッセージ送信 Subject.sendMessage(new Message("hittedNote", new Arg(new Dictionary <string, object>() { { "note", mNotes[i] }, { "evaluation", tEvaluation }, { "difference", aSecond - tSecond }, { "hitResult", tHitResult } }))); return(true); } return(false); }