1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-13 10:43:04 +08:00

Merge pull request #3574 from smoogipoo/hitobject-perf-improvements

Various performance improvements around hitobjects
This commit is contained in:
Dean Herbert 2018-10-11 22:16:48 +09:00 committed by GitHub
commit 5d26c1b771
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,10 +1,8 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Lists;
using osu.Game.Audio;
using osu.Game.Beatmaps;
@ -58,10 +56,10 @@ namespace osu.Game.Rulesets.Objects
/// </summary>
public HitWindows HitWindows { get; set; }
private readonly Lazy<SortedList<HitObject>> nestedHitObjects = new Lazy<SortedList<HitObject>>(() => new SortedList<HitObject>((h1, h2) => h1.StartTime.CompareTo(h2.StartTime)));
private readonly SortedList<HitObject> nestedHitObjects = new SortedList<HitObject>(compareObjects);
[JsonIgnore]
public IReadOnlyList<HitObject> NestedHitObjects => nestedHitObjects.Value;
public IReadOnlyList<HitObject> NestedHitObjects => nestedHitObjects;
/// <summary>
/// Applies default values to this HitObject.
@ -72,18 +70,14 @@ namespace osu.Game.Rulesets.Objects
{
ApplyDefaultsToSelf(controlPointInfo, difficulty);
if (nestedHitObjects.IsValueCreated)
nestedHitObjects.Value.Clear();
nestedHitObjects.Clear();
CreateNestedHitObjects();
if (nestedHitObjects.IsValueCreated)
foreach (var h in nestedHitObjects)
{
nestedHitObjects.Value.ForEach(h =>
{
h.HitWindows = HitWindows;
h.ApplyDefaults(controlPointInfo, difficulty);
});
h.HitWindows = HitWindows;
h.ApplyDefaults(controlPointInfo, difficulty);
}
}
@ -104,7 +98,7 @@ namespace osu.Game.Rulesets.Objects
{
}
protected void AddNested(HitObject hitObject) => nestedHitObjects.Value.Add(hitObject);
protected void AddNested(HitObject hitObject) => nestedHitObjects.Add(hitObject);
/// <summary>
/// Creates the <see cref="Judgement"/> that represents the scoring information for this <see cref="HitObject"/>.
@ -120,5 +114,7 @@ namespace osu.Game.Rulesets.Objects
/// </para>
/// </summary>
protected virtual HitWindows CreateHitWindows() => new HitWindows();
private static int compareObjects(HitObject first, HitObject second) => first.StartTime.CompareTo(second.StartTime);
}
}