protected override double StrainValueOf(HitObject hitObject) { double distance = hitObject.GetPrevStartDistance(); // determines speed based on distance to the note, where the further spaced the streams are the more speed is given // basically describes how fast you're forced to move your cursor at the same time as clicking double speedValue; if (distance > singleSpacingThreshold) { speedValue = 2.5; } else if (distance > streamSpacingThreshold) { speedValue = 1.6 + 0.9 * (distance - streamSpacingThreshold) / (singleSpacingThreshold - streamSpacingThreshold); } else if (distance > almostDiameter) { speedValue = 1.2 + 0.4 * (distance - almostDiameter) / (streamSpacingThreshold - almostDiameter); } else if (distance > almostDiameter / 2) { speedValue = 0.95 + 0.25 * (distance - almostDiameter / 2) / (almostDiameter / 2); } else { speedValue = 0.95; } return(speedValue / hitObject.GetPrevDeltaStartTime()); }
protected override double StrainValueOf(HitObject anObject) { double distance = anObject.GetPrevStartDistance(); double time = anObject.GetPrevDeltaStartTime(); double strainValue = Math.Pow(distance, 0.99) / time; return(strainValue); }
/// <summary> Covers base mechanics for strain, like decaying over time and increasing for each given object. </summary> public void Process(HitObject hitObject) { currentStrain *= GetStrainDecay(hitObject.GetPrevDeltaStartTime()); if (!(hitObject is Spinner)) { currentStrain += StrainValueOf(hitObject) * SkillMultiplier; } currentStrainPeak = Math.Max(currentStrain, currentStrainPeak); previousObjects.Add(hitObject); }