public TypeItem(MemberData member, FilterAttribute filter = null)
 {
     if (member == null)
     {
         member = new MemberData(typeof(object));
     }
     _value = SerializerUtility.Duplicate(member);
     Name   = _value.name;
     if (_value.targetType == MemberData.TargetType.Type)
     {
         type = _value.startType;
         if (type != null)
         {
             while (type.IsArray)
             {
                 type   = type.GetElementType();
                 _value = new MemberData(type);
                 array++;
             }
         }
     }
     else
     {
         type = _value.type;
     }
     this.filter = filter;
 }
 public MultipurposeMember(MultipurposeMember member)
 {
     if (member == null)
     {
         return;
     }
     target     = new MemberData(member.target);
     parameters = new MemberData[member.parameters.Length];
     for (int i = 0; i < parameters.Length; i++)
     {
         parameters[i] = new MemberData(member.parameters[i]);
     }
     initializer = SerializerUtility.Duplicate(member.initializer);
 }
Beispiel #3
0
        protected void InitLocalVariable()
        {
            if (_localVar == null)
            {
                var variables = new List <VariableData>();
                foreach (var var in localVariable)
                {
                    if (var.value == null && var.Type.IsValueType)
                    {
                        var.value = ReflectionUtils.CreateInstance(var.Type);
                    }
                    variables.Add(new VariableData(var));
                }
                _localVar = variables;
            }
            else
            {
                for (int x = 0; x < localVariable.Count; x++)
                {
                    if (!localVariable[x].resetOnEnter)
                    {
                        continue;
                    }
                    for (int y = 0; y < _localVar.Count; y++)
                    {
                        if (localVariable[x].Name == _localVar[y].Name)
                        {
                            _localVar[y].value = SerializerUtility.Duplicate(localVariable[x].value);
                            goto NEXT;
                        }
                    }
                    _localVar.Add(new VariableData(localVariable[x]));                    //Add a new local variable if not exist
NEXT:
                    continue;
                }
            }
        }
Beispiel #4
0
        public void EnsureInitialized()
        {
            if (hasInitialize)
            {
                return;
            }
            if (!Application.isPlaying)
            {
                throw new System.Exception("Can't initialize event when not playing.");
            }
            else if (target == null)
            {
                throw new Exception("Target graph can't be null");
            }
            hasInitialize = true;
            if (target is uNodeComponentSingleton singleton)
            {
                bool flag = singleton.EnsureInitialized(false);
                runtimeBehaviour = singleton.runtimeBehaviour;
                if (flag && runtimeBehaviour != null)
                {
                    //Initialize the variable
                    for (int i = 0; i < target.Variables.Count; i++)
                    {
                        VariableData var = target.Variables[i];
                        for (int x = 0; x < variable.Count; x++)
                        {
                            if (var.Name.Equals(variable[x].Name))
                            {
                                var = variable[x];
                                break;
                            }
                        }
                        SetVariable(var.Name, SerializerUtility.Duplicate(var.value));
                    }
                    runtimeBehaviour.OnAwake();
                }
                runtimeInstance = singleton.runtimeInstance;
                if (flag && runtimeInstance != null)
                {
                    //Initialize the variable
                    for (int i = 0; i < target.Variables.Count; i++)
                    {
                        VariableData var = target.Variables[i];
                        for (int x = 0; x < variable.Count; x++)
                        {
                            if (var.Name.Equals(variable[x].Name))
                            {
                                var = variable[x];
                                break;
                            }
                        }
                        SetVariable(var.Name, SerializerUtility.Duplicate(var.value));
                    }
                    variable = runtimeInstance.Variables;
                    runtimeInstance.Initialize();
                }
                return;
            }
            var type = target.GeneratedTypeName.ToType(false);

            if (type != null)
            {
                //Instance native c# graph, native graph will call Awake immediately
                runtimeBehaviour           = gameObject.AddComponent(type) as RuntimeBehaviour;
                runtimeBehaviour.hideFlags = HideFlags.HideInInspector;
                //Initialize the references
                var references = target.graphData.unityObjects;
                for (int i = 0; i < references.Count; i++)
                {
                    SetVariable(references[i].name, references[i].value);
                }
                //Initialize the variable
                for (int i = 0; i < target.Variables.Count; i++)
                {
                    VariableData var = target.Variables[i];
                    for (int x = 0; x < variable.Count; x++)
                    {
                        if (var.Name.Equals(variable[x].Name))
                        {
                            var = variable[x];
                            break;
                        }
                    }
                    SetVariable(var.Name, SerializerUtility.Duplicate(var.value));
                }
                //Call awake
                runtimeBehaviour.OnAwake();
            }
            else
            {
                //Instance reflection graph
                var main = RuntimeGraphManager.InstantiateGraph(target, gameObject, variable);
                variable        = main.Variables;
                runtimeInstance = main;
                main.Initialize();                //Initialize the graph, so it will call Awake after created.
                main.manualHandlingEvent = true;
            }
        }