11using Celeste . Mod . Entities ;
22using Monocle ;
33using Microsoft . Xna . Framework ;
4- using System . Collections . Generic ;
54
65namespace Celeste . Mod . SpringCollab2020 . Triggers {
76 [ CustomEntity ( "SpringCollab2020/RemoveLightSourcesTrigger" ) ]
87 [ Tracked ]
98 class RemoveLightSourcesTrigger : Trigger {
109 public RemoveLightSourcesTrigger ( EntityData data , Vector2 offset ) : base ( data , offset ) {
11- Persistent = data . Bool ( "persistent" , true ) ;
1210 level = SceneAs < Level > ( ) ;
1311 }
1412
@@ -23,75 +21,39 @@ public static void Unload() {
2321 }
2422
2523 private static void LevelLoadHandler ( Level loadedLevel , Player . IntroTypes playerIntro , bool isFromLoader ) {
26- if ( loadedLevel . Session . GetFlag ( "lightsDisabled" ) ) {
27- DisableAllLights ( loadedLevel ) ;
28- On . Celeste . Level . TransitionTo += TransitionLightSources ;
29- }
24+ if ( loadedLevel . Session . GetFlag ( "lightsDisabled" ) )
25+ DisableLightRender ( ) ;
3026 }
3127
3228 private static void OnExitHandler ( Level exitLevel , LevelExit exit , LevelExit . Mode mode , Session session , HiresSnow snow ) {
33- On . Celeste . Level . TransitionTo -= TransitionLightSources ;
29+ EnableLightRender ( ) ;
3430 }
3531
36- private static void TransitionLightSources ( On . Celeste . Level . orig_TransitionTo orig , Level transitionLevel , LevelData next , Vector2 direction ) {
37- lightSources = new List < Component > ( ) ;
38- bloomSources = new List < Component > ( ) ;
39-
40- DisableAllLights ( transitionLevel ) ;
41- orig ( transitionLevel , next , direction ) ;
42- }
32+ private static void LightRendererHook ( On . Celeste . LightingRenderer . orig_Render orig , LightingRenderer self , Scene scene ) { }
4333
44- private static void DisableAllLights ( Level disableLevel ) {
45- EntityList entities = disableLevel . Entities ;
34+ private static void BloomRendererHook ( On . Celeste . BloomRenderer . orig_Apply orig , BloomRenderer self , VirtualRenderTarget target , Scene scene ) { }
4635
47- foreach ( Entity entity in entities ) {
48- foreach ( Component component in entity . Components . ToArray ( ) ) {
49- if ( component is VertexLight ) {
50- lightSources . Add ( component ) ;
51- component . Visible = false ;
52- }
36+ private static void EnableLightRender ( ) {
37+ On . Celeste . LightingRenderer . Render -= LightRendererHook ;
38+ On . Celeste . BloomRenderer . Apply -= BloomRendererHook ;
39+ }
5340
54- if ( component is BloomPoint ) {
55- bloomSources . Add ( component ) ;
56- component . Visible = false ;
57- }
58- }
59- }
41+ private static void DisableLightRender ( ) {
42+ On . Celeste . LightingRenderer . Render += LightRendererHook ;
43+ On . Celeste . BloomRenderer . Apply += BloomRendererHook ;
6044 }
6145
6246 public override void OnEnter ( Player player ) {
6347 base . OnEnter ( player ) ;
6448
6549 level = SceneAs < Level > ( ) ;
6650
67- if ( Persistent && level . Session . GetFlag ( "lightsDisabled" ) == false )
68- On . Celeste . Level . TransitionTo += TransitionLightSources ;
69-
70- if ( Persistent )
51+ if ( level . Session . GetFlag ( "lightsDisabled" ) == false ) {
7152 level . Session . SetFlag ( "lightsDisabled" , true ) ;
72-
73- DisableAllLights ( level ) ;
74- }
75-
76- public override void OnLeave ( Player player ) {
77- base . OnLeave ( player ) ;
78-
79- if ( Persistent || level . Session . GetFlag ( "lightsDisabled" ) == true )
80- return ;
81-
82- foreach ( Component component in lightSources )
83- component . Visible = true ;
84-
85- foreach ( Component component in bloomSources )
86- component . Visible = true ;
53+ DisableLightRender ( ) ;
54+ }
8755 }
8856
89- private static List < Component > lightSources = new List < Component > ( ) ;
90-
91- private static List < Component > bloomSources = new List < Component > ( ) ;
92-
9357 private Level level ;
94-
95- private bool Persistent = true ;
9658 }
9759}
0 commit comments