Skip to content
This repository was archived by the owner on Jul 16, 2020. It is now read-only.

Commit

Permalink
Merge pull request #68 from mixer/fix-set-property-api
Browse files Browse the repository at this point in the history
Fix SetProperty API
  • Loading branch information
payzer authored Apr 3, 2018
2 parents 14a32b0 + 02e1807 commit bcbe202
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,31 @@ public void SetDisabled(bool disabled)
/// </summary>
/// <param name="name">The name of the control property.</param>
/// <param name="value">The value of the control property.</param>
public void SetProperty(InteractiveControlProperty name, bool value)
{
SetPropertyImpl(
InteractivityManager.SingletonInstance.InteractiveControlPropertyToString(name),
value
);
}
public void SetProperty(InteractiveControlProperty name, double value)
{
SetPropertyImpl(
InteractivityManager.SingletonInstance.InteractiveControlPropertyToString(name),
value
);
}
public void SetProperty(InteractiveControlProperty name, string value)
{
SetPropertyImpl(
InteractivityManager.SingletonInstance.InteractiveControlPropertyToString(name),
value
);
}
public void SetProperty(InteractiveControlProperty name, object value)
{
SetPropertyImpl(
InteractivityManager.SingletonInstance.InteractiveControlPropertyToString(name),
InteractivityManager.SingletonInstance.InteractiveControlPropertyToString(name),
value
);
}
Expand All @@ -99,14 +120,38 @@ public void SetProperty(InteractiveControlProperty name, object value)
/// </summary>
/// <param name="name">The name of the control property.</param>
/// <param name="value">The value of the control property.</param>
public void SetProperty(string name, bool value)
{
SetPropertyImpl(name, value);
}
public void SetProperty(string name, double value)
{
SetPropertyImpl(name, value);
}
public void SetProperty(string name, string value)
{
SetPropertyImpl(name, value);
}
public void SetProperty(string name, object value)
{
SetPropertyImpl(name, value);
}

private void SetPropertyImpl(string name, bool value)
{
InteractivityManager.SingletonInstance._QueuePropertyUpdate(SceneID, ControlID, name, value);
}
private void SetPropertyImpl(string name, double value)
{
InteractivityManager.SingletonInstance._QueuePropertyUpdate(SceneID, ControlID, name, value);
}
private void SetPropertyImpl(string name, string value)
{
InteractivityManager.SingletonInstance._QueuePropertyUpdate(SceneID, ControlID, name, value);
}
private void SetPropertyImpl(string name, object value)
{
InteractivityManager.SingletonInstance.QueuePropertyUpdate(SceneID, ControlID, name, value);
InteractivityManager.SingletonInstance._QueuePropertyUpdate(SceneID, ControlID, name, value);
}

