I can't mentally figure out *what* is causing the issue here, but in the
case where `prepareDrawables` is called from
`JudgementBody.OnSkinChanged` (only happens in a non-pooled scenario),
things go very wrong.
I think a smell test is enough for anyone to agree that the flow was
very bad. Removing this call doesn't seem to cause any issues.
`runAnimation` should always be called in `PrepareForUse` (both pooled
and non-pooled scenarios) so things should still always be in a correct
state.
Closes#29398.
If the skin is changed before gameplay has started (at the loading
screen) it is possible for a sequence of events to occur which results
in the animation not being played:
- `SkinReloadableDrawable` runs its BDL load (and calls `OnSkinChanged`
once)
- User changes skin, triggering `DrawableJudgement`'s skin change
handling (binding directly on the `SkinSource` locally)
- This will call `PrepareDrawables` and reinitialise the
`SkinnableDrawable` child hierarchy, then immediately apply the
animations to it.
- The new `SkinnableDrawable` will then get the `SkinChanged` event and
schedule a handler for it, which will run on its first Update call.
- Any added animations will be lost as a result.
Fixed by binding directly to the `SkinnableDrawable`'s `OnSkinChanged`.
This has the added bonus of not needing to reinitialise the child
hierarchy on skin change (which felt a bit weird in the first place).