mirror of
https://github.com/ppy/osu.git
synced 2025-01-12 22:33:05 +08:00
Merge branch 'master' into multiplier1x
This commit is contained in:
commit
79ef032182
@ -51,7 +51,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
|
|
||||||
assertHeadJudgement(HitResult.Meh);
|
assertHeadJudgement(HitResult.Meh);
|
||||||
assertTickJudgement(HitResult.LargeTickHit);
|
assertTickJudgement(HitResult.LargeTickHit);
|
||||||
assertTailJudgement(HitResult.LargeTickHit);
|
assertTailJudgement(HitResult.SliderTailHit);
|
||||||
assertSliderJudgement(HitResult.IgnoreHit);
|
assertSliderJudgement(HitResult.IgnoreHit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,13 +467,13 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
|
|
||||||
private void assertHeadMissTailTracked()
|
private void assertHeadMissTailTracked()
|
||||||
{
|
{
|
||||||
AddAssert("Tracking retained", () => judgementResults[^2].Type, () => Is.EqualTo(HitResult.LargeTickHit));
|
AddAssert("Tracking retained", () => judgementResults[^2].Type, () => Is.EqualTo(HitResult.SliderTailHit));
|
||||||
AddAssert("Slider head missed", () => judgementResults.First().IsHit, () => Is.False);
|
AddAssert("Slider head missed", () => judgementResults.First().IsHit, () => Is.False);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertMidSliderJudgements()
|
private void assertMidSliderJudgements()
|
||||||
{
|
{
|
||||||
AddAssert("Tracking acquired", () => judgementResults[^2].Type, () => Is.EqualTo(HitResult.LargeTickHit));
|
AddAssert("Tracking acquired", () => judgementResults[^2].Type, () => Is.EqualTo(HitResult.SliderTailHit));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertMidSliderJudgementFail()
|
private void assertMidSliderJudgementFail()
|
||||||
|
@ -57,7 +57,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
});
|
});
|
||||||
|
|
||||||
assertHeadJudgement(HitResult.Ok);
|
assertHeadJudgement(HitResult.Ok);
|
||||||
assertTailJudgement(HitResult.LargeTickHit);
|
assertTailJudgement(HitResult.SliderTailHit);
|
||||||
assertSliderJudgement(HitResult.IgnoreHit);
|
assertSliderJudgement(HitResult.IgnoreHit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
assertTickJudgement(1, HitResult.LargeTickHit);
|
assertTickJudgement(1, HitResult.LargeTickHit);
|
||||||
assertTickJudgement(2, HitResult.LargeTickHit);
|
assertTickJudgement(2, HitResult.LargeTickHit);
|
||||||
assertTickJudgement(3, HitResult.LargeTickHit);
|
assertTickJudgement(3, HitResult.LargeTickHit);
|
||||||
assertTailJudgement(HitResult.LargeTickHit);
|
assertTailJudgement(HitResult.SliderTailHit);
|
||||||
assertSliderJudgement(HitResult.IgnoreHit);
|
assertSliderJudgement(HitResult.IgnoreHit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
assertHeadJudgement(HitResult.Meh);
|
assertHeadJudgement(HitResult.Meh);
|
||||||
assertAllTickJudgements(HitResult.LargeTickHit);
|
assertAllTickJudgements(HitResult.LargeTickHit);
|
||||||
assertRepeatJudgement(HitResult.LargeTickHit);
|
assertRepeatJudgement(HitResult.LargeTickHit);
|
||||||
assertTailJudgement(HitResult.LargeTickHit);
|
assertTailJudgement(HitResult.SliderTailHit);
|
||||||
assertSliderJudgement(HitResult.IgnoreHit);
|
assertSliderJudgement(HitResult.IgnoreHit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
|
|
||||||
assertHeadJudgement(HitResult.Meh);
|
assertHeadJudgement(HitResult.Meh);
|
||||||
assertRepeatJudgement(HitResult.LargeTickHit);
|
assertRepeatJudgement(HitResult.LargeTickHit);
|
||||||
assertTailJudgement(HitResult.LargeTickHit);
|
assertTailJudgement(HitResult.SliderTailHit);
|
||||||
assertSliderJudgement(HitResult.IgnoreHit);
|
assertSliderJudgement(HitResult.IgnoreHit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +245,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
assertAllTickJudgements(HitResult.LargeTickMiss);
|
assertAllTickJudgements(HitResult.LargeTickMiss);
|
||||||
|
|
||||||
// This particular test actually starts tracking the slider just before the end, so the tail should be hit because of its leniency.
|
// This particular test actually starts tracking the slider just before the end, so the tail should be hit because of its leniency.
|
||||||
assertTailJudgement(HitResult.LargeTickHit);
|
assertTailJudgement(HitResult.SliderTailHit);
|
||||||
|
|
||||||
assertSliderJudgement(HitResult.IgnoreHit);
|
assertSliderJudgement(HitResult.IgnoreHit);
|
||||||
}
|
}
|
||||||
@ -276,7 +276,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
|
|
||||||
assertHeadJudgement(HitResult.Meh);
|
assertHeadJudgement(HitResult.Meh);
|
||||||
assertTickJudgement(0, HitResult.LargeTickMiss);
|
assertTickJudgement(0, HitResult.LargeTickMiss);
|
||||||
assertTailJudgement(HitResult.LargeTickHit);
|
assertTailJudgement(HitResult.SliderTailHit);
|
||||||
assertSliderJudgement(HitResult.IgnoreHit);
|
assertSliderJudgement(HitResult.IgnoreHit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,7 +307,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
assertHeadJudgement(HitResult.Meh);
|
assertHeadJudgement(HitResult.Meh);
|
||||||
assertTickJudgement(0, HitResult.LargeTickMiss);
|
assertTickJudgement(0, HitResult.LargeTickMiss);
|
||||||
assertTickJudgement(1, HitResult.LargeTickMiss);
|
assertTickJudgement(1, HitResult.LargeTickMiss);
|
||||||
assertTailJudgement(HitResult.LargeTickHit);
|
assertTailJudgement(HitResult.SliderTailHit);
|
||||||
assertSliderJudgement(HitResult.IgnoreHit);
|
assertSliderJudgement(HitResult.IgnoreHit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ namespace osu.Game.Rulesets.Osu.Objects
|
|||||||
|
|
||||||
public class TailJudgement : SliderEndJudgement
|
public class TailJudgement : SliderEndJudgement
|
||||||
{
|
{
|
||||||
public override HitResult MaxResult => HitResult.LargeTickHit;
|
public override HitResult MaxResult => HitResult.SliderTailHit;
|
||||||
public override HitResult MinResult => HitResult.IgnoreMiss;
|
public override HitResult MinResult => HitResult.IgnoreMiss;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -277,6 +277,7 @@ namespace osu.Game.Rulesets.Osu
|
|||||||
|
|
||||||
HitResult.LargeTickHit,
|
HitResult.LargeTickHit,
|
||||||
HitResult.SmallTickHit,
|
HitResult.SmallTickHit,
|
||||||
|
HitResult.SliderTailHit,
|
||||||
HitResult.SmallBonus,
|
HitResult.SmallBonus,
|
||||||
HitResult.LargeBonus,
|
HitResult.LargeBonus,
|
||||||
};
|
};
|
||||||
@ -289,6 +290,7 @@ namespace osu.Game.Rulesets.Osu
|
|||||||
case HitResult.LargeTickHit:
|
case HitResult.LargeTickHit:
|
||||||
return "slider tick";
|
return "slider tick";
|
||||||
|
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
case HitResult.SmallTickHit:
|
case HitResult.SmallTickHit:
|
||||||
return "slider end";
|
return "slider end";
|
||||||
|
|
||||||
|
@ -91,6 +91,7 @@ namespace osu.Game.Rulesets.Osu.Scoring
|
|||||||
// When classic slider mechanics are enabled, this result comes from the tail.
|
// When classic slider mechanics are enabled, this result comes from the tail.
|
||||||
return 0.02;
|
return 0.02;
|
||||||
|
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
case HitResult.LargeTickHit:
|
case HitResult.LargeTickHit:
|
||||||
switch (result.HitObject)
|
switch (result.HitObject)
|
||||||
{
|
{
|
||||||
|
@ -57,6 +57,7 @@ namespace osu.Game.Rulesets.Osu.Scoring
|
|||||||
increase = 0.02;
|
increase = 0.02;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
case HitResult.LargeTickHit:
|
case HitResult.LargeTickHit:
|
||||||
// This result comes from either a slider tick or repeat.
|
// This result comes from either a slider tick or repeat.
|
||||||
increase = hitObject is SliderTick ? 0.015 : 0.02;
|
increase = hitObject is SliderTick ? 0.015 : 0.02;
|
||||||
|
@ -84,6 +84,7 @@ namespace osu.Game.Tests.Rulesets.Scoring
|
|||||||
[TestCase(ScoringMode.Standardised, HitResult.SmallTickHit, HitResult.SmallTickHit, 493_652)]
|
[TestCase(ScoringMode.Standardised, HitResult.SmallTickHit, HitResult.SmallTickHit, 493_652)]
|
||||||
[TestCase(ScoringMode.Standardised, HitResult.LargeTickMiss, HitResult.LargeTickHit, 0)]
|
[TestCase(ScoringMode.Standardised, HitResult.LargeTickMiss, HitResult.LargeTickHit, 0)]
|
||||||
[TestCase(ScoringMode.Standardised, HitResult.LargeTickHit, HitResult.LargeTickHit, 326_963)]
|
[TestCase(ScoringMode.Standardised, HitResult.LargeTickHit, HitResult.LargeTickHit, 326_963)]
|
||||||
|
[TestCase(ScoringMode.Standardised, HitResult.SliderTailHit, HitResult.SliderTailHit, 326_963)]
|
||||||
[TestCase(ScoringMode.Standardised, HitResult.SmallBonus, HitResult.SmallBonus, 1_000_030)]
|
[TestCase(ScoringMode.Standardised, HitResult.SmallBonus, HitResult.SmallBonus, 1_000_030)]
|
||||||
[TestCase(ScoringMode.Standardised, HitResult.LargeBonus, HitResult.LargeBonus, 1_000_150)]
|
[TestCase(ScoringMode.Standardised, HitResult.LargeBonus, HitResult.LargeBonus, 1_000_150)]
|
||||||
[TestCase(ScoringMode.Classic, HitResult.Miss, HitResult.Great, 0)]
|
[TestCase(ScoringMode.Classic, HitResult.Miss, HitResult.Great, 0)]
|
||||||
@ -96,6 +97,7 @@ namespace osu.Game.Tests.Rulesets.Scoring
|
|||||||
[TestCase(ScoringMode.Classic, HitResult.SmallTickHit, HitResult.SmallTickHit, 49_365)]
|
[TestCase(ScoringMode.Classic, HitResult.SmallTickHit, HitResult.SmallTickHit, 49_365)]
|
||||||
[TestCase(ScoringMode.Classic, HitResult.LargeTickMiss, HitResult.LargeTickHit, 0)]
|
[TestCase(ScoringMode.Classic, HitResult.LargeTickMiss, HitResult.LargeTickHit, 0)]
|
||||||
[TestCase(ScoringMode.Classic, HitResult.LargeTickHit, HitResult.LargeTickHit, 32_696)]
|
[TestCase(ScoringMode.Classic, HitResult.LargeTickHit, HitResult.LargeTickHit, 32_696)]
|
||||||
|
[TestCase(ScoringMode.Classic, HitResult.SliderTailHit, HitResult.SliderTailHit, 32_696)]
|
||||||
[TestCase(ScoringMode.Classic, HitResult.SmallBonus, HitResult.SmallBonus, 100_003)]
|
[TestCase(ScoringMode.Classic, HitResult.SmallBonus, HitResult.SmallBonus, 100_003)]
|
||||||
[TestCase(ScoringMode.Classic, HitResult.LargeBonus, HitResult.LargeBonus, 100_015)]
|
[TestCase(ScoringMode.Classic, HitResult.LargeBonus, HitResult.LargeBonus, 100_015)]
|
||||||
public void TestFourVariousResultsOneMiss(ScoringMode scoringMode, HitResult hitResult, HitResult maxResult, int expectedScore)
|
public void TestFourVariousResultsOneMiss(ScoringMode scoringMode, HitResult hitResult, HitResult maxResult, int expectedScore)
|
||||||
@ -167,6 +169,7 @@ namespace osu.Game.Tests.Rulesets.Scoring
|
|||||||
[TestCase(HitResult.Perfect, HitResult.Miss)]
|
[TestCase(HitResult.Perfect, HitResult.Miss)]
|
||||||
[TestCase(HitResult.SmallTickHit, HitResult.SmallTickMiss)]
|
[TestCase(HitResult.SmallTickHit, HitResult.SmallTickMiss)]
|
||||||
[TestCase(HitResult.LargeTickHit, HitResult.LargeTickMiss)]
|
[TestCase(HitResult.LargeTickHit, HitResult.LargeTickMiss)]
|
||||||
|
[TestCase(HitResult.SliderTailHit, HitResult.LargeTickMiss)]
|
||||||
[TestCase(HitResult.SmallBonus, HitResult.IgnoreMiss)]
|
[TestCase(HitResult.SmallBonus, HitResult.IgnoreMiss)]
|
||||||
[TestCase(HitResult.LargeBonus, HitResult.IgnoreMiss)]
|
[TestCase(HitResult.LargeBonus, HitResult.IgnoreMiss)]
|
||||||
public void TestMinResults(HitResult hitResult, HitResult expectedMinResult)
|
public void TestMinResults(HitResult hitResult, HitResult expectedMinResult)
|
||||||
@ -187,6 +190,7 @@ namespace osu.Game.Tests.Rulesets.Scoring
|
|||||||
[TestCase(HitResult.SmallTickHit, false)]
|
[TestCase(HitResult.SmallTickHit, false)]
|
||||||
[TestCase(HitResult.LargeTickMiss, true)]
|
[TestCase(HitResult.LargeTickMiss, true)]
|
||||||
[TestCase(HitResult.LargeTickHit, true)]
|
[TestCase(HitResult.LargeTickHit, true)]
|
||||||
|
[TestCase(HitResult.SliderTailHit, true)]
|
||||||
[TestCase(HitResult.SmallBonus, false)]
|
[TestCase(HitResult.SmallBonus, false)]
|
||||||
[TestCase(HitResult.LargeBonus, false)]
|
[TestCase(HitResult.LargeBonus, false)]
|
||||||
public void TestAffectsCombo(HitResult hitResult, bool expectedReturnValue)
|
public void TestAffectsCombo(HitResult hitResult, bool expectedReturnValue)
|
||||||
@ -207,6 +211,7 @@ namespace osu.Game.Tests.Rulesets.Scoring
|
|||||||
[TestCase(HitResult.SmallTickHit, true)]
|
[TestCase(HitResult.SmallTickHit, true)]
|
||||||
[TestCase(HitResult.LargeTickMiss, true)]
|
[TestCase(HitResult.LargeTickMiss, true)]
|
||||||
[TestCase(HitResult.LargeTickHit, true)]
|
[TestCase(HitResult.LargeTickHit, true)]
|
||||||
|
[TestCase(HitResult.SliderTailHit, true)]
|
||||||
[TestCase(HitResult.SmallBonus, false)]
|
[TestCase(HitResult.SmallBonus, false)]
|
||||||
[TestCase(HitResult.LargeBonus, false)]
|
[TestCase(HitResult.LargeBonus, false)]
|
||||||
public void TestAffectsAccuracy(HitResult hitResult, bool expectedReturnValue)
|
public void TestAffectsAccuracy(HitResult hitResult, bool expectedReturnValue)
|
||||||
@ -227,6 +232,7 @@ namespace osu.Game.Tests.Rulesets.Scoring
|
|||||||
[TestCase(HitResult.SmallTickHit, false)]
|
[TestCase(HitResult.SmallTickHit, false)]
|
||||||
[TestCase(HitResult.LargeTickMiss, false)]
|
[TestCase(HitResult.LargeTickMiss, false)]
|
||||||
[TestCase(HitResult.LargeTickHit, false)]
|
[TestCase(HitResult.LargeTickHit, false)]
|
||||||
|
[TestCase(HitResult.SliderTailHit, false)]
|
||||||
[TestCase(HitResult.SmallBonus, true)]
|
[TestCase(HitResult.SmallBonus, true)]
|
||||||
[TestCase(HitResult.LargeBonus, true)]
|
[TestCase(HitResult.LargeBonus, true)]
|
||||||
public void TestIsBonus(HitResult hitResult, bool expectedReturnValue)
|
public void TestIsBonus(HitResult hitResult, bool expectedReturnValue)
|
||||||
@ -247,6 +253,7 @@ namespace osu.Game.Tests.Rulesets.Scoring
|
|||||||
[TestCase(HitResult.SmallTickHit, true)]
|
[TestCase(HitResult.SmallTickHit, true)]
|
||||||
[TestCase(HitResult.LargeTickMiss, false)]
|
[TestCase(HitResult.LargeTickMiss, false)]
|
||||||
[TestCase(HitResult.LargeTickHit, true)]
|
[TestCase(HitResult.LargeTickHit, true)]
|
||||||
|
[TestCase(HitResult.SliderTailHit, true)]
|
||||||
[TestCase(HitResult.SmallBonus, true)]
|
[TestCase(HitResult.SmallBonus, true)]
|
||||||
[TestCase(HitResult.LargeBonus, true)]
|
[TestCase(HitResult.LargeBonus, true)]
|
||||||
public void TestIsHit(HitResult hitResult, bool expectedReturnValue)
|
public void TestIsHit(HitResult hitResult, bool expectedReturnValue)
|
||||||
@ -267,6 +274,7 @@ namespace osu.Game.Tests.Rulesets.Scoring
|
|||||||
[TestCase(HitResult.SmallTickHit, true)]
|
[TestCase(HitResult.SmallTickHit, true)]
|
||||||
[TestCase(HitResult.LargeTickMiss, true)]
|
[TestCase(HitResult.LargeTickMiss, true)]
|
||||||
[TestCase(HitResult.LargeTickHit, true)]
|
[TestCase(HitResult.LargeTickHit, true)]
|
||||||
|
[TestCase(HitResult.SliderTailHit, true)]
|
||||||
[TestCase(HitResult.SmallBonus, true)]
|
[TestCase(HitResult.SmallBonus, true)]
|
||||||
[TestCase(HitResult.LargeBonus, true)]
|
[TestCase(HitResult.LargeBonus, true)]
|
||||||
public void TestIsScorable(HitResult hitResult, bool expectedReturnValue)
|
public void TestIsScorable(HitResult hitResult, bool expectedReturnValue)
|
||||||
|
@ -316,7 +316,7 @@ namespace osu.Game.Database
|
|||||||
// when playing a beatmap with no bonus objects, with mods that have a 0.0x multiplier on stable (relax/autopilot).
|
// when playing a beatmap with no bonus objects, with mods that have a 0.0x multiplier on stable (relax/autopilot).
|
||||||
// In such cases, just assume 0.
|
// In such cases, just assume 0.
|
||||||
double comboProportion = maximumLegacyComboScore + maximumLegacyBonusScore > 0
|
double comboProportion = maximumLegacyComboScore + maximumLegacyBonusScore > 0
|
||||||
? ((double)score.LegacyTotalScore - legacyAccScore) / (maximumLegacyComboScore + maximumLegacyBonusScore)
|
? Math.Max((double)score.LegacyTotalScore - legacyAccScore, 0) / (maximumLegacyComboScore + maximumLegacyBonusScore)
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
// We assume the bonus proportion only makes up the rest of the score that exceeds maximumLegacyBaseScore.
|
// We assume the bonus proportion only makes up the rest of the score that exceeds maximumLegacyBaseScore.
|
||||||
|
@ -73,6 +73,7 @@ namespace osu.Game.Rulesets.Judgements
|
|||||||
return HitResult.SmallTickMiss;
|
return HitResult.SmallTickMiss;
|
||||||
|
|
||||||
case HitResult.LargeTickHit:
|
case HitResult.LargeTickHit:
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
return HitResult.LargeTickMiss;
|
return HitResult.LargeTickMiss;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -104,6 +105,7 @@ namespace osu.Game.Rulesets.Judgements
|
|||||||
case HitResult.SmallTickMiss:
|
case HitResult.SmallTickMiss:
|
||||||
return -DEFAULT_MAX_HEALTH_INCREASE * 0.5;
|
return -DEFAULT_MAX_HEALTH_INCREASE * 0.5;
|
||||||
|
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
case HitResult.LargeTickHit:
|
case HitResult.LargeTickHit:
|
||||||
return DEFAULT_MAX_HEALTH_INCREASE;
|
return DEFAULT_MAX_HEALTH_INCREASE;
|
||||||
|
|
||||||
|
@ -139,6 +139,13 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
[Order(15)]
|
[Order(15)]
|
||||||
ComboBreak,
|
ComboBreak,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A special judgement similar to <see cref="LargeTickHit"/> that's used to increase the valuation of the final tick of a slider.
|
||||||
|
/// </summary>
|
||||||
|
[EnumMember(Value = "slider_tail_hit")]
|
||||||
|
[Order(16)]
|
||||||
|
SliderTailHit,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A special result used as a padding value for legacy rulesets. It is a hit type and affects combo, but does not affect the base score (does not affect accuracy).
|
/// A special result used as a padding value for legacy rulesets. It is a hit type and affects combo, but does not affect the base score (does not affect accuracy).
|
||||||
///
|
///
|
||||||
@ -188,6 +195,7 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
case HitResult.LargeTickMiss:
|
case HitResult.LargeTickMiss:
|
||||||
case HitResult.LegacyComboIncrease:
|
case HitResult.LegacyComboIncrease:
|
||||||
case HitResult.ComboBreak:
|
case HitResult.ComboBreak:
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -246,6 +254,7 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
case HitResult.LargeTickMiss:
|
case HitResult.LargeTickMiss:
|
||||||
case HitResult.SmallTickHit:
|
case HitResult.SmallTickHit:
|
||||||
case HitResult.SmallTickMiss:
|
case HitResult.SmallTickMiss:
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -329,6 +338,9 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
case HitResult.ComboBreak:
|
case HitResult.ComboBreak:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Note that IgnoreHit and IgnoreMiss are excluded as they do not affect score.
|
// Note that IgnoreHit and IgnoreMiss are excluded as they do not affect score.
|
||||||
return result >= HitResult.Miss && result < HitResult.IgnoreMiss;
|
return result >= HitResult.Miss && result < HitResult.IgnoreMiss;
|
||||||
@ -383,6 +395,9 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
if (minResult == HitResult.IgnoreMiss)
|
if (minResult == HitResult.IgnoreMiss)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (maxResult == HitResult.SliderTailHit && minResult != HitResult.LargeTickMiss)
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(minResult), $"{HitResult.LargeTickMiss} is the only valid minimum result for a {maxResult} judgement.");
|
||||||
|
|
||||||
if (maxResult == HitResult.LargeTickHit && minResult != HitResult.LargeTickMiss)
|
if (maxResult == HitResult.LargeTickHit && minResult != HitResult.LargeTickMiss)
|
||||||
throw new ArgumentOutOfRangeException(nameof(minResult), $"{HitResult.LargeTickMiss} is the only valid minimum result for a {maxResult} judgement.");
|
throw new ArgumentOutOfRangeException(nameof(minResult), $"{HitResult.LargeTickMiss} is the only valid minimum result for a {maxResult} judgement.");
|
||||||
|
|
||||||
|
@ -322,6 +322,9 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
case HitResult.LargeTickHit:
|
case HitResult.LargeTickHit:
|
||||||
return 30;
|
return 30;
|
||||||
|
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
|
return 150;
|
||||||
|
|
||||||
case HitResult.Meh:
|
case HitResult.Meh:
|
||||||
return 50;
|
return 50;
|
||||||
|
|
||||||
|
@ -350,6 +350,7 @@ namespace osu.Game.Scoring
|
|||||||
{
|
{
|
||||||
case HitResult.SmallTickHit:
|
case HitResult.SmallTickHit:
|
||||||
case HitResult.LargeTickHit:
|
case HitResult.LargeTickHit:
|
||||||
|
case HitResult.SliderTailHit:
|
||||||
case HitResult.LargeBonus:
|
case HitResult.LargeBonus:
|
||||||
case HitResult.SmallBonus:
|
case HitResult.SmallBonus:
|
||||||
if (MaximumStatistics.TryGetValue(r.result, out int count) && count > 0)
|
if (MaximumStatistics.TryGetValue(r.result, out int count) && count > 0)
|
||||||
|
@ -224,7 +224,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
row.Alpha = time < selectedGroupStartTime || time > selectedGroupEndTime ? 0.2f : 1;
|
row.Alpha = time < selectedGroupStartTime || time > selectedGroupEndTime ? 0.2f : 1;
|
||||||
row.WaveformOffsetTo(-offset, animated);
|
row.WaveformOffsetTo(-offset, animated);
|
||||||
row.WaveformScale = new Vector2(scale, 1);
|
row.WaveformScale = new Vector2(scale, 1);
|
||||||
row.BeatIndex = (int)Math.Floor(index);
|
row.BeatIndex = (int)Math.Round(index);
|
||||||
|
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user