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); }
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; } } }
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; } }