Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for ruleset-specific blueprints in editor timeline #29973

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions osu.Game.Rulesets.Mania/Edit/ManiaTimelineBlueprintContainer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using osu.Game.Rulesets.Edit;
using osu.Game.Rulesets.Objects;
using osu.Game.Screens.Edit.Compose.Components.Timeline;

namespace osu.Game.Rulesets.Mania.Edit
{
public partial class ManiaTimelineBlueprintContainer : TimelineBlueprintContainer
{
public ManiaTimelineBlueprintContainer(HitObjectComposer composer)
: base(composer)
{
}

public override TimelineHitObjectBlueprint? CreateTimelineBlueprintFor(HitObject hitObject)
{
return null;
}
}
}
3 changes: 3 additions & 0 deletions osu.Game.Rulesets.Mania/ManiaRuleset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
using osu.Game.Rulesets.Scoring.Legacy;
using osu.Game.Rulesets.UI;
using osu.Game.Scoring;
using osu.Game.Screens.Edit.Compose.Components.Timeline;
using osu.Game.Screens.Edit.Setup;
using osu.Game.Screens.Ranking.Statistics;
using osu.Game.Skinning;
Expand Down Expand Up @@ -64,6 +65,8 @@ public class ManiaRuleset : Ruleset, ILegacyRuleset

public override HitObjectComposer CreateHitObjectComposer() => new ManiaHitObjectComposer(this);

public override TimelineBlueprintContainer CreateTimelineBlueprintContainer(HitObjectComposer composer) => new ManiaTimelineBlueprintContainer(composer);

public override IBeatmapVerifier CreateBeatmapVerifier() => new ManiaBeatmapVerifier();

public override ISkin? CreateSkinTransformer(ISkin skin, IBeatmap beatmap)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using osu.Game.Rulesets.Objects;
using osu.Game.Screens.Edit.Compose.Components.Timeline;

namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Spinners
{
public partial class SpinnerTimelineBlueprint : TimelineHitObjectBlueprint
{
public SpinnerTimelineBlueprint(HitObject item)
: base(item)
{
SamplePointPiece.X = 1;
}
}
}
30 changes: 30 additions & 0 deletions osu.Game.Rulesets.Osu/Edit/OsuTimelineBlueprintContainer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using osu.Game.Rulesets.Edit;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Osu.Edit.Blueprints.Spinners;
using osu.Game.Rulesets.Osu.Objects;
using osu.Game.Screens.Edit.Compose.Components.Timeline;

namespace osu.Game.Rulesets.Osu.Edit
{
public partial class OsuTimelineBlueprintContainer : TimelineBlueprintContainer
{
public OsuTimelineBlueprintContainer(HitObjectComposer composer)
: base(composer)
{
}

public override TimelineHitObjectBlueprint? CreateTimelineBlueprintFor(HitObject hitObject)
{
switch (hitObject)
{
case Spinner spinner:
return new SpinnerTimelineBlueprint(spinner);
}

return base.CreateTimelineBlueprintFor(hitObject);
}
}
}
3 changes: 3 additions & 0 deletions osu.Game.Rulesets.Osu/OsuRuleset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
using osu.Game.Rulesets.Scoring.Legacy;
using osu.Game.Rulesets.UI;
using osu.Game.Scoring;
using osu.Game.Screens.Edit.Compose.Components.Timeline;
using osu.Game.Screens.Edit.Setup;
using osu.Game.Screens.Ranking.Statistics;
using osu.Game.Skinning;
Expand Down Expand Up @@ -235,6 +236,8 @@ public override IEnumerable<Mod> GetModsFor(ModType type)

public override HitObjectComposer CreateHitObjectComposer() => new OsuHitObjectComposer(this);

public override TimelineBlueprintContainer CreateTimelineBlueprintContainer(HitObjectComposer composer) => new OsuTimelineBlueprintContainer(composer);

public override IBeatmapVerifier CreateBeatmapVerifier() => new OsuBeatmapVerifier();

