@@ -19,8 +19,6 @@ public class MiniHeart : AbstractMiniHeart {
1919 private EventInstance pauseMusicSnapshot ;
2020 private SoundEmitter collectSound ;
2121
22- private TimeRateModifier timeRateModifier ;
23-
2422 public MiniHeart ( EntityData data , Vector2 position , EntityID gid )
2523 : base ( data , position , gid ) {
2624
@@ -51,9 +49,6 @@ private IEnumerator SmashRoutine(Player player, Level level) {
5149 item . OnCollect ( ) ;
5250 }
5351
54- timeRateModifier = new TimeRateModifier ( 1 ) ;
55- Add ( timeRateModifier ) ;
56-
5752 // play the collect jingle
5853 collectSound = SoundEmitter . Play ( "event:/SC2020_heartShard_get" , this ) ;
5954
@@ -68,7 +63,7 @@ private IEnumerator SmashRoutine(Player player, Level level) {
6863 yield return null ;
6964 Celeste . Freeze ( 0.2f ) ;
7065 yield return null ;
71- timeRateModifier . Multiplier = 0.5f ;
66+ setTimeRate ( 0.5f ) ;
7267 player . Depth = Depths . FormationSequences ;
7368 for ( int i = 0 ; i < 10 ; i ++ ) {
7469 Scene . Add ( new AbsorbOrb ( Position ) ) ;
@@ -83,7 +78,7 @@ private IEnumerator SmashRoutine(Player player, Level level) {
8378 // slow down time further, to a freeze
8479 Visible = false ;
8580 for ( float time = 0f ; time < 2f ; time += Engine . RawDeltaTime ) {
86- timeRateModifier . Multiplier = Calc . Approach ( timeRateModifier . Multiplier , 0f , Engine . RawDeltaTime * 0.25f ) ;
81+ setTimeRate ( Calc . Approach ( getTimeRate ( ) , 0f , Engine . RawDeltaTime * 0.25f ) ) ;
8782 yield return null ;
8883 }
8984
@@ -96,7 +91,7 @@ private IEnumerator SmashRoutine(Player player, Level level) {
9691 yield return 100f ;
9792 }
9893
99- Remove ( timeRateModifier ) ;
94+ setTimeRate ( 1f ) ;
10095 Tag = Tags . FrozenUpdate ;
10196 level . Frozen = true ;
10297
@@ -115,6 +110,11 @@ private IEnumerator SmashRoutine(Player player, Level level) {
115110 ReturnToLobbyHelper . TriggerReturnToLobby ( ) ;
116111 }
117112
113+ #pragma warning disable CS0618 // Switching to a TimeRateModifier desyncs TASes
114+ private static void setTimeRate ( float timeRate ) => Engine . TimeRate = timeRate ;
115+ private static float getTimeRate ( ) => Engine . TimeRate ;
116+ #pragma warning restore CS0618
117+
118118 public override void Update ( ) {
119119 base . Update ( ) ;
120120
@@ -134,7 +134,7 @@ private void interruptCollection() {
134134 level . Frozen = false ;
135135 level . CanRetry = true ;
136136 level . FormationBackdrop . Display = false ;
137- if ( timeRateModifier != null ) Remove ( timeRateModifier ) ;
137+ setTimeRate ( 1f ) ;
138138
139139 if ( collectSound != null ) {
140140 collectSound . RemoveSelf ( ) ;
0 commit comments