Exemplo n.º 1
0
 /// <summary>
 /// Force cleanup / create widgets infrastructure from attached xml-schema.
 /// </summary>
 public void CreateVisuals()
 {
     ValidateGenerators();
     if ((object)_defaultFont == null)
     {
         _defaultFont = _fonts.Count > 0 ? _fonts[0] : Resources.GetBuiltinResource <Font> ("Arial.ttf");
     }
     if ((object)_defaultTheme == null)
     {
         _defaultTheme = _themes.Count > 0 ? _themes[0] : ScriptableObject.CreateInstance <MarkupTheme> ();
     }
     if (_xmlTree == null)
     {
         _xmlTree = LoadXml(_markupPath);
     }
     ClearVisuals();
     CreateVisualNode(_xmlTree, MarkupUtils.CreateUiObject("root", transform));
     _isVisualized = true;
 }
Exemplo n.º 2
0
        void CreateVisualNode(XmlNode xmlTree, RectTransform root)
        {
            if (xmlTree == null)
            {
                return;
            }

            Func <RectTransform, XmlNode, MarkupContainer, RectTransform> generator;

            var isFound = Generators.TryGetValue(xmlTree.NameHash, out generator);

            if (!isFound)
            {
                generator = BoxNode.Create;
            }

            var tr        = MarkupUtils.CreateUiObject(null, root);
            var contentTr = generator(tr, xmlTree, this);

#if UNITY_EDITOR
            if (!isFound)
            {
                tr.name = string.Format("unknown-replaced-with-{0}", tr.name);
                Debug.LogWarningFormat(tr, "Unknown hashed-node \"{0}\" - box-node will be used instead",
                                       xmlTree.NameHash);
            }
#endif

            if ((object)_canvas == null)
            {
                _canvas = tr.GetComponentInChildren <Canvas> ();
            }

            var nodeName = xmlTree.GetAttribute(HashedName);
            if (!string.IsNullOrEmpty(nodeName))
            {
#if UNITY_EDITOR
                tr.name = string.Format("{0}-{1}", tr.name, nodeName);
#endif
                var nodeNameHash = nodeName.GetStableHashCode();
                if (_namedNodes.ContainsKey(nodeNameHash))
                {
#if UNITY_EDITOR
                    Debug.LogWarning("Duplicate name: " + nodeName);
#endif
                }
                else
                {
                    _namedNodes[nodeNameHash] = tr;
                }
            }

            var children = xmlTree.Children;
            if (children.Count > 0)
            {
                if ((object)contentTr != null)
                {
                    for (int i = 0, iMax = children.Count; i < iMax; i++)
                    {
                        CreateVisualNode(children[i], contentTr);
                    }
                }
                else
                {
                    Debug.LogWarning("Node not supported children.", tr);
                }
            }
        }