mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-02 14:29:25 +00:00
Initial Release
Added UIExpansionKit support, moved Harmony patches to own cs, added accidental feature that disables automatic state change, added option to lower FPS while in sleep state.
This commit is contained in:
parent
d033d3750e
commit
e6784b967e
5 changed files with 80 additions and 30 deletions
|
@ -38,6 +38,9 @@
|
||||||
<Reference Include="SteamVR">
|
<Reference Include="SteamVR">
|
||||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\SteamVR.dll</HintPath>
|
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\SteamVR.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="UIExpansionKit">
|
||||||
|
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\Mods\UIExpansionKit.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="UnityEngine.AnimationModule">
|
<Reference Include="UnityEngine.AnimationModule">
|
||||||
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Player;
|
||||||
using ABI_RC.Core.UI;
|
using ABI_RC.Core.UI;
|
||||||
|
using ABI_RC.Core.Savior;
|
||||||
using MelonLoader;
|
using MelonLoader;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
|
@ -47,6 +48,9 @@ public class BlackoutController : MonoBehaviour
|
||||||
//this is uh, not work well- might rewrite now that i know how this should work
|
//this is uh, not work well- might rewrite now that i know how this should work
|
||||||
public bool HudMessages = false;
|
public bool HudMessages = false;
|
||||||
|
|
||||||
|
//lower FPS while in sleep mode
|
||||||
|
public bool DropFPSOnSleep = false;
|
||||||
|
|
||||||
public enum BlackoutState
|
public enum BlackoutState
|
||||||
{
|
{
|
||||||
Awake = 0,
|
Awake = 0,
|
||||||
|
@ -60,6 +64,7 @@ public class BlackoutController : MonoBehaviour
|
||||||
private float lastAwakeTime = 0f;
|
private float lastAwakeTime = 0f;
|
||||||
private int nextUpdate = 1;
|
private int nextUpdate = 1;
|
||||||
private Animator blackoutAnimator;
|
private Animator blackoutAnimator;
|
||||||
|
private int targetFPS;
|
||||||
|
|
||||||
public void ChangeBlackoutState(BlackoutState newState)
|
public void ChangeBlackoutState(BlackoutState newState)
|
||||||
{
|
{
|
||||||
|
@ -91,6 +96,7 @@ public class BlackoutController : MonoBehaviour
|
||||||
BlackoutState prevState = CurrentState;
|
BlackoutState prevState = CurrentState;
|
||||||
CurrentState = newState;
|
CurrentState = newState;
|
||||||
SendHUDMessage($"Exiting {prevState} and entering {newState} state.");
|
SendHUDMessage($"Exiting {prevState} and entering {newState} state.");
|
||||||
|
ChangeTargetFPS();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
|
@ -145,17 +151,9 @@ public class BlackoutController : MonoBehaviour
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnEnabled()
|
void OnDisable()
|
||||||
{
|
|
||||||
if (!blackoutAnimator) return;
|
|
||||||
blackoutAnimator.gameObject.SetActive(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnDisabled()
|
|
||||||
{
|
{
|
||||||
ChangeBlackoutState(BlackoutState.Awake);
|
ChangeBlackoutState(BlackoutState.Awake);
|
||||||
if (!blackoutAnimator) return;
|
|
||||||
blackoutAnimator.gameObject.SetActive(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetupBlackoutInstance()
|
public void SetupBlackoutInstance()
|
||||||
|
@ -189,6 +187,16 @@ public class BlackoutController : MonoBehaviour
|
||||||
CohtmlHud.Instance.ViewDropTextImmediate("Blackout", message, GetNextStateTimer().ToString() + " seconds till next state change.");
|
CohtmlHud.Instance.ViewDropTextImmediate("Blackout", message, GetNextStateTimer().ToString() + " seconds till next state change.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ChangeTargetFPS()
|
||||||
|
{
|
||||||
|
if (!DropFPSOnSleep) return;
|
||||||
|
|
||||||
|
//store target FPS to restore, i check each time just in case it changed
|
||||||
|
targetFPS = MetaPort.Instance.settings.GetSettingInt("GraphicsFramerateTarget", 0);
|
||||||
|
|
||||||
|
Application.targetFrameRate = (CurrentState == BlackoutState.Sleeping) ? 5 : targetFPS;
|
||||||
|
}
|
||||||
|
|
||||||
private void HandleAwakeState()
|
private void HandleAwakeState()
|
||||||
{
|
{
|
||||||
//small movement should reset sleep timer
|
//small movement should reset sleep timer
|
||||||
|
|
19
Blackout/HarmonyPatches.cs
Normal file
19
Blackout/HarmonyPatches.cs
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
using HarmonyLib;
|
||||||
|
using ABI_RC.Core.Player;
|
||||||
|
|
||||||
|
namespace Blackout;
|
||||||
|
|
||||||
|
[HarmonyPatch]
|
||||||
|
internal class HarmonyPatches
|
||||||
|
{
|
||||||
|
//Support for changing VRMode during runtime.
|
||||||
|
[HarmonyPostfix]
|
||||||
|
[HarmonyPatch(typeof(PlayerSetup), "CalibrateAvatar")]
|
||||||
|
private static void CheckVRModeOnSwitch()
|
||||||
|
{
|
||||||
|
if (Blackout.inVR != PlayerSetup.Instance._inVr)
|
||||||
|
{
|
||||||
|
BlackoutController.Instance.SetupBlackoutInstance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,11 +7,13 @@ namespace Blackout;
|
||||||
|
|
||||||
public class Blackout : MelonMod
|
public class Blackout : MelonMod
|
||||||
{
|
{
|
||||||
private static bool inVR;
|
public const string SettingsCategory = "Blackout";
|
||||||
private static MelonPreferences_Category m_categoryBlackout;
|
|
||||||
private static MelonPreferences_Entry<bool> m_entryEnabled, m_entryHudMessages;
|
internal static bool inVR;
|
||||||
//private static MelonPreferences_Entry<bool> m_entryVROnly;
|
internal static MelonPreferences_Category m_categoryBlackout;
|
||||||
private static MelonPreferences_Entry<float>
|
internal static MelonPreferences_Entry<bool> m_entryEnabled, m_entryHudMessages, m_entryDropFPSOnSleep;
|
||||||
|
//internal static MelonPreferences_Entry<bool> m_entryVROnly;
|
||||||
|
internal static MelonPreferences_Entry<float>
|
||||||
m_entryDrowsyThreshold, m_entryAwakeThreshold,
|
m_entryDrowsyThreshold, m_entryAwakeThreshold,
|
||||||
m_entryDrowsyModeTimer, m_entrySleepModeTimer,
|
m_entryDrowsyModeTimer, m_entrySleepModeTimer,
|
||||||
m_entryDrowsyDimStrength;
|
m_entryDrowsyDimStrength;
|
||||||
|
@ -19,8 +21,9 @@ public class Blackout : MelonMod
|
||||||
public override void OnApplicationStart()
|
public override void OnApplicationStart()
|
||||||
{
|
{
|
||||||
m_categoryBlackout = MelonPreferences.CreateCategory(nameof(Blackout));
|
m_categoryBlackout = MelonPreferences.CreateCategory(nameof(Blackout));
|
||||||
m_entryEnabled = m_categoryBlackout.CreateEntry<bool>("Enabled", true, description: "Dim screen when sleeping.");
|
m_entryEnabled = m_categoryBlackout.CreateEntry<bool>("Automatic State Change", true, description: "Dim screen when there is no movement for a while.");
|
||||||
m_entryHudMessages = m_categoryBlackout.CreateEntry<bool>("Hud Messages", false, description: "Notify on state change.");
|
m_entryHudMessages = m_categoryBlackout.CreateEntry<bool>("Hud Messages", false, description: "Notify on state change.");
|
||||||
|
m_entryDropFPSOnSleep = m_categoryBlackout.CreateEntry<bool>("Lower FPS While Sleep", false, description: "Lowers FPS to 5 while in Sleep State.");
|
||||||
m_entryDrowsyThreshold = m_categoryBlackout.CreateEntry<float>("Drowsy Threshold", 1f, description: "Degrees of movement to return partial vision.");
|
m_entryDrowsyThreshold = m_categoryBlackout.CreateEntry<float>("Drowsy Threshold", 1f, description: "Degrees of movement to return partial vision.");
|
||||||
m_entryAwakeThreshold = m_categoryBlackout.CreateEntry<float>("Awake Threshold", 12f, description: "Degrees of movement to return full vision.");
|
m_entryAwakeThreshold = m_categoryBlackout.CreateEntry<float>("Awake Threshold", 12f, description: "Degrees of movement to return full vision.");
|
||||||
m_entryDrowsyModeTimer = m_categoryBlackout.CreateEntry<float>("Enter Drowsy Time", 3f, description: "How many minutes without movement until enter drowsy mode.");
|
m_entryDrowsyModeTimer = m_categoryBlackout.CreateEntry<float>("Enter Drowsy Time", 3f, description: "How many minutes without movement until enter drowsy mode.");
|
||||||
|
@ -29,8 +32,12 @@ public class Blackout : MelonMod
|
||||||
//m_entryVROnly = m_categoryBlackout.CreateEntry<bool>("VR Only", false, description: "Only enable mod in VR.");
|
//m_entryVROnly = m_categoryBlackout.CreateEntry<bool>("VR Only", false, description: "Only enable mod in VR.");
|
||||||
m_categoryBlackout.SaveToFile(false);
|
m_categoryBlackout.SaveToFile(false);
|
||||||
|
|
||||||
|
//please tell me a better way to do this
|
||||||
|
//this is fucking
|
||||||
|
//gross pleas etell me how to do this but not like this
|
||||||
m_entryEnabled.OnValueChangedUntyped += OnEnabled;
|
m_entryEnabled.OnValueChangedUntyped += OnEnabled;
|
||||||
m_entryHudMessages.OnValueChangedUntyped += OnUpdateSettings;
|
m_entryHudMessages.OnValueChangedUntyped += OnUpdateSettings;
|
||||||
|
m_entryDropFPSOnSleep.OnValueChangedUntyped += OnUpdateSettings;
|
||||||
m_entryDrowsyThreshold.OnValueChangedUntyped += OnUpdateSettings;
|
m_entryDrowsyThreshold.OnValueChangedUntyped += OnUpdateSettings;
|
||||||
m_entryAwakeThreshold.OnValueChangedUntyped += OnUpdateSettings;
|
m_entryAwakeThreshold.OnValueChangedUntyped += OnUpdateSettings;
|
||||||
m_entryDrowsyModeTimer.OnValueChangedUntyped += OnUpdateSettings;
|
m_entryDrowsyModeTimer.OnValueChangedUntyped += OnUpdateSettings;
|
||||||
|
@ -38,6 +45,13 @@ public class Blackout : MelonMod
|
||||||
m_entryDrowsyDimStrength.OnValueChangedUntyped += OnUpdateSettings;
|
m_entryDrowsyDimStrength.OnValueChangedUntyped += OnUpdateSettings;
|
||||||
//m_entryVROnly.OnValueChangedUntyped += OnUpdateSettings;
|
//m_entryVROnly.OnValueChangedUntyped += OnUpdateSettings;
|
||||||
MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer());
|
MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer());
|
||||||
|
|
||||||
|
//UIExpansionKit addon
|
||||||
|
if (MelonHandler.Mods.Any(it => it.Info.Name == "UI Expansion Kit"))
|
||||||
|
{
|
||||||
|
MelonLogger.Msg("Initializing UIExpansionKit support.");
|
||||||
|
UiExtensionsAddon.Init();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
System.Collections.IEnumerator WaitForLocalPlayer()
|
System.Collections.IEnumerator WaitForLocalPlayer()
|
||||||
|
@ -70,20 +84,11 @@ public class Blackout : MelonMod
|
||||||
BlackoutController.Instance.SleepModeTimer = m_entrySleepModeTimer.Value;
|
BlackoutController.Instance.SleepModeTimer = m_entrySleepModeTimer.Value;
|
||||||
BlackoutController.Instance.DrowsyDimStrength = m_entryDrowsyDimStrength.Value;
|
BlackoutController.Instance.DrowsyDimStrength = m_entryDrowsyDimStrength.Value;
|
||||||
BlackoutController.Instance.HudMessages = m_entryHudMessages.Value;
|
BlackoutController.Instance.HudMessages = m_entryHudMessages.Value;
|
||||||
|
BlackoutController.Instance.DropFPSOnSleep = m_entryDropFPSOnSleep.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Support for changing VRMode during runtime.
|
//UIExpansionKit actions
|
||||||
[HarmonyPatch]
|
public static void AwakeState() => BlackoutController.Instance.ChangeBlackoutState(BlackoutController.BlackoutState.Awake);
|
||||||
private class HarmonyPatches
|
public static void DrowsyState() => BlackoutController.Instance.ChangeBlackoutState(BlackoutController.BlackoutState.Drowsy);
|
||||||
{
|
public static void SleepingState() => BlackoutController.Instance.ChangeBlackoutState(BlackoutController.BlackoutState.Sleeping);
|
||||||
[HarmonyPostfix]
|
|
||||||
[HarmonyPatch(typeof(PlayerSetup), "CalibrateAvatar")]
|
|
||||||
private static void CheckVRModeSwitch()
|
|
||||||
{
|
|
||||||
if (inVR != PlayerSetup.Instance._inVr)
|
|
||||||
{
|
|
||||||
BlackoutController.Instance.SetupBlackoutInstance();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
15
Blackout/UIExpansionKitAddon.cs
Normal file
15
Blackout/UIExpansionKitAddon.cs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using UIExpansionKit.API;
|
||||||
|
|
||||||
|
namespace Blackout;
|
||||||
|
public static class UiExtensionsAddon
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
|
public static void Init()
|
||||||
|
{
|
||||||
|
var settings = ExpansionKitApi.GetSettingsCategory(Blackout.SettingsCategory);
|
||||||
|
settings.AddSimpleButton("Awake State", Blackout.AwakeState);
|
||||||
|
settings.AddSimpleButton("Drowsy State", Blackout.DrowsyState);
|
||||||
|
settings.AddSimpleButton("Sleep State", Blackout.SleepingState);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue