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); | ||||
|         } | ||||
| 
 | ||||
|         internal static IAudioTrack? CurrentTrack; | ||||
| 
 | ||||
|         public static void SetLightColor(Color color) | ||||
|         { | ||||
|             foreach (var light in RoundManager.Instance.allPoweredLights) | ||||
|  | @ -1855,6 +1853,9 @@ namespace MuzikaGromche | |||
|         : SyncedConfig2<Config> | ||||
| #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<float> AudioOffset { get; private set; } = null!; | ||||
|  | @ -2067,7 +2068,7 @@ namespace MuzikaGromche | |||
| 
 | ||||
|             void load() | ||||
|             { | ||||
|                 var palette = (Plugin.CurrentTrack as CoreAudioTrack)?._Palette ?? Palette.DEFAULT; | ||||
|                 var palette = (CurrentTrack as CoreAudioTrack)?._Palette ?? Palette.DEFAULT; | ||||
|                 var colors = palette.Colors; | ||||
|                 var count = Math.Min(colors.Count(), maxCustomPaletteSize); | ||||
| 
 | ||||
|  | @ -2207,7 +2208,7 @@ namespace MuzikaGromche | |||
| 
 | ||||
|             void load() | ||||
|             { | ||||
|                 var track = Plugin.CurrentTrack; | ||||
|                 var track = CurrentTrack; | ||||
|                 foreach (var entry in entries) | ||||
|                 { | ||||
|                     entry.Load(track as CoreAudioTrack); | ||||
|  | @ -2265,6 +2266,7 @@ namespace MuzikaGromche | |||
|         // Resets on SettingChanged. | ||||
|         private int SelectedTrackIndex = 0; | ||||
| 
 | ||||
|         internal IAudioTrack? CurrentTrack = null; | ||||
|         internal BeatTimeState? BeatTimeState = null; | ||||
|         internal AudioSource IntroAudioSource = null!; | ||||
|         internal AudioSource LoopAudioSource = null!; | ||||
|  | @ -2352,7 +2354,7 @@ namespace MuzikaGromche | |||
|         public void SetTrackClientRpc(string name) | ||||
|         { | ||||
|             Debug.Log($"{nameof(MuzikaGromche)} SetTrackClientRpc {name}"); | ||||
|             Plugin.CurrentTrack = Plugin.FindTrackNamed(name); | ||||
|             Config.CurrentTrack = CurrentTrack = Plugin.FindTrackNamed(name); | ||||
|         } | ||||
| 
 | ||||
|         [ServerRpc] | ||||
|  | @ -2413,7 +2415,11 @@ namespace MuzikaGromche | |||
|         [HarmonyPostfix] | ||||
|         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 | ||||
|                 Debug.LogError($"{nameof(MuzikaGromche)} CurrentTrack is not set!"); | ||||
|  | @ -2421,10 +2427,6 @@ namespace MuzikaGromche | |||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             var behaviour = __instance.GetComponent<MuzikaGromcheJesterNetworkBehaviour>(); | ||||
|             var introAudioSource = behaviour.IntroAudioSource; | ||||
|             var loopAudioSource = behaviour.LoopAudioSource; | ||||
| 
 | ||||
|             // This switch statement resembles the one from JesterAI.Update | ||||
|             switch (__state.currentBehaviourStateIndex) | ||||
|             { | ||||
|  | @ -2434,18 +2436,18 @@ namespace MuzikaGromche | |||
|                         // if just started winding up | ||||
|                         // then stop the default music... (already done above) | ||||
|                         // ...and set up both modded audio clips in advance | ||||
|                         introAudioSource.clip = Plugin.CurrentTrack.LoadedIntro; | ||||
|                         loopAudioSource.clip = Plugin.CurrentTrack.LoadedLoop; | ||||
|                         behaviour.BeatTimeState = new BeatTimeState(Plugin.CurrentTrack); | ||||
|                         introAudioSource.clip = behaviour.CurrentTrack.LoadedIntro; | ||||
|                         loopAudioSource.clip = behaviour.CurrentTrack.LoadedLoop; | ||||
|                         behaviour.BeatTimeState = new BeatTimeState(behaviour.CurrentTrack); | ||||
| 
 | ||||
|                         // Set up custom popup timer, which is shorter than Intro audio | ||||
|                         __instance.popUpTimer = Plugin.CurrentTrack.WindUpTimer; | ||||
|                         __instance.popUpTimer = behaviour.CurrentTrack.WindUpTimer; | ||||
| 
 | ||||
|                         if (Config.ShouldSkipWindingPhase) | ||||
|                         { | ||||
|                             var rewind = 5f; | ||||
|                             __instance.popUpTimer = rewind; | ||||
|                             introAudioSource.time = Plugin.CurrentTrack.WindUpTimer - rewind; | ||||
|                             introAudioSource.time = behaviour.CurrentTrack.WindUpTimer - rewind; | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|  | @ -2537,7 +2539,7 @@ namespace MuzikaGromche | |||
|                 DiscoBallManager.Disable(); | ||||
|                 // Just in case if players have spawned multiple Jesters, | ||||
|                 // 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