internal InteractiveControl(string controlID, string kind, InteractiveEventType type, bool disabled, string helpText, string eTag, string sceneID)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public string Text
public void SetText(string text)
{
InteractivityManager interactivityManager = InteractivityManager.SingletonInstance;
interactivityManager.QueuePropertyUpdate(
interactivityManager._QueuePropertyUpdate(
SceneID,
ControlID,
interactivityManager.InteractiveControlPropertyToString(InteractiveControlProperty.Text),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1327,12 +1327,24 @@ public void SendQueuedSetControlPropertyUpdates()
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName(WS_MESSAGE_KEY_CONTROL_ID);
jsonWriter.WriteValue(controlID);
Dictionary<string, object> controlPropertyData = _queuedControlPropertyUpdates[sceneID][controlID].properties;
Dictionary<string, InternalControlPropertyMetaData> controlPropertyData = _queuedControlPropertyUpdates[sceneID][controlID].properties;
var controlPropertyDataKeys = controlPropertyData.Keys;
foreach (string controlPropertyDataKey in controlPropertyDataKeys)
{
jsonWriter.WritePropertyName(controlPropertyDataKey);
jsonWriter.WriteValue(controlPropertyData[controlPropertyDataKey].ToString());
InternalControlPropertyMetaData controlPropertyMetaData = controlPropertyData[controlPropertyDataKey];
if (controlPropertyMetaData.type == KnownControlPropertyPrimitiveTypes.Boolean)
{
jsonWriter.WriteValue(controlPropertyMetaData.boolValue);
}
else if (controlPropertyMetaData.type == KnownControlPropertyPrimitiveTypes.Number)
{
jsonWriter.WriteValue(controlPropertyMetaData.numberValue);
}
else
{
jsonWriter.WriteValue(controlPropertyMetaData.stringValue);
}
}
jsonWriter.WriteEndObject();
}
Expand Down Expand Up @@ -3868,12 +3880,33 @@ private void UpdateInternalTextBoxState(InteractiveTextEventArgs e)
_textboxValuesByParticipant[e.Participant.UserID][e.ControlID] = text;
}

internal void QueuePropertyUpdate(string sceneID, string controlID, string name, object value)
internal void _QueuePropertyUpdate(string sceneID, string controlID, string name, bool value)
{
KnownControlPropertyPrimitiveTypes type = KnownControlPropertyPrimitiveTypes.Boolean;
_QueuePropertyUpdateImpl(sceneID, controlID, name, type, value);
}
internal void _QueuePropertyUpdate(string sceneID, string controlID, string name, double value)
{
KnownControlPropertyPrimitiveTypes type = KnownControlPropertyPrimitiveTypes.Number;
_QueuePropertyUpdateImpl(sceneID, controlID, name, type, value);
}
internal void _QueuePropertyUpdate(string sceneID, string controlID, string name, string value)
{
KnownControlPropertyPrimitiveTypes type = KnownControlPropertyPrimitiveTypes.String;
_QueuePropertyUpdateImpl(sceneID, controlID, name, type, value);
}
internal void _QueuePropertyUpdate(string sceneID, string controlID, string name, object value)
{
KnownControlPropertyPrimitiveTypes type = KnownControlPropertyPrimitiveTypes.Unknown;
_QueuePropertyUpdateImpl(sceneID, controlID, name, type, value);
}

internal void _QueuePropertyUpdateImpl(string sceneID, string controlID, string name, KnownControlPropertyPrimitiveTypes type, object value)
{
// If a scene entry doesn't exist, add one.
if (!_queuedControlPropertyUpdates.ContainsKey(sceneID))
{
InternalControlPropertyUpdateData controlPropertyData = new InternalControlPropertyUpdateData(name, value);
InternalControlPropertyUpdateData controlPropertyData = new InternalControlPropertyUpdateData(name, type, value);
Dictionary<string, InternalControlPropertyUpdateData> controlData = new Dictionary<string, InternalControlPropertyUpdateData>();
controlData.Add(controlID, controlPropertyData);
_queuedControlPropertyUpdates.Add(sceneID, controlData);
Expand All @@ -3884,20 +3917,34 @@ internal void QueuePropertyUpdate(string sceneID, string controlID, string name,
Dictionary<string, InternalControlPropertyUpdateData> controlData = _queuedControlPropertyUpdates[sceneID];
if (!controlData.ContainsKey(controlID))
{
InternalControlPropertyUpdateData controlPropertyData = new InternalControlPropertyUpdateData(name, value);
InternalControlPropertyUpdateData controlPropertyData = new InternalControlPropertyUpdateData(name, type, value);
_queuedControlPropertyUpdates[sceneID].Add(controlID, controlPropertyData);
}
else
{
// Control entry exists, but does property entry exist?
InternalControlPropertyUpdateData controlPropertyData = controlData[controlID];
InternalControlPropertyMetaData controlPropertyMetaData = new InternalControlPropertyMetaData();
controlPropertyMetaData.type = type;
if (type == KnownControlPropertyPrimitiveTypes.Boolean)
{
controlPropertyMetaData.boolValue = (bool)value;
}
else if (type == KnownControlPropertyPrimitiveTypes.Number)
{
controlPropertyMetaData.numberValue = (double)value;
}
else
{
controlPropertyMetaData.stringValue = value.ToString();
}
if (!controlPropertyData.properties.ContainsKey(name))
{
_queuedControlPropertyUpdates[sceneID][controlID].properties.Add(name, value);
_queuedControlPropertyUpdates[sceneID][controlID].properties.Add(name, controlPropertyMetaData);
}
else
{
_queuedControlPropertyUpdates[sceneID][controlID].properties[name] = value;
_queuedControlPropertyUpdates[sceneID][controlID].properties[name] = controlPropertyMetaData;
}
}
}
Expand Down Expand Up @@ -3985,14 +4032,53 @@ internal struct InternalButtonState

internal struct InternalControlPropertyUpdateData
{
internal Dictionary<string, object> properties;
public InternalControlPropertyUpdateData(string name, object value)
internal Dictionary<string, InternalControlPropertyMetaData> properties;
public InternalControlPropertyUpdateData(string name, KnownControlPropertyPrimitiveTypes type, object value)
{
properties = new Dictionary<string, object>();
properties.Add(name, value);
properties = new Dictionary<string, InternalControlPropertyMetaData>();
InternalControlPropertyMetaData typeData = new InternalControlPropertyMetaData();
typeData.type = type;
// This should never fail, but just in case.
try
{
if (type == KnownControlPropertyPrimitiveTypes.Boolean)
{
typeData.boolValue = (bool)value;
}
else if (type == KnownControlPropertyPrimitiveTypes.Number)
{
typeData.numberValue = (double)value;
}
else
{
typeData.stringValue = value.ToString();
}
}
catch (Exception ex)
{
InteractivityManager.SingletonInstance.LogError("Failed to cast the value to a known type. Exception: " + ex.Message);
}
properties.Add(name, typeData);
}
}

internal struct InternalControlPropertyMetaData
{
public object objectValue;
public bool boolValue;
public double numberValue;
public string stringValue;
public KnownControlPropertyPrimitiveTypes type;
}

internal enum KnownControlPropertyPrimitiveTypes
{
Unknown,
Boolean,
Number,
String
}

internal struct InternalJoystickState
{
internal double X;
Expand Down
Binary file modified Source/InteractiveSDK/ProjectSettings/ProjectSettings.asset
Binary file not shown.

0 comments on commit bcbe202

Please sign in to comment.