Using `LifetimeStart` seemed arbitrary and wrong not only in a
compatibility-with-stable sense, but also in a general sanity sense (why
would each object potentially be using a different timing point to
animate?)
Doesn't help anyone to be waiting literal minutes for combo to hit 50 or
150 in a test scene supposed to quickly visually demonstrate a
component. Doesn't help for CI runtime, either.
To correctly end a mania hold note, `endHold()` needs to be called. This
was not happening in a very specific scenario:
- The hold note's head is not hit
- The user pressed the column's key within the hold note's tail's window,
but does so to hit the next object (a note in proximity to the hold note's tail).
- The hit policy forces a miss on the hold note, but `endHold()` is not called
- `CheckForResult` is not called after this point due to `Judged` being `true`.
Closes#21311.
Regressed in c40c70509e.
As it turns out, `item.Item.Filtered.Value` is not the only condition
that should be checked to determine if a carousel item should be hidden
or not - `item.Item.State.Value != CarouselItemState.Collapsed` should
also be true. This was even available as the `item.Item.Visible`
convenience property, which is used in this commit.
Failing to check `item.Item.State.Value` led to setting non-zero alpha
on collapsed carousel items, leading to phantom beatmap sets appearing,
as the alpha was set in the entire carousel's `Update()` method, thus
firing every frame.