Skip to content

Commit

Permalink
Fix an issue with negative-by-default binary parameters by re-sending…
Browse files Browse the repository at this point in the history
… all parameters on avatar load
  • Loading branch information
benaclejames committed Apr 25, 2023
1 parent b2c9166 commit 15ab81f
Showing 1 changed file with 9 additions and 15 deletions.
24 changes: 9 additions & 15 deletions VRCFaceTracking.Core/OSC/OSCParams.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class BaseParam<T> : IParameter where T : struct
private readonly Func<UnifiedTrackingData, T> _getValueFunc;

private readonly string _paramName;
private readonly Regex _regex;

private bool _relevant;

Expand All @@ -31,9 +32,12 @@ protected set
_relevant = value;

if (_getValueFunc == null) return;

if (value)
{
UnifiedTracking.OnUnifiedDataUpdated += Process;
Enqueue(); // Enqueue a new message to ensure initial values are what we expect
}
else
UnifiedTracking.OnUnifiedDataUpdated -= Process;
}
Expand All @@ -48,36 +52,26 @@ public T ParamValue
if (Equals(OscMessage.CachedValue, value)) return;

OscMessage.Value = value;
NeedsSend = true;
Enqueue();
}
}

private bool NeedsSend
{
set
{
if (!value)
return;

SendQueue.Add(OscMessage._meta);
}
}
private void Enqueue() => SendQueue.Add(OscMessage._meta);

protected readonly OscMessage OscMessage;

public BaseParam(string name, Func<UnifiedTrackingData, T> getValueFunc)
{
_paramName = name;
_regex = new Regex(@"(?<!(v\d+))(/" + _paramName + @")$|^(" + _paramName + @")$");
_getValueFunc = getValueFunc;
OscMessage = new OscMessage(DefaultPrefix+name, typeof(T));
}

public virtual IParameter[] ResetParam(ConfigParser.Parameter[] newParams)
{
Regex regex = new Regex(@"(?<!(v\d+))(/" + _paramName + @")$|^(" + _paramName + @")$");

var compatibleParam = newParams.FirstOrDefault(param =>
regex.IsMatch(param.name)
_regex.IsMatch(param.name)
&& param.input.Type == typeof(T));

if (compatibleParam != null)
Expand Down

0 comments on commit 15ab81f

Please sign in to comment.