Refactor CurrentTrack to be less dependent on a global static
This commit is contained in:
		
							parent
							
								
									73ad702684
								
							
						
					
					
						commit
						525c0e108f
					
				|  | @ -604,8 +604,6 @@ namespace MuzikaGromche | ||||||
|             return Tracks.SelectMany(track => track.GetTracks()).FirstOrDefault(track => track.Name == name); |             return Tracks.SelectMany(track => track.GetTracks()).FirstOrDefault(track => track.Name == name); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         internal static IAudioTrack? CurrentTrack; |  | ||||||
| 
 |  | ||||||
|         public static void SetLightColor(Color color) |         public static void SetLightColor(Color color) | ||||||
|         { |         { | ||||||
|             foreach (var light in RoundManager.Instance.allPoweredLights) |             foreach (var light in RoundManager.Instance.allPoweredLights) | ||||||
|  | @ -1855,6 +1853,9 @@ namespace MuzikaGromche | ||||||
|         : SyncedConfig2<Config> |         : SyncedConfig2<Config> | ||||||
| #endif | #endif | ||||||
|     { |     { | ||||||
|  |         // Latest set track, used for loading palette and timings. | ||||||
|  |         public static IAudioTrack? CurrentTrack { get; internal set; } = null; | ||||||
|  | 
 | ||||||
|         public static ConfigEntry<bool> DisplayLyrics { get; private set; } = null!; |         public static ConfigEntry<bool> DisplayLyrics { get; private set; } = null!; | ||||||
| 
 | 
 | ||||||
|         public static ConfigEntry<float> AudioOffset { get; private set; } = null!; |         public static ConfigEntry<float> AudioOffset { get; private set; } = null!; | ||||||
|  | @ -2067,7 +2068,7 @@ namespace MuzikaGromche | ||||||
| 
 | 
 | ||||||
|             void load() |             void load() | ||||||
|             { |             { | ||||||
|                 var palette = (Plugin.CurrentTrack as CoreAudioTrack)?._Palette ?? Palette.DEFAULT; |                 var palette = (CurrentTrack as CoreAudioTrack)?._Palette ?? Palette.DEFAULT; | ||||||
|                 var colors = palette.Colors; |                 var colors = palette.Colors; | ||||||
|                 var count = Math.Min(colors.Count(), maxCustomPaletteSize); |                 var count = Math.Min(colors.Count(), maxCustomPaletteSize); | ||||||
| 
 | 
 | ||||||
|  | @ -2207,7 +2208,7 @@ namespace MuzikaGromche | ||||||
| 
 | 
 | ||||||
|             void load() |             void load() | ||||||
|             { |             { | ||||||
|                 var track = Plugin.CurrentTrack; |                 var track = CurrentTrack; | ||||||
|                 foreach (var entry in entries) |                 foreach (var entry in entries) | ||||||
|                 { |                 { | ||||||
|                     entry.Load(track as CoreAudioTrack); |                     entry.Load(track as CoreAudioTrack); | ||||||
|  | @ -2265,6 +2266,7 @@ namespace MuzikaGromche | ||||||
|         // Resets on SettingChanged. |         // Resets on SettingChanged. | ||||||
|         private int SelectedTrackIndex = 0; |         private int SelectedTrackIndex = 0; | ||||||
| 
 | 
 | ||||||
|  |         internal IAudioTrack? CurrentTrack = null; | ||||||
|         internal BeatTimeState? BeatTimeState = null; |         internal BeatTimeState? BeatTimeState = null; | ||||||
|         internal AudioSource IntroAudioSource = null!; |         internal AudioSource IntroAudioSource = null!; | ||||||
|         internal AudioSource LoopAudioSource = null!; |         internal AudioSource LoopAudioSource = null!; | ||||||
|  | @ -2352,7 +2354,7 @@ namespace MuzikaGromche | ||||||
|         public void SetTrackClientRpc(string name) |         public void SetTrackClientRpc(string name) | ||||||
|         { |         { | ||||||
|             Debug.Log($"{nameof(MuzikaGromche)} SetTrackClientRpc {name}"); |             Debug.Log($"{nameof(MuzikaGromche)} SetTrackClientRpc {name}"); | ||||||
|             Plugin.CurrentTrack = Plugin.FindTrackNamed(name); |             Config.CurrentTrack = CurrentTrack = Plugin.FindTrackNamed(name); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         [ServerRpc] |         [ServerRpc] | ||||||
|  | @ -2413,7 +2415,11 @@ namespace MuzikaGromche | ||||||
|         [HarmonyPostfix] |         [HarmonyPostfix] | ||||||
|         static void JesterUpdatePostfix(JesterAI __instance, State __state) |         static void JesterUpdatePostfix(JesterAI __instance, State __state) | ||||||
|         { |         { | ||||||
|             if (Plugin.CurrentTrack == null) |             var behaviour = __instance.GetComponent<MuzikaGromcheJesterNetworkBehaviour>(); | ||||||
|  |             var introAudioSource = behaviour.IntroAudioSource; | ||||||
|  |             var loopAudioSource = behaviour.LoopAudioSource; | ||||||
|  | 
 | ||||||
|  |             if (behaviour.CurrentTrack == null) | ||||||
|             { |             { | ||||||
| #if DEBUG | #if DEBUG | ||||||
|                 Debug.LogError($"{nameof(MuzikaGromche)} CurrentTrack is not set!"); |                 Debug.LogError($"{nameof(MuzikaGromche)} CurrentTrack is not set!"); | ||||||
|  | @ -2421,10 +2427,6 @@ namespace MuzikaGromche | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             var behaviour = __instance.GetComponent<MuzikaGromcheJesterNetworkBehaviour>(); |  | ||||||
|             var introAudioSource = behaviour.IntroAudioSource; |  | ||||||
|             var loopAudioSource = behaviour.LoopAudioSource; |  | ||||||
| 
 |  | ||||||
|             // This switch statement resembles the one from JesterAI.Update |             // This switch statement resembles the one from JesterAI.Update | ||||||
|             switch (__state.currentBehaviourStateIndex) |             switch (__state.currentBehaviourStateIndex) | ||||||
|             { |             { | ||||||
|  | @ -2434,18 +2436,18 @@ namespace MuzikaGromche | ||||||
|                         // if just started winding up |                         // if just started winding up | ||||||
|                         // then stop the default music... (already done above) |                         // then stop the default music... (already done above) | ||||||
|                         // ...and set up both modded audio clips in advance |                         // ...and set up both modded audio clips in advance | ||||||
|                         introAudioSource.clip = Plugin.CurrentTrack.LoadedIntro; |                         introAudioSource.clip = behaviour.CurrentTrack.LoadedIntro; | ||||||
|                         loopAudioSource.clip = Plugin.CurrentTrack.LoadedLoop; |                         loopAudioSource.clip = behaviour.CurrentTrack.LoadedLoop; | ||||||
|                         behaviour.BeatTimeState = new BeatTimeState(Plugin.CurrentTrack); |                         behaviour.BeatTimeState = new BeatTimeState(behaviour.CurrentTrack); | ||||||
| 
 | 
 | ||||||
|                         // Set up custom popup timer, which is shorter than Intro audio |                         // Set up custom popup timer, which is shorter than Intro audio | ||||||
|                         __instance.popUpTimer = Plugin.CurrentTrack.WindUpTimer; |                         __instance.popUpTimer = behaviour.CurrentTrack.WindUpTimer; | ||||||
| 
 | 
 | ||||||
|                         if (Config.ShouldSkipWindingPhase) |                         if (Config.ShouldSkipWindingPhase) | ||||||
|                         { |                         { | ||||||
|                             var rewind = 5f; |                             var rewind = 5f; | ||||||
|                             __instance.popUpTimer = rewind; |                             __instance.popUpTimer = rewind; | ||||||
|                             introAudioSource.time = Plugin.CurrentTrack.WindUpTimer - rewind; |                             introAudioSource.time = behaviour.CurrentTrack.WindUpTimer - rewind; | ||||||
|                         } |                         } | ||||||
|                         else |                         else | ||||||
|                         { |                         { | ||||||
|  | @ -2537,7 +2539,7 @@ namespace MuzikaGromche | ||||||
|                 DiscoBallManager.Disable(); |                 DiscoBallManager.Disable(); | ||||||
|                 // Just in case if players have spawned multiple Jesters, |                 // Just in case if players have spawned multiple Jesters, | ||||||
|                 // Don't reset Plugin.CurrentTrack to null, |                 // Don't reset Plugin.CurrentTrack to null, | ||||||
|                 // so that the code wouldn't crash without extra null checks. |                 // so that the latest chosen track remains set. | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue