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; }