internal void updateDataStructures(string chosenGO, AbstractConfiguration s) { if (chosenGO != null) { configurationName = ""; GO = GetGameObject(chosenGO); } else { GO = GetGameObject(s.gOName); configurationName = s.configurationName; } cleanDataStructures(); List <FieldOrProperty> p = GetFieldsAndProperties(GO);; ObjectsProperties.Add(GO, new Dictionary <string, FieldOrProperty>()); ObjectDerivedFromFields.Add(GO, new Dictionary <string, object>()); foreach (FieldOrProperty obj in p) { object gOValueForObj; try { gOValueForObj = obj.GetValue(GO); } catch (Exception e) { gOValueForObj = null; } ObjectsProperties[GO].Add(obj.Name(), obj); if (gOValueForObj != null && !IsMappable(obj)) { if (!ObjectsOwners.ContainsKey(gOValueForObj)) { ObjectsOwners.Add(gOValueForObj, new KeyValuePair <object, string>(GO, obj.Name())); } } ObjectDerivedFromFields[GO].Add(obj.Name(), gOValueForObj); if (!ObjectsToggled.ContainsKey(obj)) { if (s != null && s.properties.Contains(obj.Name())) { //Debug.Log(obj.Name() + " found."); ObjectsToggled.Add(obj, true); if (!IsMappable(obj) && gOValueForObj != null) { // Debug.Log("calling update"); updateDataStructures(gOValueForObj, s, obj.Name()); } else { if (IsMappable(obj) && !IsBaseType(obj)) { foreach (SimpleGameObjectsTracker st in s.advancedConf) { if (st.propertyName.Equals(obj.Name())) { //st.objType = obj.Type().GetElementType().ToString(); basicTypeCollectionsConfigurations.Add(obj, st); //Debug.Log("Adding st for " + obj.Name() + " whit type " + st.objType); break; } } } if (s.GetType() == typeof(SensorConfiguration)) { foreach (StringIntPair pair in ((SensorConfiguration)s).operationPerProperty) { if (pair.Key.Equals(obj.Name())) { operationPerProperty.Add(obj, pair.Value); if (pair.Value == Operation.SPECIFIC) { foreach (StringStringPair pair2 in ((SensorConfiguration)s).specificValuePerProperty) { if (pair2.Key.Equals(obj.Name())) { specificValuePerProperty.Add(obj, pair2.Value); break; } } } break; } } } } } else { ObjectsToggled.Add(obj, false); } } } GOComponents.Add(GO, GetComponents(GO)); foreach (Component c in GOComponents[GO]) { if (s != null && s.properties.Contains(c.GetType().ToString())) { //Debug.Log("component "+c+" name "+c.name+" type "+c.GetType()); ObjectsToggled.Add(c, true); updateDataStructures(c, s, c.GetType().ToString()); } else { ObjectsToggled.Add(c, false); } } }
internal void updateDataStructures(object obj, AbstractConfiguration s, string parent) { //Debug.Log("updating " + parent); List <FieldOrProperty> p = GetFieldsAndProperties(obj); ObjectsProperties.Add(obj, new Dictionary <string, FieldOrProperty>()); //Debug.Log("Adding derived from fields entry"); ObjectDerivedFromFields.Add(obj, new Dictionary <string, object>()); foreach (FieldOrProperty ob in p) { //Debug.Log("Property " + ob.Name()); object objValueForOb; try { objValueForOb = ob.GetValue(obj); } catch (Exception e) { //Debug.Log("cannot get value for property " + ob.Name()); objValueForOb = null; } ObjectsProperties[obj].Add(ob.Name(), ob); //Debug.Log("complete name " + parent + "^" + ob.Name()); if (objValueForOb != null) { if (!ObjectsOwners.ContainsKey(objValueForOb)) { ObjectsOwners.Add(objValueForOb, new KeyValuePair <object, string>(obj, ob.Name())); } //Debug.Log(ob.Name() + " owner is " + ObjectsOwners[objValueForOb]+"and its value is "+objValueForOb); } if (s != null && s.properties.Contains(parent + "^" + ob.Name())) { //Debug.Log("s contains " + parent + "^" + ob.Name()); ObjectsToggled.Add(ob, true); if (!IsMappable(ob) && objValueForOb != null) { updateDataStructures(objValueForOb, s, parent + "^" + ob.Name()); } else { if (IsMappable(ob) && !IsBaseType(ob)) { foreach (SimpleGameObjectsTracker st in s.advancedConf) { if (st.propertyName.Equals(parent + "^" + ob.Name())) { //st.objType = ob.Type().GetElementType().ToString(); //Debug.Log("Adding st for " + ob.Name() + " whit type " + st.objType); basicTypeCollectionsConfigurations.Add(ob, st); break; } } } if (s.GetType() == typeof(SensorConfiguration)) { foreach (StringIntPair pair in ((SensorConfiguration)s).operationPerProperty) { if (pair.Key.Equals(parent + "^" + ob.Name())) { operationPerProperty.Add(ob, pair.Value); if (pair.Value == Operation.SPECIFIC) { foreach (StringStringPair pair2 in ((SensorConfiguration)s).specificValuePerProperty) { if (pair2.Key.Equals(parent + "^" + ob.Name())) { specificValuePerProperty.Add(ob, pair2.Value); break; } } } break; } } } } } else { ObjectsToggled.Add(ob, false); } ObjectDerivedFromFields[obj].Add(ob.Name(), objValueForOb); } if (obj.GetType() == typeof(GameObject)) { GOComponents[(GameObject)obj] = GetComponents((GameObject)obj); foreach (Component c in GOComponents[(GameObject)obj]) { if (s != null && s.properties.Contains(c.GetType().ToString())) { //Debug.Log(obj.Name() + " found."); ObjectsToggled.Add(c, true); updateDataStructures(c, s, c.GetType().ToString()); } else { ObjectsToggled.Add(c, false); } } } }