mirror of
https://github.com/osukey/osukey.git
synced 2025-07-01 16:29:58 +09:00
Remove Component inheritance
This commit is contained in:
@ -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()
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user