Example #1
0
File: VeeJoy.cs Project: artm/Cyrus
 public static void AddToList(FloatDesc desc, List<FloatController> floatControllers)
 {
     try {
         string[] tokens = desc.property.Split('.');
         if (tokens.Length == 1) {
             System.Type type = desc.target.GetType();
             if (type == typeof(Material)) {
                 floatControllers.Add(new MaterialFloatController(desc));
             } else {
                 FieldInfo fi = type.GetField(desc.property);
                 if (fi == null || fi.FieldType != typeof(float))
                     throw new PropertyError();
                 floatControllers.Add(new FieldFloatController(desc,fi));
             }
         } else if (tokens.Length == 2) {
             if (desc.target is Material && tokens[1] == "hsv") {
                 // special case: color
                 desc.property = tokens[0];
                 floatControllers.Add(new MaterialColorController(desc.Clone(), MaterialColorController.Component.Hue));
                 floatControllers.Add(new MaterialColorController(desc.Clone(), MaterialColorController.Component.Saturation));
                 floatControllers.Add(new MaterialColorController(desc.Clone(), MaterialColorController.Component.Value));
             } else {
                 // the property name is ComponentName.PropertyName
                 Component c = (desc.target as GameObject).GetComponent(tokens[0]);
                 if (c==null)
                     throw new PropertyError();
                 System.Type type = c.GetType();
                 FieldInfo fi = type.GetField(tokens[1]);
                 if (fi == null || fi.FieldType != typeof(float))
                     throw new PropertyError();
                 desc.target = c;
                 floatControllers.Add(new FieldFloatController(desc,fi));
             }
         }
     } catch (PropertyError) {
         Debug.LogError("Error reflecting on property " + desc.property + " of " + desc.target);
     }
 }