public void processKey(StandardKeyCodes keycode, long time, bool keyDown = true) { if (patternMaster.isPlaying()) { StandardControls control = KeyMappings.keyToControl(keycode); MusicEventTypes musicEventType = controlToEventType [control]; //find first matching event // int index = events[eventType].FindIndex (e => actionMatches(eventType, e)); // Debug.Log (events[0]); var relevantEvents = events; if (!keyDown) //keyup { relevantEvents = releaseEvents; } if (relevantEvents [musicEventType].Count > 0) { MusicEvent e = relevantEvents[musicEventType][0]; if (keyDown) { long expectedTime = patternMaster.absTime(e.startTime); long delta = expectedTime - time; long adjustedError = delta + latencyAdjustment; //only consider if within scoring range if (delta < ScorableThreshold) { // Debug.LogFormat ("Delta {0}", delta); // Debug.LogFormat ("Adjusted delta {0}", adjustedError); ScoreLevels score = ReportQuality(adjustedError); Messenger <ScoreLevels> .Invoke(MessengerKeys.EVENT_SCORE, score); panel.log("Score", scoreToString [score]); // if (mode == ScoreCalculatorMode.Calibration) { // calibrator.addDelta ((int)delta); // } relevantEvents [musicEventType].RemoveAt(0); Messenger <MusicEvent> .Invoke(MessengerKeys.EVENT_HIT, e); if (e.isHeldEvent()) { releaseEventActive [e] = true; } } } else { long expectedUpTime = patternMaster.absTime(e.endTime); long delta = expectedUpTime - time; long adjusted = delta + latencyAdjustment; //only register relases if already down if (releaseEventActive.ContainsKey(e)) { ScoreLevels score = ReportQuality(adjusted); // Debug.LogFormat ("Release {0}", adjusted); relevantEvents [musicEventType].RemoveAt(0); Messenger <ScoreLevels> .Invoke(MessengerKeys.EVENT_SCORE, score); Messenger <MusicEvent> .Invoke(MessengerKeys.EVENT_HELD_RELEASED, e); } } } } }
public void OnKeyUp(StandardKeyCodes key, long time) { Messenger <StandardControls> .Invoke(MessengerKeys.EVENT_PAD_RELEASED, KeyMappings.keyToControl(key)); scoreCalculator.processKey(key, time, false); }