public override string Description => "osu!";
Expand Down
3 changes: 3 additions & 0 deletions osu.Game/Rulesets/Ruleset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
using osu.Game.Rulesets.Scoring;
using osu.Game.Rulesets.UI;
using osu.Game.Scoring;
using osu.Game.Screens.Edit.Compose.Components.Timeline;
using osu.Game.Screens.Edit.Setup;
using osu.Game.Screens.Ranking.Statistics;
using osu.Game.Skinning;
Expand Down Expand Up @@ -270,6 +271,8 @@ protected Ruleset()

public virtual HitObjectComposer? CreateHitObjectComposer() => null;

public virtual TimelineBlueprintContainer CreateTimelineBlueprintContainer(HitObjectComposer composer) => new TimelineBlueprintContainer(composer);

public virtual IBeatmapVerifier? CreateBeatmapVerifier() => null;

public virtual Drawable CreateIcon() => new SpriteIcon { Icon = FontAwesome.Solid.QuestionCircle };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Extensions.Color4Extensions;
Expand All @@ -25,7 +26,7 @@

namespace osu.Game.Screens.Edit.Compose.Components.Timeline
{
internal partial class TimelineBlueprintContainer : EditorBlueprintContainer
public partial class TimelineBlueprintContainer : EditorBlueprintContainer
{
[Resolved(CanBeNull = true)]
private Timeline timeline { get; set; }
Expand Down Expand Up @@ -84,7 +85,7 @@
{
placementBlueprint = CreateBlueprintFor(obj.NewValue).AsNonNull();

placementBlueprint.Colour = OsuColour.Gray(0.9f);

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Linux, MultiThreaded)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestNoSeekOnNotePlacement

Failed test found in: TestResults-Linux-MultiThreaded.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at osu.Framework.Extensions.TaskExtensions.WaitSafely(Task task)
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in /home/runner/work/osu/osu/osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.SetValue(T previousValue, T value, Boolean bypassChecks, Bindable`1 source)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.SetValue(T previousValue, T value, Boolean bypassChecks, Bindable`1 source)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.InvokeTask()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Threading.GameThread.RunSingleFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Linux, MultiThreaded)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestPlacementBeforeTrackStart

Failed test found in: TestResults-Linux-MultiThreaded.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in /home/runner/work/osu/osu/osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.SetValue(T previousValue, T value, Boolean bypassChecks, Bindable`1 source)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.SetValue(T previousValue, T value, Boolean bypassChecks, Bindable`1 source)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.InvokeTask()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Threading.GameThread.RunSingleFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Linux, MultiThreaded)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestSeekOnNotePlacement

Failed test found in: TestResults-Linux-MultiThreaded.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in /home/runner/work/osu/osu/osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.SetValue(T previousValue, T value, Boolean bypassChecks, Bindable`1 source)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.SetValue(T previousValue, T value, Boolean bypassChecks, Bindable`1 source)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.InvokeTask()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Threading.GameThread.RunSingleFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Linux, SingleThread)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestNoSeekOnNotePlacement

Failed test found in: TestResults-Linux-SingleThread.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at osu.Framework.Extensions.TaskExtensions.WaitSafely(Task task)
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in /home/runner/work/osu/osu/osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Linux, SingleThread)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestPlacementBeforeTrackStart

Failed test found in: TestResults-Linux-SingleThread.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in /home/runner/work/osu/osu/osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Linux, SingleThread)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestSeekOnNotePlacement

Failed test found in: TestResults-Linux-SingleThread.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in /home/runner/work/osu/osu/osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in /home/runner/work/osu/osu/osu.Game/Rulesets/Edit/PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in /home/runner/work/osu/osu/osu.Game.Rulesets.Mania/Edit/Blueprints/NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Windows, MultiThreaded)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestNoSeekOnNotePlacement

Failed test found in: TestResults-Windows-MultiThreaded.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at osu.Framework.Extensions.TaskExtensions.WaitSafely(Task task)
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in D:\a\osu\osu\osu.Game\Screens\Edit\Compose\Components\Timeline\TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in D:\a\osu\osu\osu.Game\Rulesets\Edit\HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in D:\a\osu\osu\osu.Game\Rulesets\Edit\PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Windows, MultiThreaded)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestPlacementBeforeTrackStart

