From c596de57c22c6a1ef1c46f90466520a60d5e2008 Mon Sep 17 00:00:00 2001 From: Cyro Date: Sat, 16 Apr 2022 20:40:27 -0500 Subject: [PATCH] Add mod options & force local override for worlds --- Build.ps1 | 10 +++++----- SquishPanels.cs | 41 ++++++++++++++++++++++++++++++++++------- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/Build.ps1 b/Build.ps1 index 247339b..562623b 100644 --- a/Build.ps1 +++ b/Build.ps1 @@ -1,20 +1,20 @@ dotnet build $dir = Split-Path -Path (Get-Location) -Leaf -# Put the path to your Neos folder here. -$NeosDir = "C:\Neos\app\" +$NeosDir = "C:\Program Files (x86)\Steam\steamapps\common\NeosVR\" $NeosExe = "$NeosDir\Neos.exe" $AssemblyLocation = "$(Get-Location)\bin\Debug\net4.7.2\$dir.dll" +$LogFolder = "$NeosDir\Logs\" $nml_mods = "$NeosDir\nml_mods\" $dllpath = "$nml_mods\$dir.dll" Copy-Item -Force -Path $AssemblyLocation -Destination $nml_mods -$LogJob = Start-Job {Start-Sleep -Seconds 4 - Get-Content "C:\Neos\app\Logs\$(Get-ChildItem -Path C:\Neos\app\Logs | Sort-Object LastWriteTime | Select-Object -last 1)" -Wait +$LogJob = Start-Job {Start-Sleep -Seconds 8 + Get-Content "$using:LogFolder\$(Get-ChildItem -Path $using:LogFolder | Sort-Object LastWriteTime | Select-Object -last 1)" -Wait } -$NeosProc = Start-Process -FilePath $NeosExe -WorkingDirectory $NeosDir -ArgumentList "-DontAutoOpenCloudHome", "-SkipIntroTutorial", "-Screen", "-LoadAssembly `"C:\Neos\app\Libraries\NeosModLoader.dll`"" -passthru +$NeosProc = Start-Process -FilePath $NeosExe -WorkingDirectory $NeosDir -ArgumentList "-DontAutoOpenCloudHome", "-SkipIntroTutorial", "-Screen", "-LoadAssembly `"$NeosDir\Libraries\NeosModLoader.dll`"" -passthru while(!$NeosProc.HasExited) { Start-Sleep -Seconds 1 diff --git a/SquishPanels.cs b/SquishPanels.cs index a008596..27e8e9c 100644 --- a/SquishPanels.cs +++ b/SquishPanels.cs @@ -13,31 +13,51 @@ -namespace YourNamespaceHere; -public class ModClass : NeosMod +namespace SquishPanels; +public class SquishPanels : NeosMod { public override string Author => "Cyro"; public override string Name => "SquishPanels"; - public override string Version => "2.0.0"; + public override string Version => "2.0.1"; public static float DopplerLevel = 0.0f; public static AudioDistanceSpace DistSpace = AudioDistanceSpace.Global; public static string OpenSoundURL = "neosdb:///bbdf36b8f036a5c30f7019d68c1fbdd4032bb1d4c9403bcb926bb21cd0ca3c1a.wav"; public static string CloseSoundURL = "neosdb:///e600ed8a6895325613b82a50fd2a8ea2ac64151adc5c48c913d33d584fdf75d5.wav"; public static float TweenSpeed = 0.22f; + private static ModConfiguration Config; + + [AutoRegisterConfigKey] + private static ModConfigurationKey Enabled = new ModConfigurationKey("Enabled", "Enables or disables the mod", () => true); + + [AutoRegisterConfigKey] + private static ModConfigurationKey PlaySoundLocally = new ModConfigurationKey("PlaySoundLocally", "Makes the sound local for the mod user if true", () => false); public override void OnEngineInit() { - Harmony harmony = new Harmony("net.Author.ModClass"); + Config = GetConfiguration(); + + if (Config == null) + throw new NullReferenceException("Config is null"); + + Config.Save(true); + Harmony harmony = new Harmony("net.Cyro.SquishPanels"); harmony.PatchAll(); } [HarmonyPatch(typeof(NeosPanel), "OnAttach")] public static class NeosPanel_OnAttach_Patch { + + private static bool ShouldPlayLocally() + { + string? description = Engine.Current.WorldManager.FocusedWorld.Description; + return description != null && description.Contains("##SquishPanels.ForceLocal##") || Config.GetValue(PlaySoundLocally); + } public static void PlayOpenSound(NeosPanel __instance) { StaticAudioClip clip = __instance.World.GetSharedComponentOrCreate(OpenSoundURL, a => a.URL.Value = new Uri(OpenSoundURL)); - AudioOutput audio = __instance.World.PlayOneShot(__instance.Slot.GlobalPosition, clip, 1f, true, 1f, __instance.Slot, AudioDistanceSpace.Local, false); + AudioOutput audio = __instance.World.PlayOneShot(__instance.Slot.GlobalPosition, clip, 1f, true, 1f, __instance.Slot, AudioDistanceSpace.Local, ShouldPlayLocally()); + // UniLog.Log("Playing Open Sound " + (ShouldPlayLocally() ? "Locally" : "Globally").ToString()); audio.DopplerLevel.Value = DopplerLevel; audio.DistanceSpace.Value = DistSpace; } @@ -45,13 +65,17 @@ public static void PlayOpenSound(NeosPanel __instance) public static void PlayCloseSound(NeosPanel __instance) { StaticAudioClip clip = __instance.World.GetSharedComponentOrCreate(CloseSoundURL, a => a.URL.Value = new Uri(CloseSoundURL)); - AudioOutput audio = __instance.World.PlayOneShot(__instance.Slot.GlobalPosition, clip, 1f, true, 1f, __instance.Slot, AudioDistanceSpace.Local, false); + AudioOutput audio = __instance.World.PlayOneShot(__instance.Slot.GlobalPosition, clip, 1f, true, 1f, __instance.Slot, AudioDistanceSpace.Local, ShouldPlayLocally()); + // UniLog.Log("Playing Close Sound " + (ShouldPlayLocally() ? "Locally" : "Globally").ToString()); audio.DopplerLevel.Value = DopplerLevel; audio.DistanceSpace.Value = DistSpace; } - public static void Prefix(NeosPanel __instance) + public static void Postfix(NeosPanel __instance) { + if (!Config.GetValue(Enabled)) + return; + float3 Orig = __instance.Slot.LocalScale; SyncListElementsEvent>? CanvasListener = null; @@ -104,6 +128,9 @@ public static class NeosPanel_AddCloseButton_Patch { public static bool Prefix(NeosPanel __instance, NeosPanel.TitleButton button) { + if(!Config.GetValue(Enabled)) + return true; + Action OnTweenDoneAction = delegate() { NeosPanel_OnClose_Snapshot.OnClose(__instance, button); }; if (__instance.WhiteList.Count < 1)