private void calculateSpecificStrain(VitaruHitObjectDifficulty previousHitObject, VitaruDifficultyCalculator.DifficultyType type, double timeRate) { double addition = 0; double timeElapsed = (BaseHitObject.StartTime - previousHitObject.BaseHitObject.StartTime) / timeRate; double decay = Math.Pow(DECAY_BASE[(int)type], timeElapsed / 1000); if (BaseHitObject.Type == HitObjectType.Enemy) { addition = spacingWeight(DistanceTo(previousHitObject), type) * spacing_weight_scaling[(int)type]; } // You will never find maps that require this amongst ranked maps. addition /= Math.Max(timeElapsed, 50); Strains[(int)type] = previousHitObject.Strains[(int)type] * decay + addition; }
internal void CalculateStrains(VitaruHitObjectDifficulty previousHitObject, double timeRate) { calculateSpecificStrain(previousHitObject, VitaruDifficultyCalculator.DifficultyType.Speed, timeRate); calculateSpecificStrain(previousHitObject, VitaruDifficultyCalculator.DifficultyType.Aim, timeRate); }
internal double DistanceTo(VitaruHitObjectDifficulty other) { // Scale the distance by hitbox size. return((startPosition - other.endPosition).Length * scalingFactor); }