Move track choosing out of the Jester patch class

This commit is contained in:
ivan tkachenko 2025-07-10 00:12:55 +03:00
parent 787f15944a
commit 8dc897feba
1 changed files with 29 additions and 14 deletions

View File

@ -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 Coroutine JesterLightSwitching;
public static Track CurrentTrack; public static Track CurrentTrack;
@ -214,20 +242,7 @@ namespace MuzikaGromche
__instance.creatureVoice.Stop(); __instance.creatureVoice.Stop();
// ...and start modded music // ...and start modded music
var seed = RoundManager.Instance.dungeonGenerator.Generator.ChosenSeed; Plugin.CurrentTrack = Plugin.ChooseTrack();
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];
__instance.popUpTimer = Plugin.CurrentTrack.WindUpTimer; __instance.popUpTimer = Plugin.CurrentTrack.WindUpTimer;
__instance.farAudio.maxDistance = 150; __instance.farAudio.maxDistance = 150;
__instance.farAudio.clip = Plugin.CurrentTrack.LoadedStart; __instance.farAudio.clip = Plugin.CurrentTrack.LoadedStart;