diff --git a/MuzikaGromche/DiscoBallManager.cs b/MuzikaGromche/DiscoBallManager.cs index e37afb0..2068c1d 100644 --- a/MuzikaGromche/DiscoBallManager.cs +++ b/MuzikaGromche/DiscoBallManager.cs @@ -1,4 +1,5 @@ using DunGen; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -7,22 +8,24 @@ using UnityEngine; namespace MuzikaGromche { - public class DiscoBallManager : MonoBehaviour + public static class DiscoBallManager { // A struct holding a disco ball container object and the name of a tile for which it was designed. - public readonly record struct Data(string TileName, GameObject DiscoBallContainer) + private readonly record struct Data(string TileName, GameObject DiscoBallContainer) { // We are specifically looking for cloned tiles, not the original prototypes. public readonly string TileCloneName = $"{TileName}(Clone)"; } - public static readonly List Containers = []; + private static readonly List Containers = []; private static readonly List InstantiatedContainers = []; public static void Initialize() { - string bundlePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "muzikagromche_discoball"); - var bundle = AssetBundle.LoadFromFile(bundlePath); + const string BundleFileName = "muzikagromche_discoball"; + string bundlePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), BundleFileName); + var assetBundle = AssetBundle.LoadFromFile(bundlePath) + ?? throw new NullReferenceException("Failed to load bundle"); foreach ((string prefabPath, string tileName) in new[] { ("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerManor.prefab", "ManorStartRoomSmall"), @@ -33,7 +36,7 @@ namespace MuzikaGromche ("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerBirthdayRoomTile.prefab", "BirthdayRoomTile"), }) { - var container = bundle.LoadAsset(prefabPath); + var container = assetBundle.LoadAsset(prefabPath); Containers.Add(new(tileName, container)); } } @@ -66,7 +69,7 @@ namespace MuzikaGromche private static void Enable(Tile tile, Data container) { Debug.Log($"{nameof(MuzikaGromche)} {nameof(DiscoBallManager)} Enabling at '{tile.gameObject.name}'"); - var discoBall = Instantiate(container.DiscoBallContainer, tile.transform); + var discoBall = UnityEngine.Object.Instantiate(container.DiscoBallContainer, tile.transform); InstantiatedContainers.Add(discoBall); foreach (var animatorName in animatorNames) @@ -83,7 +86,7 @@ namespace MuzikaGromche foreach (var discoBall in InstantiatedContainers) { Debug.Log($"{nameof(MuzikaGromche)} {nameof(DiscoBallManager)}: Disabling {discoBall.name}"); - Destroy(discoBall); + UnityEngine.Object.Destroy(discoBall); } InstantiatedContainers.Clear(); } diff --git a/MuzikaGromche/Plugin.cs b/MuzikaGromche/Plugin.cs index aa38040..2e089b6 100644 --- a/MuzikaGromche/Plugin.cs +++ b/MuzikaGromche/Plugin.cs @@ -41,7 +41,7 @@ namespace MuzikaGromche .Select(a => $" Trying... {a}") ]; - public static Track[] Tracks = [ + public static readonly Track[] Tracks = [ new Track { Name = "MuzikaGromche", @@ -482,8 +482,8 @@ namespace MuzikaGromche return tracks[trackId]; } - public static Track? CurrentTrack; - public static BeatTimeState? BeatTimeState; + internal static Track? CurrentTrack; + internal static BeatTimeState? BeatTimeState; public static void SetLightColor(Color color) { @@ -520,7 +520,7 @@ namespace MuzikaGromche HUDManager.Instance.UIAudio.Stop(); } - private void Awake() + void Awake() { string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); UnityWebRequest[] requests = new UnityWebRequest[Tracks.Length * 2]; @@ -560,7 +560,7 @@ namespace MuzikaGromche } }; - public record Language(string Short, string Full) + public readonly record struct Language(string Short, string Full) { public static readonly Language ENGLISH = new("EN", "English"); public static readonly Language RUSSIAN = new("RU", "Russian"); @@ -585,9 +585,9 @@ namespace MuzikaGromche ? Mathf.Pow(2f, 20f * x - 10f) / 2f : (2f - Mathf.Pow(2f, -20f * x + 10f)) / 2f); - public static Easing[] All = [Linear, InCubic, OutCubic, InOutCubic, InExpo, OutExpo, InOutExpo]; + public static readonly Easing[] All = [Linear, InCubic, OutCubic, InOutCubic, InExpo, OutExpo, InOutExpo]; - public static string[] AllNames => [.. All.Select(easing => easing.Name)]; + public static readonly string[] AllNames = [.. All.Select(easing => easing.Name)]; public static Easing FindByName(string Name) { @@ -600,9 +600,9 @@ namespace MuzikaGromche } } - public record Palette(Color[] Colors) + public readonly record struct Palette(Color[] Colors) { - public static Palette DEFAULT = new([Color.magenta, Color.cyan, Color.green, Color.yellow]); + public static readonly Palette DEFAULT = new([Color.magenta, Color.cyan, Color.green, Color.yellow]); public static Palette Parse(string[] hexColors) { @@ -784,7 +784,7 @@ namespace MuzikaGromche } } - public readonly record struct BeatTimestamp + readonly record struct BeatTimestamp { // Number of beats in the loop audio segment. public readonly int LoopBeats; @@ -834,7 +834,7 @@ namespace MuzikaGromche } } - public readonly record struct BeatTimeSpan + readonly record struct BeatTimeSpan { public readonly int LoopBeats; public readonly float HalfLoopBeats => LoopBeats / 2f; @@ -984,7 +984,7 @@ namespace MuzikaGromche } } - public class BeatTimeState + class BeatTimeState { // The object is newly created, the Start audio began to play but its time hasn't adjanced from 0.0f yet. private bool hasStarted = false; @@ -1251,9 +1251,9 @@ namespace MuzikaGromche } } - public abstract class BaseEvent; + abstract class BaseEvent; - public class SetLightsColorEvent(Color color) : BaseEvent + class SetLightsColorEvent(Color color) : BaseEvent { public readonly Color Color = color; public override string ToString() @@ -1262,7 +1262,7 @@ namespace MuzikaGromche } } - public class SetLightsColorTransitionEvent(Color from, Color to, Easing easing, float t) + class SetLightsColorTransitionEvent(Color from, Color to, Easing easing, float t) : SetLightsColorEvent(Color.Lerp(from, to, Mathf.Clamp(easing.Eval(t), 0f, 1f))) { // Additional context for debugging @@ -1276,12 +1276,12 @@ namespace MuzikaGromche } } - public class FlickerLightsEvent : BaseEvent + class FlickerLightsEvent : BaseEvent { public override string ToString() => "Flicker"; } - public class LyricsEvent(string text) : BaseEvent + class LyricsEvent(string text) : BaseEvent { public readonly string Text = text; public override string ToString() @@ -1290,14 +1290,14 @@ namespace MuzikaGromche } } - public class WindUpZeroBeatEvent : BaseEvent + class WindUpZeroBeatEvent : BaseEvent { public override string ToString() => "WindUp"; } // Default C#/.NET remainder operator % returns negative result for negative input // which is unsuitable as an index for an array. - public static class Mod + static class Mod { public static int Positive(int x, int m) { @@ -1317,7 +1317,7 @@ namespace MuzikaGromche } } - public readonly struct RandomWeightedIndex + readonly struct RandomWeightedIndex { public RandomWeightedIndex(int[] weights) { @@ -1404,7 +1404,7 @@ namespace MuzikaGromche readonly public int TotalWeights { get; } } - public static class SyncedEntryExtensions + static class SyncedEntryExtensions { // Update local values on clients. Even though the clients couldn't // edit them, they could at least see the new values. @@ -1417,7 +1417,7 @@ namespace MuzikaGromche } } - public class Config : SyncedConfig2 + class Config : SyncedConfig2 { public static ConfigEntry DisplayLyrics { get; private set; } = null!; @@ -1438,7 +1438,7 @@ namespace MuzikaGromche public static float? ColorTransitionOutOverride { get; private set; } = null; public static string? ColorTransitionEasingOverride { get; private set; } = null; - public Config(ConfigFile configFile) : base(PluginInfo.PLUGIN_GUID) + internal Config(ConfigFile configFile) : base(PluginInfo.PLUGIN_GUID) { DisplayLyrics = configFile.Bind("General", "Display Lyrics", true, new ConfigDescription("Display lyrics in the HUD tooltip when you hear the music.")); @@ -1767,7 +1767,7 @@ namespace MuzikaGromche // farAudio is during windup, Start overrides popGoesTheWeaselTheme // creatureVoice is when popped, Loop overrides screamingSFX [HarmonyPatch(typeof(JesterAI))] - internal class JesterPatch + static class JesterPatch { #if DEBUG [HarmonyPatch(nameof(JesterAI.SetJesterInitialValues))] @@ -1786,7 +1786,7 @@ namespace MuzikaGromche [HarmonyPatch(nameof(JesterAI.Update))] [HarmonyPrefix] - static void DoNotStopTheMusicPrefix(JesterAI __instance, out State __state) + static void JesterUpdatePrefix(JesterAI __instance, out State __state) { __state = new State { @@ -1808,7 +1808,7 @@ namespace MuzikaGromche [HarmonyPatch(nameof(JesterAI.Update))] [HarmonyPostfix] - static void DoNotStopTheMusic(JesterAI __instance, State __state) + static void JesterUpdatePostfix(JesterAI __instance, State __state) { if (__instance.previousState == 1 && __state.previousState != 1) { @@ -1900,13 +1900,13 @@ namespace MuzikaGromche } [HarmonyPatch(typeof(EnemyAI))] - internal class EnemyAIPatch + static class EnemyAIPatch { // JesterAI class does not override abstract method OnDestroy, // so we have to patch its superclass directly. [HarmonyPatch(nameof(EnemyAI.OnDestroy))] [HarmonyPrefix] - public static void CleanUpOnDestroy(EnemyAI __instance) + static void CleanUpOnDestroy(EnemyAI __instance) { if (__instance is JesterAI) { diff --git a/MuzikaGromche/PoweredLightsAnimators.cs b/MuzikaGromche/PoweredLightsAnimators.cs index 9616e34..1e97209 100644 --- a/MuzikaGromche/PoweredLightsAnimators.cs +++ b/MuzikaGromche/PoweredLightsAnimators.cs @@ -9,7 +9,7 @@ using UnityEngine; namespace MuzikaGromche { - internal class PoweredLightsAnimators + static class PoweredLightsAnimators { private delegate void ManualPatch(GameObject animatorContainer); @@ -167,11 +167,11 @@ namespace MuzikaGromche } [HarmonyPatch(typeof(Tile))] - internal class PoweredLightsAnimatorsPatch + static class PoweredLightsAnimatorsPatch { - [HarmonyPatch("AddTriggerVolume")] + [HarmonyPatch(nameof(Tile.AddTriggerVolume))] [HarmonyPostfix] - public static void OnAddTriggerVolume(Tile __instance) + static void OnAddTriggerVolume(Tile __instance) { PoweredLightsAnimators.Patch(__instance); } @@ -188,14 +188,14 @@ namespace MuzikaGromche // In order to fix that, replace singular GetComponentInChildren with plural GetComponentsInChildren version. [HarmonyPatch(nameof(RoundManager.RefreshLightsList))] [HarmonyPrefix] - private static bool OnRefreshLightsList(RoundManager __instance) + static bool OnRefreshLightsList(RoundManager __instance) { RefreshLightsListPatched(__instance); // Skip the original method return false; } - private static void RefreshLightsListPatched(RoundManager self) + static void RefreshLightsListPatched(RoundManager self) { // Reusable list to reduce allocations List lights = [];