コード例 #1
0
        protected override void ValueToOSCValues(List <OSCValue> values, object value)
        {
            var members = GetMembers(value.GetType());

            foreach (var memberInfo in members)
            {
                var property = OSCReflectionProperty.Create(value, memberInfo);
                if (property != null)
                {
                    var propertyValue = property.GetValue();
                    if (propertyValue == null)
                    {
                        values.Add(OSCValue.Null());

                        continue;
                    }

                    OSCSerializer.Pack(values, propertyValue);
                }
                else
                {
                    throw new NullReferenceException("Property not found!");
                }
            }
        }
コード例 #2
0
        protected override void ValueToOSCValues(List <OSCValue> values, Array value)
        {
            values.Add(OSCValue.Int(value.Length));

            foreach (var element in value)
            {
                OSCSerializer.Pack(values, element);
            }
        }
コード例 #3
0
        protected override void ValueToOSCValues(List <OSCValue> values, IDictionary value)
        {
            values.Add(OSCValue.Int(value.Count));

            for (var i = 0; i < value.Count; i++)
            {
                OSCSerializer.Pack(values, value.Keys.OfType <object>().ElementAt(i));
                OSCSerializer.Pack(values, value.Values.OfType <object>().ElementAt(i));
            }
        }
コード例 #4
0
        protected override Array OSCValuesToValue(List <OSCValue> values, ref int start, Type type)
        {
            var size        = values[start++].IntValue;
            var elementType = type.GetElementType();
            var value       = Array.CreateInstance(elementType, size);

            for (var i = 0; i < size; i++)
            {
                value.SetValue(OSCSerializer.Unpack(values, ref start, elementType), i);
            }

            return(value);
        }
コード例 #5
0
        protected override IList OSCValuesToValue(List <OSCValue> values, ref int start, Type type)
        {
            var size        = values[start++].IntValue;
            var elementType = type.GetGenericArguments()[0];
            var value       = (IList)Activator.CreateInstance(type, size);

            for (var i = 0; i < size; i++)
            {
                value.Add(OSCSerializer.Unpack(values, ref start, elementType));
            }

            return(value);
        }
コード例 #6
0
        public void SendClass()
        {
            var exampleClass = new ExampleClass();

            exampleClass.StringValue = TransmitterClassString.text;
            exampleClass.FloatValue  = TransmitterClassFloat.value;
            exampleClass.BoolValue   = TransmitterClassBool.isOn;
            exampleClass.VectorValue = TransmitterClassVector2.Value;

            var message = OSCSerializer.Serialize(_address, exampleClass);

            Transmitter.Send(message);
        }
コード例 #7
0
        protected override IDictionary OSCValuesToValue(List <OSCValue> values, ref int start, Type type)
        {
            var size = values[start++].IntValue;

            var keyElement   = type.GetGenericArguments()[0];
            var valueElement = type.GetGenericArguments()[1];
            var value        = (IDictionary)Activator.CreateInstance(type, size);

            for (var i = 0; i < size; i++)
            {
                value.Add(OSCSerializer.Unpack(values, ref start, keyElement), OSCSerializer.Unpack(values, ref start, valueElement));
            }

            return(value);
        }
コード例 #8
0
        private void RefreshRemoteFields(REComponent remoteComponent)
        {
            // CLEAR
            remoteComponent.Fields.Clear();

            // POPULATE
            var componentType = remoteComponent.Target.GetType();
            var fieldsInfos   = componentType.GetFields(BindingFlags.Instance | BindingFlags.Public);

            foreach (var fieldInfo in fieldsInfos)
            {
                if (!OSCSerializer.HasPacker(fieldInfo.FieldType))
                {
                    continue;
                }

                var remoteField = new REField(fieldInfo);
                remoteField.FieldType = REFieldType.Field;
                remoteField.TypeName  = fieldInfo.FieldType.Name;
                remoteField.FieldName = fieldInfo.Name;
                remoteField.Parent    = remoteComponent;

                remoteComponent.Fields.Add(remoteField);
            }

            var propertiesInfos = componentType.GetProperties(BindingFlags.Instance | BindingFlags.Public);

            foreach (var propertyInfo in propertiesInfos)
            {
                if (!propertyInfo.CanRead || !propertyInfo.CanWrite)
                {
                    continue;
                }

                if (!OSCSerializer.HasPacker(propertyInfo.PropertyType))
                {
                    continue;
                }

                var remoteField = new REField(propertyInfo);
                remoteField.FieldType = REFieldType.Property;
                remoteField.TypeName  = propertyInfo.PropertyType.Name;
                remoteField.FieldName = propertyInfo.Name;
                remoteField.Parent    = remoteComponent;

                remoteComponent.Fields.Add(remoteField);
            }
        }
コード例 #9
0
        public void ReceiveClass(OSCMessage message)
        {
            var exampleClass = OSCSerializer.Deserialize <ExampleClass>(message);

            if (exampleClass != null)
            {
                ReceiverClassString.text   = exampleClass.StringValue;
                ReceiverClassFloat.value   = exampleClass.FloatValue;
                ReceiverClassBool.isOn     = exampleClass.BoolValue;
                ReceiverClassVector2.Value = exampleClass.VectorValue;

                ReceiverClassFloatText.text   = exampleClass.FloatValue.ToString();
                ReceiverClassBoolText.text    = exampleClass.BoolValue.ToString();
                ReceiverClassVector2Text.text = exampleClass.VectorValue.ToString();
            }
        }
コード例 #10
0
        protected override object OSCValuesToValue(List <OSCValue> values, ref int start, Type type)
        {
            var members = GetMembers(type);
            var value   = Activator.CreateInstance(type);

            foreach (var memberInfo in members)
            {
                var oscValue = values[start];

                var property = OSCReflectionProperty.Create(value, memberInfo);
                if (property != null && !oscValue.IsNull)
                {
                    property.SetValue(OSCSerializer.Unpack(values, ref start, property.PropertyType));
                }
                else
                {
                    start++;
                }
            }

            return(value);
        }