Failed test found in: TestResults-Windows-MultiThreaded.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in D:\a\osu\osu\osu.Game\Screens\Edit\Compose\Components\Timeline\TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in D:\a\osu\osu\osu.Game\Rulesets\Edit\HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in D:\a\osu\osu\osu.Game\Rulesets\Edit\PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Windows, MultiThreaded)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestSeekOnNotePlacement

Failed test found in: TestResults-Windows-MultiThreaded.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in D:\a\osu\osu\osu.Game\Screens\Edit\Compose\Components\Timeline\TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in D:\a\osu\osu\osu.Game\Rulesets\Edit\HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in D:\a\osu\osu\osu.Game\Rulesets\Edit\PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Windows, SingleThread)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestNoSeekOnNotePlacement

Failed test found in: TestResults-Windows-SingleThread.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in D:\a\osu\osu\osu.Game\Screens\Edit\Compose\Components\Timeline\TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in D:\a\osu\osu\osu.Game\Rulesets\Edit\HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in D:\a\osu\osu\osu.Game\Rulesets\Edit\PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Windows, SingleThread)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestPlacementBeforeTrackStart

Failed test found in: TestResults-Windows-SingleThread.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in D:\a\osu\osu\osu.Game\Screens\Edit\Compose\Components\Timeline\TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in D:\a\osu\osu\osu.Game\Rulesets\Edit\HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in D:\a\osu\osu\osu.Game\Rulesets\Edit\PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 88 in osu.Game/Screens/Edit/Compose/Components/Timeline/TimelineBlueprintContainer.cs

View workflow job for this annotation

GitHub Actions / Test Results (Windows, SingleThread)

osu.Game.Rulesets.Mania.Tests.Editor.TestSceneObjectPlacement ► TestSeekOnNotePlacement

