/// <summary> /// Default initialization of datanode. Will trigger initialization routines of /// all encountered DataNodes in children. Will register all direct ValueUpdateReceivers. /// </summary> /// <param name="dataNode"></param> /// <param name="rootObject">Where the gameobject tree search should originate from.</param> /// <param name="searchRootItself">If true, also considers the root gameobject for the search.</param> public static void DefaultInitialize(this IDataNode dataNode, GameObject rootObject, bool searchRootItself = false) { List <IBindableComponent> bindableComponents = new List <IBindableComponent>(); List <IDataNode> dataNodes = new List <IDataNode>(); SearchViewInterfaces(rootObject, ref bindableComponents, ref dataNodes, searchRootItself); List <IValueUpdateReceiver> valueUpdateReceivers = new List <IValueUpdateReceiver>(); foreach (IBindableComponent bc in bindableComponents) { bc.InitializeBindableComponent(); valueUpdateReceivers.AddRange(bc.GetValueUpdateReceivers()); } foreach (IDataNode dn in dataNodes) { valueUpdateReceivers.Add(dn as IValueUpdateReceiver); } foreach (IValueUpdateReceiver vur in valueUpdateReceivers) { vur.Context = dataNode; } foreach (IDataNode dn in dataNodes) { dn.InitializeDataNode(); } dataNode.RegisterUpdateReceivers(valueUpdateReceivers); }