public override void OnReady <T>(T node, System.Reflection.MemberInfo memberInfo) { if (Name == null) { Name = FilterName(memberInfo.Name); } var val = NodeRegistry.GetOrNull(Name); if (val == null) { if (!Required) { return; } var err = $"Node '{Name}' must be registered but could not be found."; if (!Engine.EditorHint) { throw new NullReferenceException(err); } Logger.PushError(err); return; } var varInfo = new VariableMemberInfo(memberInfo); if (varInfo.VariableType.ContainsGenericParameters && typeof(IEnumerable <>) .MakeGenericType(varInfo.VariableType.GenericTypeArguments[0]) .IsAssignableFrom(varInfo.VariableType)) { var assignable = val.GetChildren <Node>().Where(n => varInfo.VariableType.GenericTypeArguments[0].IsInstanceOfType(n)); varInfo.SetValue(node, varInfo.VariableType == typeof(IList <>) .MakeGenericType(varInfo.VariableType.GenericTypeArguments[0]) ? assignable.ToList() : assignable); } else if (varInfo.VariableType.IsInstanceOfType(val)) { varInfo.SetValue(node, val); } else { GD.PushWarning($"{val} not of type {varInfo.VariableType.FullName}"); } }
public override void OnReady <T>(T node, MemberInfo memberInfo) { var pathNameMemberName = $"{memberInfo.Name}Path"; var tType = node.GetType(); if (PathName == null && tType.GetMember(pathNameMemberName).Length > 0) { PathName = pathNameMemberName; } if (PathName != null) { var members = tType.GetMember(PathName); if (members.Length != 0) { string path = null; path = new VariableMemberInfo(members[0]).GetValue(node)?.ToString(); if (path != null) { Path = path; } } } if (Path == null) { Path = FilterName(memberInfo.Name); } var val = node.GetNode(Path); if (val == null) { if (!Required) { return; } var err = $"Node '{Path}' is required but could not be found."; if (!Engine.EditorHint) { throw new NullReferenceException(err); } Logger.PushError(err); return; } var varInfo = new VariableMemberInfo(memberInfo); if (varInfo.VariableType.ContainsGenericParameters && typeof(IEnumerable <>) .MakeGenericType(varInfo.VariableType.GenericTypeArguments[0]) .IsAssignableFrom(varInfo.VariableType)) { var assignable = val.GetChildren <Node>().Where(n => varInfo.VariableType.GenericTypeArguments[0].IsInstanceOfType(n)); varInfo.SetValue(node, varInfo.VariableType == typeof(IList <>) .MakeGenericType(varInfo.VariableType.GenericTypeArguments[0]) ? assignable.ToList() : assignable); } else if (varInfo.VariableType.IsInstanceOfType(val)) { varInfo.SetValue(node, val); } else { GD.PushWarning($"{val} not of type {varInfo.VariableType.FullName}"); } }