diff --git a/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractiveControl.cs b/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractiveControl.cs
index d32bc49..a610224 100644
--- a/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractiveControl.cs
+++ b/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractiveControl.cs
@@ -86,10 +86,31 @@ public void SetDisabled(bool disabled)
///
/// The name of the control property.
/// The value of the control property.
+ 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
);
}
@@ -99,14 +120,38 @@ public void SetProperty(InteractiveControlProperty name, object value)
///
/// The name of the control property.
/// The value of the control property.
+ 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)
diff --git a/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractiveLabelControl.cs b/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractiveLabelControl.cs
index acbaae4..c656f36 100644
--- a/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractiveLabelControl.cs
+++ b/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractiveLabelControl.cs
@@ -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),
diff --git a/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractivityManager.cs b/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractivityManager.cs
index 9ca0545..8ee70db 100644
--- a/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractivityManager.cs
+++ b/Source/InteractiveSDK/Assets/MixerInteractive/Source/Scripts/InteractivityManager.cs
@@ -1327,12 +1327,24 @@ public void SendQueuedSetControlPropertyUpdates()
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName(WS_MESSAGE_KEY_CONTROL_ID);
jsonWriter.WriteValue(controlID);
- Dictionary controlPropertyData = _queuedControlPropertyUpdates[sceneID][controlID].properties;
+ Dictionary 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();
}
@@ -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 controlData = new Dictionary();
controlData.Add(controlID, controlPropertyData);
_queuedControlPropertyUpdates.Add(sceneID, controlData);
@@ -3884,20 +3917,34 @@ internal void QueuePropertyUpdate(string sceneID, string controlID, string name,
Dictionary 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;
}
}
}
@@ -3985,14 +4032,53 @@ internal struct InternalButtonState
internal struct InternalControlPropertyUpdateData
{
- internal Dictionary properties;
- public InternalControlPropertyUpdateData(string name, object value)
+ internal Dictionary properties;
+ public InternalControlPropertyUpdateData(string name, KnownControlPropertyPrimitiveTypes type, object value)
{
- properties = new Dictionary();
- properties.Add(name, value);
+ properties = new Dictionary();
+ 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;
diff --git a/Source/InteractiveSDK/ProjectSettings/ProjectSettings.asset b/Source/InteractiveSDK/ProjectSettings/ProjectSettings.asset
index 57cd2d5..24ea477 100644
Binary files a/Source/InteractiveSDK/ProjectSettings/ProjectSettings.asset and b/Source/InteractiveSDK/ProjectSettings/ProjectSettings.asset differ