Beispiel #1
0
            private bool IsGallop (
                Limb cur, Limb prv,
                Beat cur_beat, Beat prv_beat
            ) {
                if (
                    cur_beat.beat_interval < GALLOP_BEAT_INTERVAL ||
                    prv_beat.beat_interval < GALLOP_BEAT_INTERVAL
                ) {
                    return false; //Consider making it.. 24?
                }
                float delta_second = cur_beat.second - prv_beat.second;
                if (delta_second > cur_beat.seconds_per_beat / GALLOP_BEATS_PER_MEASURE + GALLOP_SECONDS_EPOCH) {
                    return false; //Unsure if this is correct..
                }
                if (cur.JustMovedCount() != 1 || prv.JustMovedCount() != 1) {
                    return false; //For now, gallops are two taps..
                }
                int cur_just_moved_index = cur.JustMovedIndex();
                int prv_just_moved_index = prv.JustMovedIndex();
                if (cur_just_moved_index == prv_just_moved_index) {
                    return false; //.. by different parts of the same limb
                }

                Part cur_part = cur[cur_just_moved_index];
                Part prv_part = prv[prv_just_moved_index];
                if (cur_part.panel == null || prv_part.panel == null) {
                    return false; //Must be hitting a note
                }
                if (cur_part.panel == prv_part.panel) {
                    return false; //Must hit different notes
                }
                if (!Panel.IsBracketable(
                    cur_part.panel.index, prv_part.panel.index
                )) {
                    return false; //Must be bracketable
                }
                return true;
            }