Skip to content

Commit

Permalink
Add mod options & force local override for worlds
Browse files Browse the repository at this point in the history
  • Loading branch information
BlueCyro committed Apr 17, 2022
1 parent aac8a43 commit c596de5
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 12 deletions.
10 changes: 5 additions & 5 deletions Build.ps1
Original file line number Diff line number Diff line change
@@ -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
Expand Down
41 changes: 34 additions & 7 deletions SquishPanels.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,45 +13,69 @@



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<bool> Enabled = new ModConfigurationKey<bool>("Enabled", "Enables or disables the mod", () => true);

[AutoRegisterConfigKey]
private static ModConfigurationKey<bool> PlaySoundLocally = new ModConfigurationKey<bool>("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<bool>(PlaySoundLocally);
}
public static void PlayOpenSound(NeosPanel __instance)
{
StaticAudioClip clip = __instance.World.GetSharedComponentOrCreate<StaticAudioClip>(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;
}

public static void PlayCloseSound(NeosPanel __instance)
{
StaticAudioClip clip = __instance.World.GetSharedComponentOrCreate<StaticAudioClip>(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<bool>(Enabled))
return;

float3 Orig = __instance.Slot.LocalScale;

SyncListElementsEvent<SyncRef<IBounded>>? CanvasListener = null;
Expand Down Expand Up @@ -104,6 +128,9 @@ public static class NeosPanel_AddCloseButton_Patch
{
public static bool Prefix(NeosPanel __instance, NeosPanel.TitleButton button)
{
if(!Config.GetValue<bool>(Enabled))
return true;

Action OnTweenDoneAction = delegate() { NeosPanel_OnClose_Snapshot.OnClose(__instance, button); };

if (__instance.WhiteList.Count < 1)
Expand Down

0 comments on commit c596de5

Please sign in to comment.