@@ -18,6 +18,34 @@ public override void Initialize()
1818 {
1919 base . Initialize ( ) ;
2020 SubscribeLocalEvent < DoorComponent , AppearanceChangeEvent > ( OnAppearanceChange ) ;
21+ SubscribeLocalEvent < DoorComponent , AnimationCompletedEvent > ( OnAnimationCompleted ) ;
22+ }
23+
24+ private void OnAnimationCompleted ( Entity < DoorComponent > entity , ref AnimationCompletedEvent args )
25+ {
26+ if ( args . Key != DoorComponent . OpenKey && args . Key != DoorComponent . CloseKey )
27+ return ;
28+
29+ if ( ! TryComp < SpriteComponent > ( entity , out var sprite ) ) // Starlight
30+ return ;
31+
32+ switch ( entity . Comp . State )
33+ {
34+ case DoorState . Open :
35+ foreach ( var ( layer , layerState ) in entity . Comp . OpenSpriteStates )
36+ {
37+ _sprite . LayerSetRsiState ( ( entity . Owner , sprite ) , layer , layerState ) ;
38+ }
39+
40+ break ;
41+ case DoorState . Closed :
42+ foreach ( var ( layer , layerState ) in entity . Comp . ClosedSpriteStates )
43+ {
44+ _sprite . LayerSetRsiState ( ( entity . Owner , sprite ) , layer , layerState ) ;
45+ }
46+
47+ break ;
48+ }
2149 }
2250
2351 protected override void OnComponentInit ( Entity < DoorComponent > ent , ref ComponentInit args )
@@ -89,8 +117,11 @@ private void OnAppearanceChange(Entity<DoorComponent> entity, ref AppearanceChan
89117 if ( AppearanceSystem . TryGetData < string > ( entity , PaintableVisuals . Prototype , out var prototype , args . Component ) )
90118 UpdateSpriteLayers ( ( entity . Owner , args . Sprite ) , prototype ) ;
91119
92- if ( _animationSystem . HasRunningAnimation ( entity , DoorComponent . AnimationKey ) )
93- _animationSystem . Stop ( entity . Owner , DoorComponent . AnimationKey ) ;
120+ // ES START
121+ // dont stop all animations for no reason
122+ //if (_animationSystem.HasRunningAnimation(entity, DoorComponent.AnimationKey))
123+ // _animationSystem.Stop(entity.Owner, DoorComponent.AnimationKey);
124+ // ES END
94125
95126 // We are checking beforehand since some doors may not have an emagging visual layer, and we don't want LayerSetVisible to throw an error.
96127 if ( _sprite . TryGetLayer ( entity . Owner , DoorVisualLayers . BaseEmagging , out var _ , false ) )
@@ -106,13 +137,37 @@ private void UpdateAppearanceForDoorState(Entity<DoorComponent> entity, SpriteCo
106137 switch ( state )
107138 {
108139 case DoorState . Open :
140+ if ( _animationSystem . HasRunningAnimation ( entity , DoorComponent . OpenKey ) )
141+ return ;
142+
143+ // Moffstation - Start - Don't stop animations
144+ /*
145+ if (_animationSystem.HasRunningAnimation(entity, DoorComponent.CloseKey))
146+ {
147+ _animationSystem.Stop(entity, null, DoorComponent.CloseKey);
148+ _animationSystem.Play(entity, (Animation)entity.Comp.OpeningAnimation, DoorComponent.OpenKey);
149+ }
150+ */ // Moffstation - End
151+
109152 foreach ( var ( layer , layerState ) in entity . Comp . OpenSpriteStates )
110153 {
111154 _sprite . LayerSetRsiState ( ( entity . Owner , sprite ) , layer , layerState ) ;
112155 }
113156
114157 return ;
115158 case DoorState . Closed :
159+ if ( _animationSystem . HasRunningAnimation ( entity , DoorComponent . CloseKey ) )
160+ return ;
161+
162+ // Moffstation - Start - Don't stop animations
163+ /*
164+ if (_animationSystem.HasRunningAnimation(entity, DoorComponent.OpenKey))
165+ {
166+ _animationSystem.Stop(entity, null, DoorComponent.OpenKey);
167+ _animationSystem.Play(entity, (Animation)entity.Comp.OpeningAnimation, DoorComponent.OpenKey);
168+ }
169+ */ // Moffstation - End
170+
116171 foreach ( var ( layer , layerState ) in entity . Comp . ClosedSpriteStates )
117172 {
118173 _sprite . LayerSetRsiState ( ( entity . Owner , sprite ) , layer , layerState ) ;
@@ -123,24 +178,34 @@ private void UpdateAppearanceForDoorState(Entity<DoorComponent> entity, SpriteCo
123178 if ( entity . Comp . OpeningAnimationTime == TimeSpan . Zero )
124179 return ;
125180
126- _animationSystem . Play ( entity , ( Animation ) entity . Comp . OpeningAnimation , DoorComponent . AnimationKey ) ;
181+ if ( _animationSystem . HasRunningAnimation ( entity , DoorComponent . OpenKey ) )
182+ return ;
183+
184+ _animationSystem . Play ( entity , ( Animation ) entity . Comp . OpeningAnimation , DoorComponent . OpenKey ) ;
127185
128186 return ;
129187 case DoorState . Closing :
130188 if ( entity . Comp . ClosingAnimationTime == TimeSpan . Zero || entity . Comp . CurrentlyCrushing . Count != 0 )
131189 return ;
132190
133- _animationSystem . Play ( entity , ( Animation ) entity . Comp . ClosingAnimation , DoorComponent . AnimationKey ) ;
191+ if ( _animationSystem . HasRunningAnimation ( entity , DoorComponent . CloseKey ) )
192+ return ;
193+
194+ _animationSystem . Play ( entity , ( Animation ) entity . Comp . ClosingAnimation , DoorComponent . CloseKey ) ;
134195
135196 return ;
136197 case DoorState . Denying :
137- _animationSystem . Play ( entity , ( Animation ) entity . Comp . DenyingAnimation , DoorComponent . AnimationKey ) ;
198+ if ( _animationSystem . HasRunningAnimation ( entity , DoorComponent . DenyKey ) )
199+ return ;
200+
201+ _animationSystem . Play ( entity , ( Animation ) entity . Comp . DenyingAnimation , DoorComponent . DenyKey ) ;
138202
139203 return ;
140204 case DoorState . Emagging :
141- // We are checking beforehand since some doors may not have an emagging visual layer.
142- if ( _sprite . TryGetLayer ( entity . Owner , DoorVisualLayers . BaseEmagging , out var _ , false ) )
143- _animationSystem . Play ( entity , ( Animation ) entity . Comp . EmaggingAnimation , DoorComponent . AnimationKey ) ;
205+ if ( _animationSystem . HasRunningAnimation ( entity , DoorComponent . EmagKey ) )
206+ return ;
207+
208+ _animationSystem . Play ( entity , ( Animation ) entity . Comp . EmaggingAnimation , DoorComponent . EmagKey ) ;
144209
145210 return ;
146211 }
0 commit comments