Remove Component inheritance

This commit is contained in:
smoogipoo
2021-05-18 18:59:45 +09:00
parent 633f841a0f
commit 97f4f7bbd1
3 changed files with 29 additions and 17 deletions

View File

@ -12,7 +12,7 @@ using osu.Game.Tests.Visual;
namespace osu.Game.Tests.Editing namespace osu.Game.Tests.Editing
{ {
public class TestSceneHitObjectContainerEventQueue : OsuTestScene public class TestSceneHitObjectContainerEventBuffer : OsuTestScene
{ {
private readonly TestHitObject testObj = new TestHitObject(); private readonly TestHitObject testObj = new TestHitObject();
@ -50,7 +50,6 @@ namespace osu.Game.Tests.Editing
{ {
topPlayfield, topPlayfield,
intermediateDrawable = new TestDrawable(), intermediateDrawable = new TestDrawable(),
eventBuffer
}; };
}); });
@ -117,6 +116,12 @@ namespace osu.Game.Tests.Editing
addCheckStep(finished: true); addCheckStep(finished: true);
} }
protected override void UpdateAfterChildren()
{
base.UpdateAfterChildren();
eventBuffer.Update();
}
private void addResetStep() => AddStep("reset", reset); private void addResetStep() => AddStep("reset", reset);
private void reset() private void reset()

View File

@ -23,6 +23,8 @@ namespace osu.Game.Screens.Edit.Compose.Components
protected readonly HitObjectComposer Composer; protected readonly HitObjectComposer Composer;
private HitObjectUsageEventBuffer usageEventBuffer;
protected EditorBlueprintContainer(HitObjectComposer composer) protected EditorBlueprintContainer(HitObjectComposer composer)
{ {
Composer = composer; Composer = composer;
@ -46,14 +48,19 @@ namespace osu.Game.Screens.Edit.Compose.Components
foreach (var obj in Composer.HitObjects) foreach (var obj in Composer.HitObjects)
AddBlueprintFor(obj.HitObject); AddBlueprintFor(obj.HitObject);
var eventQueue = new HitObjectUsageEventBuffer(Composer.Playfield); usageEventBuffer = new HitObjectUsageEventBuffer(Composer.Playfield);
eventQueue.HitObjectUsageBegan += AddBlueprintFor; usageEventBuffer.HitObjectUsageBegan += AddBlueprintFor;
eventQueue.HitObjectUsageFinished += RemoveBlueprintFor; usageEventBuffer.HitObjectUsageFinished += RemoveBlueprintFor;
eventQueue.HitObjectUsageTransferred += TransferBlueprintFor; usageEventBuffer.HitObjectUsageTransferred += TransferBlueprintFor;
AddInternal(eventQueue);
} }
} }
protected override void Update()
{
base.Update();
usageEventBuffer?.Update();
}
protected override IEnumerable<SelectionBlueprint<HitObject>> SortForMovement(IReadOnlyList<SelectionBlueprint<HitObject>> blueprints) protected override IEnumerable<SelectionBlueprint<HitObject>> SortForMovement(IReadOnlyList<SelectionBlueprint<HitObject>> blueprints)
=> blueprints.OrderBy(b => b.Item.StartTime); => blueprints.OrderBy(b => b.Item.StartTime);
@ -145,6 +152,8 @@ namespace osu.Game.Screens.Edit.Compose.Components
Beatmap.HitObjectAdded -= AddBlueprintFor; Beatmap.HitObjectAdded -= AddBlueprintFor;
Beatmap.HitObjectRemoved -= RemoveBlueprintFor; Beatmap.HitObjectRemoved -= RemoveBlueprintFor;
} }
usageEventBuffer?.Dispose();
} }
} }
} }

View File

@ -5,7 +5,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using osu.Framework.Graphics;
using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.UI; using osu.Game.Rulesets.UI;
@ -15,7 +14,7 @@ namespace osu.Game.Screens.Edit.Compose
/// <summary> /// <summary>
/// Buffers events from the many <see cref="HitObjectContainer"/>s in a nested <see cref="Playfield"/> hierarchy. /// Buffers events from the many <see cref="HitObjectContainer"/>s in a nested <see cref="Playfield"/> hierarchy.
/// </summary> /// </summary>
internal class HitObjectUsageEventBuffer : Component internal class HitObjectUsageEventBuffer : IDisposable
{ {
/// <summary> /// <summary>
/// Invoked when a <see cref="HitObject"/> becomes used by a <see cref="DrawableHitObject"/>. /// Invoked when a <see cref="HitObject"/> becomes used by a <see cref="DrawableHitObject"/>.
@ -91,10 +90,8 @@ namespace osu.Game.Screens.Edit.Compose
} }
} }
protected override void Update() public void Update()
{ {
base.Update();
foreach (var (hitObject, e) in pendingEvents) foreach (var (hitObject, e) in pendingEvents)
{ {
switch (e) switch (e)
@ -116,12 +113,13 @@ namespace osu.Game.Screens.Edit.Compose
pendingEvents.Clear(); pendingEvents.Clear();
} }
protected override void Dispose(bool isDisposing) public void Dispose()
{ {
base.Dispose(isDisposing); if (playfield != null)
{
playfield.HitObjectUsageBegan -= onHitObjectUsageBegan; playfield.HitObjectUsageBegan -= onHitObjectUsageBegan;
playfield.HitObjectUsageFinished -= onHitObjectUsageFinished; playfield.HitObjectUsageFinished -= onHitObjectUsageFinished;
}
} }
private enum EventType private enum EventType