private void InitSubBindables(MemberBindProvider target, Type rt) { if (this.currSubBindType != rt) { this.currSubBindType = rt; this.subBindIdx = -1; this.subBindables.Clear(); this.subBindableLabels = new GUIContent[0]; if (rt != null) { foreach (BindableData value in MemberBindProviderEd.getterBindables.Values) { if (value.mi.IsStatic && rt.IsAssignableFrom(value.mi.ReturnType)) { this.subBindables.Add(new BindableData { visibleName = value.mi.ReflectedType.FullName.Replace(".", "/") + "/" + value.mi.Name, mi = value.mi, type = null }); } } string a = BloxMemberInfo.FullMemberPath(target.instanceMember).Replace(".", "/"); this.subBindableLabels = new GUIContent[this.subBindables.Count]; for (int i = 0; i < this.subBindables.Count; i++) { this.subBindableLabels[i] = new GUIContent(this.subBindables[i].visibleName); if (a == this.subBindables[i].visibleName) { this.subBindIdx = i; } } } } }
public override void Deserialize() { this.member = BloxMemberInfo.DecodeMember(this.memberStoredData); if (this.sourceObjType == DataSourceOject.Instance) { this.instanceMember = BloxMemberInfo.DecodeMember(this.sourceObjData); } }
public override void Serialize() { base.Serialize(); this.memberStoredData = BloxMemberInfo.EncodeMember(this.member); if (this.sourceObjType == DataSourceOject.Instance) { this.sourceObjData = BloxMemberInfo.EncodeMember(this.instanceMember); } }
public override string Label(DataProvider target) { MemberBindProvider memberBindProvider = (MemberBindProvider)target; if (memberBindProvider.member == null) { return(base.nfo.Name); } return(BloxMemberInfo.SimpleMemberPath(memberBindProvider.member)); }
public override Type DataType() { BloxMemberInfo obj = this.member; if (obj == null) { return(null); } return(obj.ReturnType); }
private void Edit_ListOrArray_OnAdd(ReorderableList rol) { this.currRolList.Add(BloxMemberInfo.GetDefaultValue(this.currRolType)); GUI.changed = true; EditorWindow obj = this.ed; if ((object)obj != null) { obj.Repaint(); } }
public void Deserialize() { if (this.dataContext == DataContext.Constant) { this.constant.Deserialize(); } else if (this.dataContext == DataContext.GlobalProperty) { this.member = BloxMemberInfo.DecodeMember(this.storedData); this.property = (this.member.GetValue(null) as Property); } }
void ISerializationCallbackReceiver.OnBeforeSerialize() { if (this._isDirty) { this._isDirty = false; this.storedData = null; if (this.dataContext == DataContext.Constant) { this.constant.Serialize(); this.member = null; this.property = null; } else if (this.dataContext == DataContext.GlobalProperty) { this.storedData = BloxMemberInfo.EncodeMember(this.member); this.constant = null; } } }
private void Init_parVals() { if (this.b.mi != null) { if (this.b.mi.MemberType == MemberTypes.Field || this.b.mi.MemberType == MemberTypes.Property) { if (this.b.mi.CanSetValue) { this.parVals = new object[1]; this.parVals[0] = BloxMemberInfo.GetDefaultValue(this.b.mi.ReturnType); } } else { ParameterInfo[] parameters = this.b.mi.GetParameters(); if (parameters != null) { this.parVals = new object[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { this.parVals[i] = BloxMemberInfo.GetDefaultValue(parameters[i].ParameterType); } } } } else { BloxBlockAttribute[] array = (BloxBlockAttribute[])this.b.GetType().GetCustomAttributes(typeof(BloxBlockAttribute), false); if (((array.Length != 0) ? ((array[0].ParamTypes != null) ? array[0].ParamTypes.Length : 0) : 0) != 0) { this.parVals = new object[array[0].ParamTypes.Length]; for (int j = 0; j < this.parVals.Length; j++) { this.parVals[j] = BloxMemberInfo.GetDefaultValue(array[0].ParamTypes[j]); } } } if (this.parVals == null) { this.parVals = new object[0]; } }
protected string GetDataBindingLabel(DataBinding binding) { if (binding.dataContext == DataBinding.DataContext.Constant) { plyVar constant = binding.constant; if (((constant != null) ? constant.GetValue() : null) != null) { return(binding.constant.GetValue().ToString()); } return("null"); } if (binding.dataContext == DataBinding.DataContext.GlobalProperty) { if (binding.member == null) { return("null"); } return(BloxMemberInfo.SimpleMemberPath(binding.member)); } return("-select-"); }
private void InitCurrBindables(MemberBindProvider target, bool isForSetter) { if (this.currBindables != null && this.currBindableLabels != null) { return; } Dictionary <string, BindableData> dictionary = isForSetter ? MemberBindProviderEd.setterBindables : MemberBindProviderEd.getterBindables; this.currBindables = new BindableData[dictionary.Count]; dictionary.Values.CopyTo(this.currBindables, 0); this.currBindableLabels = new GUIContent[this.currBindables.Length]; for (int i = 0; i < this.currBindables.Length; i++) { this.currBindableLabels[i] = new GUIContent(this.currBindables[i].visibleName); } this.memberBindIdx = -1; BloxMemberInfo member = target.member; string memberName = MemberBindProviderEd.GetMemberName((member != null) ? member.MI : null); if (!string.IsNullOrEmpty(memberName)) { int num = 0; while (num < this.currBindables.Length) { if (!(memberName == this.currBindables[num].visibleName)) { num++; continue; } this.memberBindIdx = num; break; } } if (target.sourceObjType == MemberBindProvider.DataSourceOject.Instance && target.member != null) { this.InitSubBindables(target, target.member.ReflectedType); } }
private void DrawProperties() { if (this.currBlock == null || this.selectedBlockDef != this.shownDef || this.currBlock.def == null) { this.DrawEventProperties(); } else if (this.currBlock.def.drawer != null) { EditorGUI.BeginChangeCheck(); this.currBlock.def.drawer.DrawProperties(BloxEditorWindow.Instance, this.currBlock); if (EditorGUI.EndChangeCheck()) { GUI.changed = false; BloxEditorWindow.Instance.SaveBlox(true); } EditorGUILayout.Space(); } else if (this.currBlock.b.blockType == BloxBlockType.Value && this.currBlock.b.returnType != null && this.currBlock.b.returnType != typeof(void) && this.currBlock.def.contextType == null && (this.currBlock.def.mi == null || this.currBlock.def.mi.CanSetValue)) { if (this.currBlock.b.returnValue == null) { this.currBlock.b.returnValue = BloxMemberInfo.GetDefaultValue(this.currBlock.b.returnType); if (this.currBlock.b.returnValue != null) { GUI.changed = true; } } EditorGUI.BeginChangeCheck(); this.currBlock.b.returnValue = this.Edit_Field(this.currBlock.b.returnType, this.currBlock.b.returnValue, this.currBlock); if (EditorGUI.EndChangeCheck()) { GUI.changed = false; BloxEditorWindow.Instance.SaveBlox(true); } EditorGUILayout.Space(); } }
private static void ProcessBindableMember(MemberInfo mi, Type valType, bool inclOnlySpecifiedMembers) { Debug.Log("ProcessBindableMember", "MemberBindProviderEd", Color.red); bool flag = inclOnlySpecifiedMembers; object[] customAttributes = mi.GetCustomAttributes(true); for (int i = 0; i < customAttributes.Length; i++) { Type type = customAttributes[i].GetType(); if (type == typeof(IncludeInBloxAttribute)) { flag = false; } if (type == typeof(ExcludeFromBloxAttribute)) { flag = true; break; } if (type == typeof(BloxEventAttribute)) { flag = true; break; } if (type == typeof(ObsoleteAttribute)) { flag = true; break; } if (type == typeof(ExcludeFromDocsAttribute)) { flag = true; break; } } if (!flag) { Type _ = mi.ReflectedType; string memberName = MemberBindProviderEd.GetMemberName(mi); BloxMemberInfo bloxMemberInfo = new BloxMemberInfo(mi, null); if (bloxMemberInfo.CanGetValue && valType != null && valType != typeof(void) && !MemberBindProviderEd.getterBindables.ContainsKey(memberName)) { MemberBindProviderEd.getterBindables.Add(memberName, new BindableData { visibleName = memberName, mi = bloxMemberInfo, type = valType }); } if (!bloxMemberInfo.CanSetValue && bloxMemberInfo.MemberType != MemberTypes.Method) { return; } if (!MemberBindProviderEd.setterBindables.ContainsKey(memberName)) { MemberBindProviderEd.setterBindables.Add(memberName, new BindableData { visibleName = memberName, mi = bloxMemberInfo, type = ((bloxMemberInfo.MemberType == MemberTypes.Method) ? typeof(object) : valType) }); } } }
private static IEnumerator Loader() { Debug.Log("Loader", "MemberBindProviderEd", Color.blue); int count = 0; int countBeforeYield = 20; if (MemberBindProviderEd.getterBindables == null || MemberBindProviderEd.setterBindables == null) { MemberBindProviderEd.getterBindables = new Dictionary <string, BindableData>(); MemberBindProviderEd.setterBindables = new Dictionary <string, BindableData>(); if (MemberBindProviderEd.scanTypes == null) { MemberBindProviderEd.scanTypes = new List <Type>(); List <Type> usedValueTypes = new List <Type>(20) { typeof(bool), typeof(int), typeof(float), typeof(string), typeof(Vector2), typeof(Vector3), typeof(Rect), typeof(Color) }; new List <Type>(); List <string> lines = plyEdUtil.ReadCompressedLines(plyEdUtil.ProjectFullPath + BloxEdGlobal.MiscPath + "blocks.bin"); if (lines.Count > 0) { yield return((object)null); for (int i = 0; i < lines.Count; i++) { string text = lines[i]; if (!string.IsNullOrEmpty(text)) { BloxMemberInfo bloxMemberInfo = BloxMemberInfo.DecodeMember(text); if (bloxMemberInfo != null && !MemberBindProviderEd.scanTypes.Contains(bloxMemberInfo.ReflectedType)) { MemberBindProviderEd.scanTypes.Add(bloxMemberInfo.ReflectedType); } count++; if (count >= countBeforeYield) { count = 0; yield return((object)null); } } } } foreach (Type item in usedValueTypes) { if (!MemberBindProviderEd.scanTypes.Contains(item)) { MemberBindProviderEd.scanTypes.Add(item); } } yield return((object)null); MemberBindProviderEd.scanTypes.Sort((Type a, Type b) => a.FullName.CompareTo(b.FullName)); } List <Type> .Enumerator enumerator2 = MemberBindProviderEd.scanTypes.GetEnumerator(); try { while (enumerator2.MoveNext()) { Type current2 = enumerator2.Current; if (current2.IsClass && !current2.IsEnum && (!current2.IsAbstract || current2.IsSealed) && !current2.IsSpecialName && !current2.IsSubclassOf(typeof(Attribute)) && current2 != typeof(Attribute) && !current2.IsSubclassOf(typeof(Delegate)) && current2 != typeof(Delegate) && !current2.IsSubclassOf(typeof(Exception)) && current2 != typeof(Exception) && !current2.IsSubclassOf(typeof(BloxEventHandler)) && current2 != typeof(BloxEventHandler)) { bool inclOnlySpecifiedMembers = false; object[] customAttributes = current2.GetCustomAttributes(typeof(ExcludeFromBloxAttribute), true); if (customAttributes.Length != 0) { if (!((ExcludeFromBloxAttribute)customAttributes[0]).ExceptForSpecifiedMembers) { continue; } inclOnlySpecifiedMembers = true; } bool flag = true; BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public; if (BloxEd.Instance.includeDeclaredOnly | flag) { bindingFlags = (BindingFlags)((int)bindingFlags | 2); } PropertyInfo[] properties = current2.GetProperties(bindingFlags); for (int j = 0; j < properties.Length; j++) { PropertyInfo propertyInfo = properties[j]; MemberBindProviderEd.ProcessBindableMember(propertyInfo, propertyInfo.PropertyType, inclOnlySpecifiedMembers); } FieldInfo[] fields = current2.GetFields(bindingFlags); for (int j = 0; j < fields.Length; j++) { FieldInfo fieldInfo = fields[j]; MemberBindProviderEd.ProcessBindableMember(fieldInfo, fieldInfo.FieldType, inclOnlySpecifiedMembers); } MethodInfo[] methods = current2.GetMethods(bindingFlags); for (int j = 0; j < methods.Length; j++) { MethodInfo methodInfo = methods[j]; if (!methodInfo.IsSpecialName) { MemberBindProviderEd.ProcessBindableMember(methodInfo, methodInfo.ReturnType, inclOnlySpecifiedMembers); } } count++; if (count >= countBeforeYield) { count = 0; yield return((object)null); } } } } finally { ((IDisposable)enumerator2).Dispose(); } enumerator2 = default(List <Type> .Enumerator); } yield return((object)null); MemberBindProviderEd.loader.Stop(); MemberBindProviderEd.loader = null; }
private object MemberContext() { if (this.member != null && !this.member.IsStatic) { if (this.memberContext != null) { return(this.memberContext); } Type reflectedType = this.member.ReflectedType; if (this.sourceObjType == DataSourceOject.WithName) { GameObject gameObject = GameObject.Find(this.sourceObjData); this.memberContext = (((object)gameObject != null) ? gameObject.GetComponent(reflectedType) : null); if (this.memberContext == null) { Debug.LogErrorFormat("[MemberBind] The context for member [{0}] could not be resolved. This will lead to further errors. Object with Name [{1}] and Component [{2}] was expected in scene.", BloxMemberInfo.SimpleMemberPath(this.member), this.sourceObjData, reflectedType.Name); } } else if (this.sourceObjType == DataSourceOject.WithTag) { GameObject gameObject2 = GameObject.FindGameObjectWithTag(this.sourceObjData); this.memberContext = (((object)gameObject2 != null) ? gameObject2.GetComponent(reflectedType) : null); if (this.memberContext == null) { Debug.LogErrorFormat("[MemberBind] The context for member [{0}] could not be resolved. This will lead to further errors. Object with Tag [{1}] and Component [{2}] was expected in scene.", BloxMemberInfo.SimpleMemberPath(this.member), this.sourceObjData, reflectedType.Name); } } else if (this.sourceObjType == DataSourceOject.OfType) { this.memberContext = UnityEngine.Object.FindObjectOfType(reflectedType); if (this.memberContext == null) { Debug.LogErrorFormat("[MemberBind] The context for member [{0}] could not be resolved. This will lead to further errors. Object with Component [{1}] was expected in scene.", BloxMemberInfo.SimpleMemberPath(this.member), reflectedType.Name); } } else if (this.sourceObjType == DataSourceOject.Instance) { if (this.instanceMember != null) { this.memberContext = this.instanceMember.GetValue(null); } if (this.memberContext == null) { Debug.LogErrorFormat("[MemberBind] The context for member [{0}] could not be resolved via singleton instance data. This will lead to further errors.", BloxMemberInfo.SimpleMemberPath(this.member)); } } else if (this.sourceObjType == DataSourceOject.Owner) { Component owner = base.owner; this.memberContext = (((object)owner != null) ? owner.GetComponent(reflectedType) : null); if (this.memberContext == null) { Debug.LogErrorFormat("[MemberBind] The context for member [{0}] could not be resolved via 'owner'. This will lead to further errors.", BloxMemberInfo.SimpleMemberPath(this.member)); } } else { Debug.LogErrorFormat("[MemberBind] The context for member [{0}] could not be resolved. This will lead to further errors. No source object was specified.", BloxMemberInfo.SimpleMemberPath(this.member)); } return(this.memberContext); } return(null); }
private void InitGlobalProperty() { if (DataBindingWindow.staticBindables == null || DataBindingWindow.staticBindableLabels == null) { DataBindingWindow.staticBindables = new List <BindableData>(); Type typeFromHandle = typeof(Property); Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); for (int i = 0; i < assemblies.Length; i++) { Type[] exportedTypes = assemblies[i].GetExportedTypes(); for (int j = 0; j < exportedTypes.Length; j++) { Type type = exportedTypes[j]; PropertyInfo[] properties = type.GetProperties(BindingFlags.Static | BindingFlags.Public); for (int k = 0; k < properties.Length; k++) { PropertyInfo propertyInfo = properties[k]; if (typeFromHandle.IsAssignableFrom(propertyInfo.PropertyType)) { DataBindingWindow.staticBindables.Add(new BindableData { visibleName = type.Name + "/" + propertyInfo.Name, mi = new BloxMemberInfo(propertyInfo, null) }); } } FieldInfo[] fields = type.GetFields(BindingFlags.Static | BindingFlags.Public); for (int k = 0; k < fields.Length; k++) { FieldInfo fieldInfo = fields[k]; if (typeFromHandle.IsAssignableFrom(fieldInfo.FieldType)) { DataBindingWindow.staticBindables.Add(new BindableData { visibleName = type.Name + "/" + fieldInfo.Name, mi = new BloxMemberInfo(fieldInfo, null) }); } } } } DataBindingWindow.staticBindableLabels = new GUIContent[DataBindingWindow.staticBindables.Count]; for (int l = 0; l < DataBindingWindow.staticBindables.Count; l++) { DataBindingWindow.staticBindableLabels[l] = new GUIContent(DataBindingWindow.staticBindables[l].visibleName); } } string a = BloxMemberInfo.SimpleMemberPath(this.databinding.member).Replace(".", "/"); int num = 0; while (true) { if (num < DataBindingWindow.staticBindables.Count) { if (!(a == DataBindingWindow.staticBindables[num].visibleName)) { num++; continue; } break; } return; } this.staticBindIdx = num; }
protected override void Draw(Rect rect, DataProvider target, bool isSetter) { MemberBindProvider memberBindProvider = (MemberBindProvider)target; rect.height = EditorGUIUtility.singleLineHeight; if (MemberBindProviderEd.loader != null) { plyEdGUI.DrawSpinner(rect, MemberBindProviderEd.GC_Loading); if (Event.current.type == EventType.Repaint) { MemberBindProviderEd.loader.DoUpdate(); } } else { this.InitCurrBindables(memberBindProvider, isSetter); EditorGUIUtility.labelWidth = 65f; Rect rect2 = rect; GUIContent label = isSetter ? MemberBindProviderEd.GC_SetMember : MemberBindProviderEd.GC_GetMember; if (memberBindProvider.member != null && memberBindProvider.member.MemberType == MemberTypes.Method) { label = MemberBindProviderEd.GC_InvokeMember; } EditorGUI.BeginChangeCheck(); this.memberBindIdx = EditorGUI.Popup(rect2, label, this.memberBindIdx, this.currBindableLabels); if (EditorGUI.EndChangeCheck()) { memberBindProvider.member = this.currBindables[this.memberBindIdx].mi; memberBindProvider.instanceMember = null; if (memberBindProvider.valSetterSources.Length != 0) { memberBindProvider.valSetterSources = new DataBindingValueSource[0]; } if (memberBindProvider.sourceObjType == MemberBindProvider.DataSourceOject.Instance) { MemberBindProvider target2 = memberBindProvider; BloxMemberInfo member = memberBindProvider.member; this.InitSubBindables(target2, (member != null) ? member.ReflectedType : null); } } if (memberBindProvider.member == null) { if (memberBindProvider.instanceMember != null) { memberBindProvider.instanceMember = null; GUI.changed = true; } if (memberBindProvider.valSetterSources.Length != 0) { memberBindProvider.valSetterSources = new DataBindingValueSource[0]; GUI.changed = true; } } else { if (!memberBindProvider.member.IsStatic) { rect2.y += (float)(EditorGUIUtility.singleLineHeight + 2.0); if (memberBindProvider.sourceObjType != 0 && memberBindProvider.sourceObjType != MemberBindProvider.DataSourceOject.Owner) { rect2.width = (float)(EditorGUIUtility.labelWidth + 100.0); } EditorGUI.BeginChangeCheck(); memberBindProvider.sourceObjType = (MemberBindProvider.DataSourceOject)EditorGUI.EnumPopup(rect2, MemberBindProviderEd.GC_TargetObject, (Enum)(object)memberBindProvider.sourceObjType); if (EditorGUI.EndChangeCheck()) { memberBindProvider.sourceObjData = ""; if (memberBindProvider.sourceObjType == MemberBindProvider.DataSourceOject.Instance) { MemberBindProvider target3 = memberBindProvider; BloxMemberInfo member2 = memberBindProvider.member; this.InitSubBindables(target3, (member2 != null) ? member2.ReflectedType : null); } } rect2.x += (float)(EditorGUIUtility.labelWidth + 102.0); rect2.width = (float)(rect.width - (EditorGUIUtility.labelWidth + 102.0)); if (memberBindProvider.sourceObjType == MemberBindProvider.DataSourceOject.WithName || memberBindProvider.sourceObjType == MemberBindProvider.DataSourceOject.WithTag) { memberBindProvider.sourceObjData = EditorGUI.TextField(rect2, memberBindProvider.sourceObjData); } else if (memberBindProvider.sourceObjType == MemberBindProvider.DataSourceOject.OfType) { EditorGUI.LabelField(rect2, BloxEd.PrettyTypeName(memberBindProvider.member.ReflectedType, true)); } else if (memberBindProvider.sourceObjType == MemberBindProvider.DataSourceOject.Instance) { EditorGUI.BeginChangeCheck(); this.subBindIdx = EditorGUI.Popup(rect2, this.subBindIdx, this.subBindableLabels); if (EditorGUI.EndChangeCheck()) { memberBindProvider.instanceMember = this.subBindables[this.subBindIdx].mi; } } } rect2.x = rect.x; rect2.y += (float)(EditorGUIUtility.singleLineHeight + 2.0); rect2.width = rect.width; if (memberBindProvider.member.MemberType == MemberTypes.Method) { ParameterInfo[] parameters = memberBindProvider.member.GetParameters(); if (memberBindProvider.valSetterSources.Length != parameters.Length) { GUI.changed = true; memberBindProvider.valSetterSources = new DataBindingValueSource[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { memberBindProvider.valSetterSources[i] = new DataBindingValueSource(); } } if (memberBindProvider.valSetterSources.Length != 0) { GUI.Label(rect2, MemberBindProviderEd.GC_With); for (int j = 0; j < memberBindProvider.valSetterSources.Length; j++) { MemberBindProviderEd.GC_Param.text = parameters[j].Name + "="; rect2.y += (float)(EditorGUIUtility.singleLineHeight + 2.0); memberBindProvider.valSetterSources[j] = DataProviderEd.DataBindingValueSourceField(rect2, MemberBindProviderEd.GC_Param, memberBindProvider.valSetterSources[j], MemberBindProviderEd.GC_ToValBindWin, memberBindProvider); } } } else if (isSetter) { if (memberBindProvider.valSetterSources.Length != 1) { GUI.changed = true; memberBindProvider.valSetterSources = new DataBindingValueSource[1] { new DataBindingValueSource() }; } memberBindProvider.valSetterSources[0] = DataProviderEd.DataBindingValueSourceField(rect2, MemberBindProviderEd.GC_ToVal, memberBindProvider.valSetterSources[0], MemberBindProviderEd.GC_ToValBindWin, memberBindProvider); } } } }