forked from nikita/muzika-gromche
Refactor: Fix up visibility and static modifiers, and other minor things
This commit is contained in:
parent
76e9ca3595
commit
72adb9e713
|
@ -1,4 +1,5 @@
|
||||||
using DunGen;
|
using DunGen;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
@ -7,22 +8,24 @@ using UnityEngine;
|
||||||
|
|
||||||
namespace MuzikaGromche
|
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.
|
// 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.
|
// We are specifically looking for cloned tiles, not the original prototypes.
|
||||||
public readonly string TileCloneName = $"{TileName}(Clone)";
|
public readonly string TileCloneName = $"{TileName}(Clone)";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly List<Data> Containers = [];
|
private static readonly List<Data> Containers = [];
|
||||||
private static readonly List<GameObject> InstantiatedContainers = [];
|
private static readonly List<GameObject> InstantiatedContainers = [];
|
||||||
|
|
||||||
public static void Initialize()
|
public static void Initialize()
|
||||||
{
|
{
|
||||||
string bundlePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "muzikagromche_discoball");
|
const string BundleFileName = "muzikagromche_discoball";
|
||||||
var bundle = AssetBundle.LoadFromFile(bundlePath);
|
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[] {
|
foreach ((string prefabPath, string tileName) in new[] {
|
||||||
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerManor.prefab", "ManorStartRoomSmall"),
|
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerManor.prefab", "ManorStartRoomSmall"),
|
||||||
|
@ -33,7 +36,7 @@ namespace MuzikaGromche
|
||||||
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerBirthdayRoomTile.prefab", "BirthdayRoomTile"),
|
("Assets/LethalCompany/Mods/MuzikaGromche/DiscoBallContainerBirthdayRoomTile.prefab", "BirthdayRoomTile"),
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
var container = bundle.LoadAsset<GameObject>(prefabPath);
|
var container = assetBundle.LoadAsset<GameObject>(prefabPath);
|
||||||
Containers.Add(new(tileName, container));
|
Containers.Add(new(tileName, container));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +69,7 @@ namespace MuzikaGromche
|
||||||
private static void Enable(Tile tile, Data container)
|
private static void Enable(Tile tile, Data container)
|
||||||
{
|
{
|
||||||
Debug.Log($"{nameof(MuzikaGromche)} {nameof(DiscoBallManager)} Enabling at '{tile.gameObject.name}'");
|
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);
|
InstantiatedContainers.Add(discoBall);
|
||||||
|
|
||||||
foreach (var animatorName in animatorNames)
|
foreach (var animatorName in animatorNames)
|
||||||
|
@ -83,7 +86,7 @@ namespace MuzikaGromche
|
||||||
foreach (var discoBall in InstantiatedContainers)
|
foreach (var discoBall in InstantiatedContainers)
|
||||||
{
|
{
|
||||||
Debug.Log($"{nameof(MuzikaGromche)} {nameof(DiscoBallManager)}: Disabling {discoBall.name}");
|
Debug.Log($"{nameof(MuzikaGromche)} {nameof(DiscoBallManager)}: Disabling {discoBall.name}");
|
||||||
Destroy(discoBall);
|
UnityEngine.Object.Destroy(discoBall);
|
||||||
}
|
}
|
||||||
InstantiatedContainers.Clear();
|
InstantiatedContainers.Clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace MuzikaGromche
|
||||||
.Select(a => $" Trying... {a}")
|
.Select(a => $" Trying... {a}")
|
||||||
];
|
];
|
||||||
|
|
||||||
public static Track[] Tracks = [
|
public static readonly Track[] Tracks = [
|
||||||
new Track
|
new Track
|
||||||
{
|
{
|
||||||
Name = "MuzikaGromche",
|
Name = "MuzikaGromche",
|
||||||
|
@ -482,8 +482,8 @@ namespace MuzikaGromche
|
||||||
return tracks[trackId];
|
return tracks[trackId];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Track? CurrentTrack;
|
internal static Track? CurrentTrack;
|
||||||
public static BeatTimeState? BeatTimeState;
|
internal static BeatTimeState? BeatTimeState;
|
||||||
|
|
||||||
public static void SetLightColor(Color color)
|
public static void SetLightColor(Color color)
|
||||||
{
|
{
|
||||||
|
@ -520,7 +520,7 @@ namespace MuzikaGromche
|
||||||
HUDManager.Instance.UIAudio.Stop();
|
HUDManager.Instance.UIAudio.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Awake()
|
void Awake()
|
||||||
{
|
{
|
||||||
string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||||
UnityWebRequest[] requests = new UnityWebRequest[Tracks.Length * 2];
|
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 ENGLISH = new("EN", "English");
|
||||||
public static readonly Language RUSSIAN = new("RU", "Russian");
|
public static readonly Language RUSSIAN = new("RU", "Russian");
|
||||||
|
@ -585,9 +585,9 @@ namespace MuzikaGromche
|
||||||
? Mathf.Pow(2f, 20f * x - 10f) / 2f
|
? Mathf.Pow(2f, 20f * x - 10f) / 2f
|
||||||
: (2f - 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)
|
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)
|
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.
|
// Number of beats in the loop audio segment.
|
||||||
public readonly int LoopBeats;
|
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 int LoopBeats;
|
||||||
public readonly float HalfLoopBeats => LoopBeats / 2f;
|
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.
|
// 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;
|
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 readonly Color Color = color;
|
||||||
public override string ToString()
|
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)))
|
: SetLightsColorEvent(Color.Lerp(from, to, Mathf.Clamp(easing.Eval(t), 0f, 1f)))
|
||||||
{
|
{
|
||||||
// Additional context for debugging
|
// Additional context for debugging
|
||||||
|
@ -1276,12 +1276,12 @@ namespace MuzikaGromche
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class FlickerLightsEvent : BaseEvent
|
class FlickerLightsEvent : BaseEvent
|
||||||
{
|
{
|
||||||
public override string ToString() => "Flicker";
|
public override string ToString() => "Flicker";
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LyricsEvent(string text) : BaseEvent
|
class LyricsEvent(string text) : BaseEvent
|
||||||
{
|
{
|
||||||
public readonly string Text = text;
|
public readonly string Text = text;
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
@ -1290,14 +1290,14 @@ namespace MuzikaGromche
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WindUpZeroBeatEvent : BaseEvent
|
class WindUpZeroBeatEvent : BaseEvent
|
||||||
{
|
{
|
||||||
public override string ToString() => "WindUp";
|
public override string ToString() => "WindUp";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default C#/.NET remainder operator % returns negative result for negative input
|
// Default C#/.NET remainder operator % returns negative result for negative input
|
||||||
// which is unsuitable as an index for an array.
|
// which is unsuitable as an index for an array.
|
||||||
public static class Mod
|
static class Mod
|
||||||
{
|
{
|
||||||
public static int Positive(int x, int m)
|
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)
|
public RandomWeightedIndex(int[] weights)
|
||||||
{
|
{
|
||||||
|
@ -1404,7 +1404,7 @@ namespace MuzikaGromche
|
||||||
readonly public int TotalWeights { get; }
|
readonly public int TotalWeights { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SyncedEntryExtensions
|
static class SyncedEntryExtensions
|
||||||
{
|
{
|
||||||
// Update local values on clients. Even though the clients couldn't
|
// Update local values on clients. Even though the clients couldn't
|
||||||
// edit them, they could at least see the new values.
|
// edit them, they could at least see the new values.
|
||||||
|
@ -1417,7 +1417,7 @@ namespace MuzikaGromche
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Config : SyncedConfig2<Config>
|
class Config : SyncedConfig2<Config>
|
||||||
{
|
{
|
||||||
public static ConfigEntry<bool> DisplayLyrics { get; private set; } = null!;
|
public static ConfigEntry<bool> DisplayLyrics { get; private set; } = null!;
|
||||||
|
|
||||||
|
@ -1438,7 +1438,7 @@ namespace MuzikaGromche
|
||||||
public static float? ColorTransitionOutOverride { get; private set; } = null;
|
public static float? ColorTransitionOutOverride { get; private set; } = null;
|
||||||
public static string? ColorTransitionEasingOverride { 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,
|
DisplayLyrics = configFile.Bind("General", "Display Lyrics", true,
|
||||||
new ConfigDescription("Display lyrics in the HUD tooltip when you hear the music."));
|
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
|
// farAudio is during windup, Start overrides popGoesTheWeaselTheme
|
||||||
// creatureVoice is when popped, Loop overrides screamingSFX
|
// creatureVoice is when popped, Loop overrides screamingSFX
|
||||||
[HarmonyPatch(typeof(JesterAI))]
|
[HarmonyPatch(typeof(JesterAI))]
|
||||||
internal class JesterPatch
|
static class JesterPatch
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
[HarmonyPatch(nameof(JesterAI.SetJesterInitialValues))]
|
[HarmonyPatch(nameof(JesterAI.SetJesterInitialValues))]
|
||||||
|
@ -1786,7 +1786,7 @@ namespace MuzikaGromche
|
||||||
|
|
||||||
[HarmonyPatch(nameof(JesterAI.Update))]
|
[HarmonyPatch(nameof(JesterAI.Update))]
|
||||||
[HarmonyPrefix]
|
[HarmonyPrefix]
|
||||||
static void DoNotStopTheMusicPrefix(JesterAI __instance, out State __state)
|
static void JesterUpdatePrefix(JesterAI __instance, out State __state)
|
||||||
{
|
{
|
||||||
__state = new State
|
__state = new State
|
||||||
{
|
{
|
||||||
|
@ -1808,7 +1808,7 @@ namespace MuzikaGromche
|
||||||
|
|
||||||
[HarmonyPatch(nameof(JesterAI.Update))]
|
[HarmonyPatch(nameof(JesterAI.Update))]
|
||||||
[HarmonyPostfix]
|
[HarmonyPostfix]
|
||||||
static void DoNotStopTheMusic(JesterAI __instance, State __state)
|
static void JesterUpdatePostfix(JesterAI __instance, State __state)
|
||||||
{
|
{
|
||||||
if (__instance.previousState == 1 && __state.previousState != 1)
|
if (__instance.previousState == 1 && __state.previousState != 1)
|
||||||
{
|
{
|
||||||
|
@ -1900,13 +1900,13 @@ namespace MuzikaGromche
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(EnemyAI))]
|
[HarmonyPatch(typeof(EnemyAI))]
|
||||||
internal class EnemyAIPatch
|
static class EnemyAIPatch
|
||||||
{
|
{
|
||||||
// JesterAI class does not override abstract method OnDestroy,
|
// JesterAI class does not override abstract method OnDestroy,
|
||||||
// so we have to patch its superclass directly.
|
// so we have to patch its superclass directly.
|
||||||
[HarmonyPatch(nameof(EnemyAI.OnDestroy))]
|
[HarmonyPatch(nameof(EnemyAI.OnDestroy))]
|
||||||
[HarmonyPrefix]
|
[HarmonyPrefix]
|
||||||
public static void CleanUpOnDestroy(EnemyAI __instance)
|
static void CleanUpOnDestroy(EnemyAI __instance)
|
||||||
{
|
{
|
||||||
if (__instance is JesterAI)
|
if (__instance is JesterAI)
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,7 @@ using UnityEngine;
|
||||||
|
|
||||||
namespace MuzikaGromche
|
namespace MuzikaGromche
|
||||||
{
|
{
|
||||||
internal class PoweredLightsAnimators
|
static class PoweredLightsAnimators
|
||||||
{
|
{
|
||||||
private delegate void ManualPatch(GameObject animatorContainer);
|
private delegate void ManualPatch(GameObject animatorContainer);
|
||||||
|
|
||||||
|
@ -167,11 +167,11 @@ namespace MuzikaGromche
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(Tile))]
|
[HarmonyPatch(typeof(Tile))]
|
||||||
internal class PoweredLightsAnimatorsPatch
|
static class PoweredLightsAnimatorsPatch
|
||||||
{
|
{
|
||||||
[HarmonyPatch("AddTriggerVolume")]
|
[HarmonyPatch(nameof(Tile.AddTriggerVolume))]
|
||||||
[HarmonyPostfix]
|
[HarmonyPostfix]
|
||||||
public static void OnAddTriggerVolume(Tile __instance)
|
static void OnAddTriggerVolume(Tile __instance)
|
||||||
{
|
{
|
||||||
PoweredLightsAnimators.Patch(__instance);
|
PoweredLightsAnimators.Patch(__instance);
|
||||||
}
|
}
|
||||||
|
@ -188,14 +188,14 @@ namespace MuzikaGromche
|
||||||
// In order to fix that, replace singular GetComponentInChildren<Light> with plural GetComponentsInChildren<Light> version.
|
// In order to fix that, replace singular GetComponentInChildren<Light> with plural GetComponentsInChildren<Light> version.
|
||||||
[HarmonyPatch(nameof(RoundManager.RefreshLightsList))]
|
[HarmonyPatch(nameof(RoundManager.RefreshLightsList))]
|
||||||
[HarmonyPrefix]
|
[HarmonyPrefix]
|
||||||
private static bool OnRefreshLightsList(RoundManager __instance)
|
static bool OnRefreshLightsList(RoundManager __instance)
|
||||||
{
|
{
|
||||||
RefreshLightsListPatched(__instance);
|
RefreshLightsListPatched(__instance);
|
||||||
// Skip the original method
|
// Skip the original method
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void RefreshLightsListPatched(RoundManager self)
|
static void RefreshLightsListPatched(RoundManager self)
|
||||||
{
|
{
|
||||||
// Reusable list to reduce allocations
|
// Reusable list to reduce allocations
|
||||||
List<Light> lights = [];
|
List<Light> lights = [];
|
||||||
|
|
Loading…
Reference in New Issue