diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs
index 5939443cf1..318bb323aa 100644
--- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs
+++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs
@@ -257,8 +257,13 @@ namespace osu.Game.Rulesets.Objects.Drawables
using (BeginAbsoluteSequence(transformTime, true))
UpdateInitialTransforms();
- using (BeginAbsoluteSequence(StateUpdateTime, true))
+#pragma warning disable 618
+ using (BeginAbsoluteSequence(StateUpdateTime + (Result?.TimeOffset ?? 0), true))
UpdateStateTransforms(newState);
+#pragma warning restore 618
+
+ using (BeginAbsoluteSequence(StateUpdateTime, true))
+ UpdateStartTimeStateTransforms();
if (newState != ArmedState.Idle)
{
@@ -298,13 +303,23 @@ namespace osu.Game.Rulesets.Objects.Drawables
/// In the case of a non-idle , and if was not set during this call, will be invoked.
///
/// The new armed state.
+ [Obsolete("Use UpdateStartTimeStateTransforms and UpdateHitStateTransforms instead")] // Can be removed 20210504
protected virtual void UpdateStateTransforms(ArmedState state)
{
}
+ ///
+ /// Apply passive transforms at the 's StartTime.
+ /// This is called each time changes.
+ /// Previous states are automatically cleared.
+ ///
+ protected virtual void UpdateStartTimeStateTransforms()
+ {
+ }
+
///
/// Apply transforms based on the current . This call is offset by (HitObject.EndTime + Result.Offset), equivalent to when the user hit the object.
- /// This method is only called on or .
+ /// This method is only called on or . If was not set during this call, will be invoked.
/// Previous states are automatically cleared.
///
/// The new armed state.