Failed test found in: TestResults-Windows-SingleThread.trx Error: System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.) ----> System.NullReferenceException : Object reference not set to an instance of an object.
Raw output
System.AggregateException : One or more errors occurred. (Object reference not set to an instance of an object.)
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
   at osu.Framework.Testing.TestScene.checkForErrors()
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test)
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--NullReferenceException
   at osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineBlueprintContainer.placementChanged(ValueChangedEvent`1 obj) in D:\a\osu\osu\osu.Game\Screens\Edit\Compose\Components\Timeline\TimelineBlueprintContainer.cs:line 88
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at osu.Game.Rulesets.Edit.HitObjectComposer`1.BeginPlacement(HitObject hitObject) in D:\a\osu\osu\osu.Game\Rulesets\Edit\HitObjectComposer.cs:line 483
   at osu.Game.Rulesets.Edit.PlacementBlueprint.BeginPlacement(Boolean commitStart) in D:\a\osu\osu\osu.Game\Rulesets\Edit\PlacementBlueprint.cs:line 94
   at osu.Game.Rulesets.Mania.Edit.Blueprints.ManiaPlacementBlueprint`1.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\ManiaPlacementBlueprint.cs:line 52
   at osu.Game.Rulesets.Mania.Edit.Blueprints.NotePlacementBlueprint.OnMouseDown(MouseDownEvent e) in D:\a\osu\osu\osu.Game.Rulesets.Mania\Edit\Blueprints\NotePlacementBlueprint.cs:line 41
   at osu.Framework.Graphics.Drawable.TriggerEvent(UIEvent e)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.InputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.StateChanges.MouseButtonInput.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

// TODO: this is out of order, causing incorrect stacking height.
SelectionBlueprints.Add(placementBlueprint);
Expand Down Expand Up @@ -163,14 +164,14 @@

protected override SelectionHandler<HitObject> CreateSelectionHandler() => new TimelineSelectionHandler();

protected override SelectionBlueprint<HitObject> CreateBlueprintFor(HitObject item)
protected sealed override SelectionBlueprint<HitObject> CreateBlueprintFor(HitObject item)
{
return new TimelineHitObjectBlueprint(item)
{
OnDragHandled = e => hitObjectDragged = e != null,
};
return CreateTimelineBlueprintFor(item)?.With(b => b.OnDragHandled = e => hitObjectDragged = e != null);
}

[CanBeNull]
public virtual TimelineHitObjectBlueprint CreateTimelineBlueprintFor(HitObject hitObject) => new TimelineHitObjectBlueprint(hitObject);
Comment on lines +172 to +173
Copy link
Collaborator

@bdach bdach Sep 24, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we're going to go and say that it's fine for the timeline to look differently on different rulesets, then I can already tell you that this API is too constrained and we'll need a higher-level primitive anyway to replace the entirety of the timeline.

Why, you ask? One of the most frequent pieces of feedback on scrolling rulesets (taiko and mania) are that scroll speed changes should be visible on the timeline. And osu!'s displays above hitobjects do not make sense there because that's not how speed changes work on those rulesets - they affect the entire playfield. So they should probably look closer to the red timing change markers.

So I think this sort of thing is too short-sighted and we'll have to tear it out sooner than later anyway. Not opposed to the idea, yet wholly opposed to this execution.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is valuable feedback.

Then we'll need to expand the API to allow showing additional things on the timeline apart from hit objects. I'm thinking such taiko/mania scroll speed changes would probably have to sit next to the TimelineTimingChangeDisplay in the drawable tree.

My question is to what degree do we want rulesets to replace the timeline? You said "replace the entirety of the timeline", but maybe thats overdoing it? I think all rulesets will still share a lot of elements of the timeline like the zoom behaviour, centre marker, timing change display, waveform, ticks, etc. Whatever implementation we go with, it should be easy to add these elements to your ruleset's timeline, so we don't end up with lots of code duplication.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whatever implementation we go with, it should be easy to add these elements to your ruleset's timeline, so we don't end up with lots of code duplication.

I mean obviously, yes - that said, composition over inheritance please. I don't want to see any BaseTimeline shaped monstrosities. Just have the required components readily available for reuse.


protected sealed override DragBox CreateDragBox() => new TimelineDragBox();

protected override void UpdateSelectionFromDragBox()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public partial class TimelineHitObjectBlueprint : SelectionBlueprint<HitObject>
private readonly Container colouredComponents;
private readonly Container sampleComponents;
private readonly OsuSpriteText comboIndexText;
private readonly SamplePointPiece samplePointPiece;
protected readonly SamplePointPiece SamplePointPiece;
private readonly DifficultyPointPiece? difficultyPointPiece;

[Resolved]
Expand Down Expand Up @@ -105,7 +105,7 @@ public TimelineHitObjectBlueprint(HitObject item)
},
}
},
samplePointPiece = new SamplePointPiece(Item)
SamplePointPiece = new SamplePointPiece(Item)
{
Anchor = Anchor.BottomLeft,
Origin = Anchor.TopCentre,
Expand Down Expand Up @@ -258,7 +258,7 @@ private void updateRepeats(IHasRepeats repeats)
});
}

samplePointPiece.X = 1f / (repeats.RepeatCount + 1) / 2;
SamplePointPiece.X = 1f / (repeats.RepeatCount + 1) / 2;
}

protected override bool ShouldBeConsideredForInput(Drawable child) => true;
Expand All @@ -281,7 +281,7 @@ protected override bool ComputeIsMaskedAway(RectangleF maskingBounds)
// If the component is considered masked away, we'll use children to create an extended quad that encapsulates all parts of this blueprint
// to ensure it doesn't pop in and out of existence abruptly when scrolling the timeline.
var rect = RectangleF.Union(ScreenSpaceDrawQuad.AABBFloat, circle.ScreenSpaceDrawQuad.AABBFloat);
rect = RectangleF.Union(rect, samplePointPiece.ScreenSpaceDrawQuad.AABBFloat);
rect = RectangleF.Union(rect, SamplePointPiece.ScreenSpaceDrawQuad.AABBFloat);

if (difficultyPointPiece != null)
rect = RectangleF.Union(rect, difficultyPointPiece.ScreenSpaceDrawQuad.AABBFloat);
Expand Down
2 changes: 1 addition & 1 deletion osu.Game/Screens/Edit/Compose/ComposeScreen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ protected override Drawable CreateTimelineContent()
// We want to display this below hitobjects to better expose placement objects visually.
// It needs to be above the blueprint container to handle drags on breaks though.
breakDisplay.CreateProxy(),
new TimelineBlueprintContainer(composer),
ruleset.CreateTimelineBlueprintContainer(composer),
breakDisplay
}
});
Expand Down
Loading