private double rhythmChangeAddition(TaikoHitObjectDifficulty previousHitObject) { // We don't want a division by zero if some random mapper decides to put 2 HitObjects at the same time. if (timeElapsed == 0 || previousHitObject.timeElapsed == 0) { return(0); } double timeElapsedRatio = Math.Max(previousHitObject.timeElapsed / timeElapsed, timeElapsed / previousHitObject.timeElapsed); if (timeElapsedRatio >= 8) { return(0); } double difference = Math.Log(timeElapsedRatio, rhythm_change_base) % 1.0; if (isWithinChangeThreshold(difference)) { return(rhythm_change_bonus); } return(0); }