[AvatarScaleMod] Tweaking settings.

This commit is contained in:
NotAKidoS 2023-09-25 14:09:05 -05:00
parent b29e9fbb6f
commit 497b0b0e7a
3 changed files with 64 additions and 90 deletions

View file

@ -18,7 +18,19 @@ public class AvatarScaleManager : MonoBehaviour
private LocalScaler _localAvatarScaler; private LocalScaler _localAvatarScaler;
private Dictionary<string, NetworkScaler> _networkedScalers; private Dictionary<string, NetworkScaler> _networkedScalers;
public bool Setting_UniversalScaling = true; private bool _settingUniversalScaling;
public bool Setting_UniversalScaling
{
get => _settingUniversalScaling;
set
{
if (value != _settingUniversalScaling && value == false)
SetHeight(-1f);
_settingUniversalScaling = value;
}
}
public bool Setting_PersistantHeight; public bool Setting_PersistantHeight;
private float _lastTargetHeight = -1; private float _lastTargetHeight = -1;
@ -39,6 +51,8 @@ public class AvatarScaleManager : MonoBehaviour
private void Start() private void Start()
{ {
_settingUniversalScaling = ModSettings.EntryUseUniversalScaling.Value;
CVRGameEventSystem.Instance.OnConnected.AddListener(OnInstanceConnected); CVRGameEventSystem.Instance.OnConnected.AddListener(OnInstanceConnected);
//SchedulerSystem.AddJob(new SchedulerSystem.Job(ForceHeightUpdate), 0f, 10f, -1); //SchedulerSystem.AddJob(new SchedulerSystem.Job(ForceHeightUpdate), 0f, 10f, -1);
} }
@ -58,12 +72,6 @@ public class AvatarScaleManager : MonoBehaviour
SchedulerSystem.AddJob(ModNetwork.RequestHeightSync, 2f, 1f, 1); SchedulerSystem.AddJob(ModNetwork.RequestHeightSync, 2f, 1f, 1);
} }
public void OnSettingsChanged()
{
Setting_UniversalScaling = ModSettings.EntryUniversalScaling.Value;
SetHeight(Setting_UniversalScaling ? _lastTargetHeight : -1);
}
#endregion #endregion
#region Local Methods #region Local Methods
@ -82,6 +90,9 @@ public class AvatarScaleManager : MonoBehaviour
_localAvatarScaler.OnAvatarInstantiated(playerSetup._avatar, playerSetup._initialAvatarHeight, _localAvatarScaler.OnAvatarInstantiated(playerSetup._avatar, playerSetup._initialAvatarHeight,
playerSetup.initialScale); playerSetup.initialScale);
if (!_settingUniversalScaling)
return;
SetHeight(Setting_PersistantHeight ? _lastTargetHeight : -1f); SetHeight(Setting_PersistantHeight ? _lastTargetHeight : -1f);
} }
@ -93,6 +104,9 @@ public class AvatarScaleManager : MonoBehaviour
public void SetHeight(float targetHeight) public void SetHeight(float targetHeight)
{ {
if (!_settingUniversalScaling)
return;
if (_localAvatarScaler == null) if (_localAvatarScaler == null)
return; return;
@ -107,6 +121,9 @@ public class AvatarScaleManager : MonoBehaviour
public void ResetHeight() public void ResetHeight()
{ {
if (!_settingUniversalScaling)
return;
if (_localAvatarScaler != null) if (_localAvatarScaler != null)
_localAvatarScaler.ResetHeight(); _localAvatarScaler.ResetHeight();
ModNetwork.SendNetworkHeight(-1f); ModNetwork.SendNetworkHeight(-1f);
@ -122,6 +139,9 @@ public class AvatarScaleManager : MonoBehaviour
public float GetHeightForNetwork() public float GetHeightForNetwork()
{ {
if (!_settingUniversalScaling)
return -1f;
if (_localAvatarScaler == null) if (_localAvatarScaler == null)
return -1f; return -1f;

View file

@ -19,7 +19,7 @@ public class AvatarScaleMod : MelonMod
InitializeIntegration("BTKUILib", Integrations.BTKUIAddon.Initialize); InitializeIntegration("BTKUILib", Integrations.BTKUIAddon.Initialize);
ModNetwork.Subscribe(); ModNetwork.Subscribe();
ModSettings.InitializeModSettings(); ModSettings.Initialize();
} }
public override void OnUpdate() public override void OnUpdate()

View file

@ -8,90 +8,44 @@ namespace NAK.AvatarScaleMod;
internal static class ModSettings internal static class ModSettings
{ {
// Constants
internal const string SettingsCategory = nameof(AvatarScaleMod); internal const string SettingsCategory = nameof(AvatarScaleMod);
public static readonly MelonPreferences_Category Category = public static readonly MelonPreferences_Category Category =
MelonPreferences.CreateCategory(nameof(AvatarScaleMod)); MelonPreferences.CreateCategory(SettingsCategory);
public static MelonPreferences_Entry<bool> PersistantHeight; public static readonly MelonPreferences_Entry<bool> EntryUseUniversalScaling =
Category.CreateEntry("use_universal_scaling", true, display_name: "Use Universal Scaling", description: "Enable or disable universal scaling.");
public static MelonPreferences_Entry<bool> Debug_NetworkInbound; public static readonly MelonPreferences_Entry<bool> EntryPersistantHeight =
public static MelonPreferences_Entry<bool> Debug_NetworkOutbound; Category.CreateEntry("persistant_height", false, display_name: "Persistant Height", description: "Should the avatar height persist between avatar switches?");
// AvatarScaleTool supported scaling settings public static readonly MelonPreferences_Entry<bool> EntryScaleGestureEnabled =
public static readonly MelonPreferences_Entry<bool> EntryEnabled = Category.CreateEntry("scale_gesture_enabled", true, display_name: "Scale Gesture Enabled", description: "Enable or disable scale gesture.");
Category.CreateEntry("AvatarScaleTool Scaling", true, description: "Should there be persistant avatar scaling? This only works properly across supported avatars.");
// Universal scaling settings (Mod Network, requires others to have mod) public static readonly MelonPreferences_Entry<bool> EntryDebugNetworkInbound =
public static readonly MelonPreferences_Entry<bool> EntryUniversalScaling = Category.CreateEntry("debug_inbound", false, display_name: "Debug Inbound", description: "Log inbound Mod Network height updates.");
Category.CreateEntry("Force Universal Scaling", false, description: "Should the mod use Mod Network for scaling? This makes it work on all avatars, but others need the mod.");
public static readonly MelonPreferences_Entry<bool> EntryScaleConstraints =
Category.CreateEntry("Scale Constraints", false, description: "Should constraints be scaled with Universal Scaling?");
public static readonly MelonPreferences_Entry<bool> EntryScaleLights =
Category.CreateEntry("Scale Lights", false, description: "Should lights be scaled with Universal Scaling?");
public static readonly MelonPreferences_Entry<bool> EntryScaleAudioSources =
Category.CreateEntry("Scale Audio Sources", false, description: "Should audio sources be scaled with Universal Scaling?");
// General scaling settings public static readonly MelonPreferences_Entry<bool> EntryDebugNetworkOutbound =
public static readonly MelonPreferences_Entry<bool> EntryUseScaleGesture = Category.CreateEntry("debug_outbound", false, display_name: "Debug Outbound", description: "Log outbound Mod Network height updates.");
Category.CreateEntry("Scale Gesture", false, description: "Use two fists to scale yourself easily.");
// Internal settings public static readonly MelonPreferences_Entry<float> EntryHiddenLastAvatarScale =
public static readonly MelonPreferences_Entry<float> HiddenLastAvatarScale = Category.CreateEntry("last_avatar_scale", -1f, is_hidden: true);
Category.CreateEntry("Last Avatar Scale", -1f, is_hidden: true);
static ModSettings() public static void Initialize()
{ {
EntryEnabled.OnEntryValueChanged.Subscribe(OnEntryEnabledChanged); foreach (MelonPreferences_Entry entry in Category.Entries)
EntryUseScaleGesture.OnEntryValueChanged.Subscribe(OnEntryUseScaleGestureChanged); entry.OnEntryValueChangedUntyped.Subscribe(OnSettingsChanged);
EntryUniversalScaling.OnEntryValueChanged.Subscribe(OnEntryUniversalScalingChanged);
EntryScaleConstraints.OnEntryValueChanged.Subscribe(OnEntryScaleConstraintsChanged);
} }
private static void OnEntryEnabledChanged(bool oldValue, bool newValue) private static void OnSettingsChanged(object _, object __)
{ {
//AvatarScaleManager.UseUniversalScaling = newValue; AvatarScaleManager.Instance.Setting_UniversalScaling = EntryUseUniversalScaling.Value;
} AvatarScaleManager.Instance.Setting_PersistantHeight = EntryPersistantHeight.Value;
private static void OnEntryUseScaleGestureChanged(bool oldValue, bool newValue) GestureReconizer.ScaleReconizer.Enabled = EntryScaleGestureEnabled.Value;
{
//AvatarScaleGesture.GestureEnabled = newValue;
}
ModNetwork.Debug_NetworkInbound = EntryDebugNetworkInbound.Value;
ModNetwork.Debug_NetworkOutbound = EntryDebugNetworkOutbound.Value;
private static void OnEntryUniversalScalingChanged(bool oldValue, bool newValue)
{
}
private static void OnEntryScaleConstraintsChanged(bool oldValue, bool newValue)
{
}
public static void InitializeModSettings()
{
PersistantHeight = Category.CreateEntry("Persistant Height", false, description: "Should the avatar height persist between avatar switches?");
PersistantHeight.OnEntryValueChanged.Subscribe(OnPersistantHeightChanged);
Debug_NetworkInbound = Category.CreateEntry("Debug Inbound", false, description: "Log inbound Mod Network height updates.");
Debug_NetworkInbound.OnEntryValueChanged.Subscribe(OnDebugNetworkChanged);
Debug_NetworkOutbound = Category.CreateEntry("Debug Outbound", false, description: "Log outbound Mod Network height updates.");
Debug_NetworkOutbound.OnEntryValueChanged.Subscribe(OnDebugNetworkChanged);
//AvatarScaleManager.UseUniversalScaling = EntryEnabled.Value;
//AvatarScaleGesture.GestureEnabled = EntryUseScaleGesture.Value;
}
private static void OnPersistantHeightChanged(bool oldValue, bool newValue)
{
AvatarScaleManager.Instance.Setting_PersistantHeight = newValue;
}
private static void OnDebugNetworkChanged(bool oldValue, bool newValue)
{
ModNetwork.Debug_NetworkInbound = Debug_NetworkInbound.Value;
ModNetwork.Debug_NetworkOutbound = Debug_NetworkOutbound.Value;
} }
} }