void Awake() { if (_propertyBinding != null && _propertyBinding.Component != null) { _prop = INPCBinding.FigureBinding(_propertyBinding, BindingPropertyChanged, true); } ApplyBindingToValue(); if (!_instantiateOnAwake) { return; } if (Type == null) { Debug.LogError("Set to instantiate on awake, but type is not defined, or is not valid"); return; } if (typeof(UnityEngine.Object).IsAssignableFrom(Type)) { Debug.LogErrorFormat("Cannot automatically instantiate type {0}, as it derives from UnityEngine.Object", Type); return; } UpdateValue(Activator.CreateInstance(Type)); }
private void ApplyBindingToValue() { if (_propertyBinding == null) { return; } if (_propertyBinding.Component == null) { return; } if (_prop == null) { return; } var value = INPCBinding.GetValue(_propertyBinding, _prop); UpdateValue(value); }
static void FigureViewBinding(INPCBinding binding) { var sobj = new SerializedObject(binding); var viewProp = sobj.FindProperty("_view"); var viewEvProp = sobj.FindProperty("_viewEvent"); if (string.IsNullOrEmpty(viewEvProp.stringValue)) return; var vcprop = viewProp.FindPropertyRelative("Component"); var vcomp = vcprop.objectReferenceValue as Component; if (vcomp == null) return; var vevValue = GetEvent(vcomp, viewEvProp); if (vevValue != null) { UnityEditor.Events.UnityEventTools.AddVoidPersistentListener(vevValue, binding.ApplyVToVM); } sobj.ApplyModifiedProperties(); }
static string BuildSetterEnd(INPCBinding.PropertyPath ppath) { if (ppath.Parts.Length == 1) { return string.Format(" (({0})obj).{1} = ({2})value;", GetFullName(ppath.PPath[0].DeclaringType), ppath.Parts[0], GetFullName(ppath.PPath[0].PropertyType)); } var sb = new StringBuilder(); sb.AppendFormat(" var v0 = (({0})obj).{1};", GetFullName(ppath.PPath[0].DeclaringType), ppath.Parts[0]) .AppendLine(); var i = 1; for (; i < ppath.Parts.Length - 1; i++) { sb .AppendFormat(" var v{0} = v{1}.{2}", i, i - 1, ppath.Parts[i]) .AppendLine() .AppendFormat(" if (v{0} == null) return;", i) .AppendLine(); } sb.AppendFormat(" v{0}.{1} = ({2})value;", i - 1, ppath.Parts[i], GetFullName(ppath.PPath.Last().PropertyType)); return sb.ToString(); }
private static void BuildPaths(INPCBinding binding, StringBuilder sw) { var sobj = new SerializedObject(binding); BuildPath(sobj.FindProperty("_view"), sw); BuildPath(sobj.FindProperty("_viewModel"), sw); }
static string BuildGetterEnd(INPCBinding.PropertyPath ppath) { if (ppath.Parts.Length == 1) return string.Format(" return v0;"); var sb = new StringBuilder(); var i = 1; for (; i < ppath.Parts.Length - 1; i++) { sb .AppendFormat(" var v{0} = v{1}.{2}", i, i-1, ppath.Parts[i]) .AppendLine() .AppendFormat(" if (v{0} == null) return null;", i) .AppendLine(); } sb.AppendFormat(" return v{0}.{1};", i - 1, ppath.Parts[i]); return sb.ToString(); }