From 8dc897febae2f81284b5f15abb52fb5953478392 Mon Sep 17 00:00:00 2001 From: ivan tkachenko Date: Thu, 10 Jul 2025 00:12:55 +0300 Subject: [PATCH] Move track choosing out of the Jester patch class --- MuzikaGromche/Plugin.cs | 43 +++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/MuzikaGromche/Plugin.cs b/MuzikaGromche/Plugin.cs index 9b4ef28..012da97 100644 --- a/MuzikaGromche/Plugin.cs +++ b/MuzikaGromche/Plugin.cs @@ -52,6 +52,34 @@ namespace MuzikaGromche } ]; + public static int IndexOfTrack(string trackName) + { + return Array.FindIndex(Tracks, track => track.Name == trackName); + } + + public static Track ChooseTrack() + { + var seed = RoundManager.Instance.dungeonGenerator.Generator.ChosenSeed; + var sha = SHA256.Create(); + var hash = sha.ComputeHash(BitConverter.GetBytes(seed)); + var trackId = 0; + foreach (var t in hash) + { + // modulus division on byte array + trackId *= 256 % Tracks.Length; + trackId %= Tracks.Length; + trackId += t % Tracks.Length; + trackId %= Tracks.Length; + } +#if DEBUG + // Override for testing + trackId = IndexOfTrack("DeployDestroy"); +#endif + var track = Tracks[trackId]; + Debug.Log($"Seed is {seed}, chosen track is \"{track.Name}\", {trackId} out of {Tracks.Length} tracks"); + return Tracks[trackId]; + } + public static Coroutine JesterLightSwitching; public static Track CurrentTrack; @@ -214,20 +242,7 @@ namespace MuzikaGromche __instance.creatureVoice.Stop(); // ...and start modded music - var seed = RoundManager.Instance.dungeonGenerator.Generator.ChosenSeed; - var sha = SHA256.Create(); - var hash = sha.ComputeHash(BitConverter.GetBytes(seed)); - var trackId = 0; - foreach (var t in hash) - { - // modulus division on byte array - trackId *= 256 % Plugin.Tracks.Length; - trackId %= Plugin.Tracks.Length; - trackId += t % Plugin.Tracks.Length; - trackId %= Plugin.Tracks.Length; - } - Debug.Log($"Seed is {seed}, chosen track is {trackId} out of {Plugin.Tracks.Length} tracks"); - Plugin.CurrentTrack = Plugin.Tracks[trackId]; + Plugin.CurrentTrack = Plugin.ChooseTrack(); __instance.popUpTimer = Plugin.CurrentTrack.WindUpTimer; __instance.farAudio.maxDistance = 150; __instance.farAudio.clip = Plugin.CurrentTrack.LoadedStart;