We've seen multiple cases where DrawableHitObject are stuck in the lifetime management container
due to not implementing a judgement (meaning they are never "hit" or "missed"). To avoid this going forward
CreateJudgement() must be implemented and return a non-null judgement.
This fixes BananaShower and JuiceStreams in osu!catch.
This also makes HitObject abstract and cleans up convert HitObject implementations.
Modify TestSceneScrollingHitObjects to contain a test case that serves
as a reproduction for a visual bug in which using the overlapping scroll
algorithm results in an incorrect origin adjustment for lifetime.
It was reported that mods selected in song select would show up during
loading of replays which were recorded under a different set of mods.
This was caused by BeatmapMetadataDisplay accepting a plain read-only
value of the Mods bindable in PlayerLoader.load(), therefore making the
mod value assignment in ReplayPlayerLoader.OnEntering() have no effect
on that component.
To resolve this issue, make BeatmapMetadataDisplay accept the
higher-level bindable, bind to it locally and pass it down the hierarchy
to ModDisplay.
To better demonstrate the desired effect of the fix introduced in
193e41f, refactor TestSceneScrollingHitObjects to contain two tests,
one of which contains the pre-existing controls to test scroll
algorithms, and the other aims to showcase the fix by setting scroll
parameters appropriately.