private void _cacheRoute(string route, UIElementNode listener) { if (!_cache.ContainsKey(route)) { _cache.Add(route, new List <UIElementNode> ()); } _cache [route].Add(listener); }
/** * Adds and caches an element */ internal UIRouter Add(UIElementNode listener) { if (listener != null) { _processNode(listener); } else { Debug.LogError("Null listener passed."); } return(this); }
/** * Removes an element */ internal UIRouter Remove(UIElementNode listener) { if (_nodes.Remove(listener)) { foreach (string route in listener.Routes) { if (_cache.ContainsKey(route)) { _cache [route].Remove(listener); } } } return(this); }
private void _cacheListener(UIElementNode parent, UIElementNode listener) { if (!_nodes.Contains(listener)) { listener.Router = this; listener.Parent = parent; if (!_nodes.Contains(listener)) { _nodes.Add(listener); } for (int i = 0; i < listener.Routes.Length; i++) { _cacheRoute(listener.Routes [i], listener); } } }
//Recursivly traverses transform heirarchy passing elements to be cached as relevent. private void _processNode(UIElementNode parent) { if (parent != null && ((parent == this) || (parent.GetType() != typeof(UIRouter)))) { foreach (Transform child in parent.transform) { UIElementNode element = child.GetComponent <UIElementNode> (); if (element == null) { element = child.gameObject.AddComponent <UIElementNode> (); element.Routes = new string[parent.Routes.Length]; Array.Copy(parent.Routes, element.Routes, parent.Routes.Length); } _cacheListener(parent, element); _processNode(element); } } }