1
0
mirror of https://github.com/ppy/osu.git synced 2026-05-22 06:29:54 +08:00

Implement math for customizing sizes

This commit is contained in:
O Thiago
2022-09-24 15:54:57 -04:00
Unverified
parent 809f1bc2e8
commit 587dcfc8a7
+19 -17
View File
@@ -39,6 +39,9 @@ namespace osu.Game.Rulesets.Mods
[SettingSource("Change size based on combo", "Decrease the flashlight size as combo increases.")]
public abstract BindableBool ComboBasedSize { get; }
[SettingSource("Change size after how many combo", "Changes after how many combo does flashlight change size")]
public abstract BindableFloat ChangeSizeAfterHowManyCombo { get; }
[SettingSource("Final change size combo", "Changes on which combo the flashlight size reaches it final combo based size.")]
public abstract BindableInt FinalChangeSizeCombo { get; }
@@ -108,19 +111,23 @@ namespace osu.Game.Rulesets.Mods
public List<BreakPeriod> Breaks = new List<BreakPeriod>();
private readonly float defaultFlashlightSize;
private readonly float sizeMultiplier;
private readonly bool comboBasedSize;
private readonly float appliedSize;
private readonly float finalFlashlightDecreasing;
private readonly float maximumChangeSizeComboReachedTimes;
private readonly int finalChangeSizeCombo;
private readonly int finalFlashlightSize;
private readonly float changeSizeAfterHowManyCombo;
private float getChangeSizeComboReachedTimesForCombo(int combo) => MathF.Floor(combo / changeSizeAfterHowManyCombo);
protected Flashlight(ModFlashlight modFlashlight)
{
defaultFlashlightSize = modFlashlight.DefaultFlashlightSize;
sizeMultiplier = modFlashlight.SizeMultiplier.Value;
comboBasedSize = modFlashlight.ComboBasedSize.Value;
changeSizeAfterHowManyCombo = modFlashlight.ChangeSizeAfterHowManyCombo.Value;
finalChangeSizeCombo = modFlashlight.FinalChangeSizeCombo.Value;
finalFlashlightSize = modFlashlight.FinalFlashlightSize.Value;
finalFlashlightDecreasing = 1 - modFlashlight.FinalFlashlightSize.Value;
appliedSize = modFlashlight.DefaultFlashlightSize * modFlashlight.SizeMultiplier.Value;
maximumChangeSizeComboReachedTimes = getChangeSizeComboReachedTimesForCombo(finalChangeSizeCombo);
}
[BackgroundDependencyLoader]
@@ -156,17 +163,12 @@ namespace osu.Game.Rulesets.Mods
protected float GetSizeFor(int combo)
{
float size = defaultFlashlightSize * sizeMultiplier;
int comboForSize = Math.Min(finalChangeSizeCombo, combo);
if (comboBasedSize)
{
if (combo >= 200)
size *= 0.8f;
else if (combo >= 100)
size *= 0.9f;
}
float changeSizeComboReachedTimes = getChangeSizeComboReachedTimesForCombo(comboForSize);
float changeSizeComboReachedTimesRatio = changeSizeComboReachedTimes / maximumChangeSizeComboReachedTimes;
return size;
return appliedSize * (finalFlashlightDecreasing * changeSizeComboReachedTimesRatio);
}
private Vector2 flashlightPosition;