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);
                    }
                }
            }
        }
    }
Beispiel #2
0
    public void OnKeyUp(StandardKeyCodes key, long time)
    {
        Messenger <StandardControls> .Invoke(MessengerKeys.EVENT_PAD_RELEASED, KeyMappings.keyToControl(key));

        scoreCalculator.processKey(key, time, false);
    }