mirror of
https://github.com/ppy/osu.git
synced 2025-01-31 05:13:22 +08:00
Merge pull request #31446 from EVAST9919/new-combo-editor
Fix performance degradation while trying to place object with a new combo in the editor.
This commit is contained in:
commit
ef7982fbfa
@ -159,27 +159,26 @@ namespace osu.Game.Rulesets.Catch.Objects
|
|||||||
{
|
{
|
||||||
// Note that this implementation is shared with the osu! ruleset's implementation.
|
// Note that this implementation is shared with the osu! ruleset's implementation.
|
||||||
// If a change is made here, OsuHitObject.cs should also be updated.
|
// If a change is made here, OsuHitObject.cs should also be updated.
|
||||||
ComboIndex = lastObj?.ComboIndex ?? 0;
|
int index = lastObj?.ComboIndex ?? 0;
|
||||||
ComboIndexWithOffsets = lastObj?.ComboIndexWithOffsets ?? 0;
|
int indexWithOffsets = lastObj?.ComboIndexWithOffsets ?? 0;
|
||||||
IndexInCurrentCombo = (lastObj?.IndexInCurrentCombo + 1) ?? 0;
|
int inCurrentCombo = (lastObj?.IndexInCurrentCombo + 1) ?? 0;
|
||||||
|
|
||||||
if (this is BananaShower)
|
// - For the purpose of combo colours, spinners never start a new combo even if they are flagged as doing so.
|
||||||
|
// - At decode time, the first hitobject in the beatmap and the first hitobject after a banana shower are both enforced to be a new combo,
|
||||||
|
// but this isn't directly enforced by the editor so the extra checks against the last hitobject are duplicated here.
|
||||||
|
if (this is not BananaShower && (NewCombo || lastObj == null || lastObj is BananaShower))
|
||||||
{
|
{
|
||||||
// For the purpose of combo colours, spinners never start a new combo even if they are flagged as doing so.
|
inCurrentCombo = 0;
|
||||||
return;
|
index++;
|
||||||
}
|
indexWithOffsets += ComboOffset + 1;
|
||||||
|
|
||||||
// At decode time, the first hitobject in the beatmap and the first hitobject after a banana shower are both enforced to be a new combo,
|
|
||||||
// but this isn't directly enforced by the editor so the extra checks against the last hitobject are duplicated here.
|
|
||||||
if (NewCombo || lastObj == null || lastObj is BananaShower)
|
|
||||||
{
|
|
||||||
IndexInCurrentCombo = 0;
|
|
||||||
ComboIndex++;
|
|
||||||
ComboIndexWithOffsets += ComboOffset + 1;
|
|
||||||
|
|
||||||
if (lastObj != null)
|
if (lastObj != null)
|
||||||
lastObj.LastInCombo = true;
|
lastObj.LastInCombo = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ComboIndex = index;
|
||||||
|
ComboIndexWithOffsets = indexWithOffsets;
|
||||||
|
IndexInCurrentCombo = inCurrentCombo;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override HitWindows CreateHitWindows() => HitWindows.Empty;
|
protected override HitWindows CreateHitWindows() => HitWindows.Empty;
|
||||||
|
@ -184,27 +184,26 @@ namespace osu.Game.Rulesets.Osu.Objects
|
|||||||
{
|
{
|
||||||
// Note that this implementation is shared with the osu!catch ruleset's implementation.
|
// Note that this implementation is shared with the osu!catch ruleset's implementation.
|
||||||
// If a change is made here, CatchHitObject.cs should also be updated.
|
// If a change is made here, CatchHitObject.cs should also be updated.
|
||||||
ComboIndex = lastObj?.ComboIndex ?? 0;
|
int index = lastObj?.ComboIndex ?? 0;
|
||||||
ComboIndexWithOffsets = lastObj?.ComboIndexWithOffsets ?? 0;
|
int indexWithOffsets = lastObj?.ComboIndexWithOffsets ?? 0;
|
||||||
IndexInCurrentCombo = (lastObj?.IndexInCurrentCombo + 1) ?? 0;
|
int inCurrentCombo = (lastObj?.IndexInCurrentCombo + 1) ?? 0;
|
||||||
|
|
||||||
if (this is Spinner)
|
// - For the purpose of combo colours, spinners never start a new combo even if they are flagged as doing so.
|
||||||
|
// - At decode time, the first hitobject in the beatmap and the first hitobject after a spinner are both enforced to be a new combo,
|
||||||
|
// but this isn't directly enforced by the editor so the extra checks against the last hitobject are duplicated here.
|
||||||
|
if (this is not Spinner && (NewCombo || lastObj == null || lastObj is Spinner))
|
||||||
{
|
{
|
||||||
// For the purpose of combo colours, spinners never start a new combo even if they are flagged as doing so.
|
inCurrentCombo = 0;
|
||||||
return;
|
index++;
|
||||||
}
|
indexWithOffsets += ComboOffset + 1;
|
||||||
|
|
||||||
// At decode time, the first hitobject in the beatmap and the first hitobject after a spinner are both enforced to be a new combo,
|
|
||||||
// but this isn't directly enforced by the editor so the extra checks against the last hitobject are duplicated here.
|
|
||||||
if (NewCombo || lastObj == null || lastObj is Spinner)
|
|
||||||
{
|
|
||||||
IndexInCurrentCombo = 0;
|
|
||||||
ComboIndex++;
|
|
||||||
ComboIndexWithOffsets += ComboOffset + 1;
|
|
||||||
|
|
||||||
if (lastObj != null)
|
if (lastObj != null)
|
||||||
lastObj.LastInCombo = true;
|
lastObj.LastInCombo = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ComboIndex = index;
|
||||||
|
ComboIndexWithOffsets = indexWithOffsets;
|
||||||
|
IndexInCurrentCombo = inCurrentCombo;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override HitWindows CreateHitWindows() => new OsuHitWindows();
|
protected override HitWindows CreateHitWindows() => new OsuHitWindows();
|
||||||
|
@ -87,19 +87,23 @@ namespace osu.Game.Rulesets.Objects.Types
|
|||||||
/// <param name="lastObj">The previous hitobject, or null if this is the first object in the beatmap.</param>
|
/// <param name="lastObj">The previous hitobject, or null if this is the first object in the beatmap.</param>
|
||||||
void UpdateComboInformation(IHasComboInformation? lastObj)
|
void UpdateComboInformation(IHasComboInformation? lastObj)
|
||||||
{
|
{
|
||||||
ComboIndex = lastObj?.ComboIndex ?? 0;
|
int index = lastObj?.ComboIndex ?? 0;
|
||||||
ComboIndexWithOffsets = lastObj?.ComboIndexWithOffsets ?? 0;
|
int indexWithOffsets = lastObj?.ComboIndexWithOffsets ?? 0;
|
||||||
IndexInCurrentCombo = (lastObj?.IndexInCurrentCombo + 1) ?? 0;
|
int inCurrentCombo = (lastObj?.IndexInCurrentCombo + 1) ?? 0;
|
||||||
|
|
||||||
if (NewCombo || lastObj == null)
|
if (NewCombo || lastObj == null)
|
||||||
{
|
{
|
||||||
IndexInCurrentCombo = 0;
|
inCurrentCombo = 0;
|
||||||
ComboIndex++;
|
index++;
|
||||||
ComboIndexWithOffsets += ComboOffset + 1;
|
indexWithOffsets += ComboOffset + 1;
|
||||||
|
|
||||||
if (lastObj != null)
|
if (lastObj != null)
|
||||||
lastObj.LastInCombo = true;
|
lastObj.LastInCombo = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ComboIndex = index;
|
||||||
|
ComboIndexWithOffsets = indexWithOffsets;
|
||||||
|
IndexInCurrentCombo = inCurrentCombo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user