Inheritance: UnityEngine.MonoBehaviour
コード例 #1
0
        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));
        }
コード例 #2
0
        private void ApplyBindingToValue()
        {
            if (_propertyBinding == null)
            {
                return;
            }
            if (_propertyBinding.Component == null)
            {
                return;
            }
            if (_prop == null)
            {
                return;
            }

            var value = INPCBinding.GetValue(_propertyBinding, _prop);

            UpdateValue(value);
        }
コード例 #3
0
    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();
    }
コード例 #4
0
    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();
    }
コード例 #5
0
    private static void BuildPaths(INPCBinding binding, StringBuilder sw)
    {
        var sobj = new SerializedObject(binding);

        BuildPath(sobj.FindProperty("_view"), sw);
        BuildPath(sobj.FindProperty("_viewModel"), sw);
    }
コード例 #6
0
    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();
    }