Ejemplo n.º 1
0
        /// <summary>
        /// Adds a requirement to the given <see cref="global::Tech"/>
        /// </summary>
        /// <param name="unlocked">The tech that will be unlocked</param>
        /// <param name="required">The tech that is required</param>
        public static void AddRequirement(global::Tech unlocked, global::Tech required)
        {
            required.unlockedTech.Add(unlocked);
            unlocked.requiredTech.Add(required);

            SetTier(unlocked, required.tier + 1);

            var unlockedNode = GetNode(unlocked);
            var requiredNode = GetNode(required);
            var edge         = new ResourceTreeNode.Edge(requiredNode, unlockedNode, ResourceTreeNode.Edge.EdgeType.GenericEdge);

            unlockedNode.edges.Add(edge);
            requiredNode.edges.Add(edge);
        }
    public override void Load(TextAsset file)
    {
        Dictionary <string, ResourceTreeNode> dictionary = new Dictionary <string, ResourceTreeNode>();

        using (XmlReader xmlReader = XmlReader.Create(new StringReader(file.text)))
        {
            while (xmlReader.ReadToFollowing("node"))
            {
                xmlReader.MoveToFirstAttribute();
                string value = xmlReader.Value;
                float  nodeX = 0f;
                float  nodeY = 0f;
                float  num   = 40f;
                float  num2  = 20f;
                if (xmlReader.ReadToFollowing("Geometry"))
                {
                    xmlReader.MoveToAttribute("x");
                    nodeX = float.Parse(xmlReader.Value);
                    xmlReader.MoveToAttribute("y");
                    nodeY = 0f - float.Parse(xmlReader.Value);
                    xmlReader.MoveToAttribute("width");
                    num = float.Parse(xmlReader.Value);
                    xmlReader.MoveToAttribute("height");
                    num2 = float.Parse(xmlReader.Value);
                }
                Debug.Assert(num != 0f && num2 != 0f, "Error parsing GRAPHML");
                if (xmlReader.ReadToFollowing("NodeLabel"))
                {
                    string text = xmlReader.ReadString();
                    T      val  = new T();
                    val.Id            = text;
                    val.Name          = text;
                    val.nodeX         = nodeX;
                    val.nodeY         = nodeY;
                    val.width         = num;
                    val.height        = num2;
                    dictionary[value] = val;
                    resources.Add(val);
                }
            }
        }
        XmlDocument xmlDocument = new XmlDocument();

        xmlDocument.LoadXml(file.text);
        XmlNodeList xmlNodeList = xmlDocument.DocumentElement.SelectNodes("/graphml/graph/edge");
        IEnumerator enumerator  = xmlNodeList.GetEnumerator();

        try
        {
            while (enumerator.MoveNext())
            {
                XmlNode          xmlNode = (XmlNode)enumerator.Current;
                ResourceTreeNode value2  = null;
                dictionary.TryGetValue(xmlNode.Attributes["source"].Value, out value2);
                ResourceTreeNode value3 = null;
                dictionary.TryGetValue(xmlNode.Attributes["target"].Value, out value3);
                if (value2 != null && value3 != null)
                {
                    value2.references.Add(value3);
                    ResourceTreeNode.Edge edge = null;
                    XmlNode     xmlNode2       = null;
                    IEnumerator enumerator2    = xmlNode.ChildNodes.GetEnumerator();
                    try
                    {
                        while (enumerator2.MoveNext())
                        {
                            XmlNode xmlNode3 = (XmlNode)enumerator2.Current;
                            if (xmlNode3.HasChildNodes)
                            {
                                xmlNode2 = xmlNode3.FirstChild;
                                break;
                            }
                        }
                    }
                    finally
                    {
                        IDisposable disposable;
                        if ((disposable = (enumerator2 as IDisposable)) != null)
                        {
                            disposable.Dispose();
                        }
                    }
                    string name = xmlNode2.Name;
                    ResourceTreeNode.Edge.EdgeType edgeType = (ResourceTreeNode.Edge.EdgeType)Enum.Parse(typeof(ResourceTreeNode.Edge.EdgeType), name);
                    edge = new ResourceTreeNode.Edge(value2, value3, edgeType);
                    IEnumerator enumerator3 = xmlNode2.ChildNodes.GetEnumerator();
                    try
                    {
                        while (enumerator3.MoveNext())
                        {
                            XmlNode xmlNode4 = (XmlNode)enumerator3.Current;
                            if (!(xmlNode4.Name != "Path"))
                            {
                                edge.sourceOffset = new Vector2f(float.Parse(xmlNode4.Attributes["sx"].Value), 0f - float.Parse(xmlNode4.Attributes["sy"].Value));
                                edge.targetOffset = new Vector2f(float.Parse(xmlNode4.Attributes["tx"].Value), 0f - float.Parse(xmlNode4.Attributes["ty"].Value));
                                IEnumerator enumerator4 = xmlNode4.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator4.MoveNext())
                                    {
                                        XmlNode  xmlNode5 = (XmlNode)enumerator4.Current;
                                        Vector2f point    = new Vector2f(float.Parse(xmlNode5.Attributes["x"].Value), 0f - float.Parse(xmlNode5.Attributes["y"].Value));
                                        edge.AddToPath(point);
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable2;
                                    if ((disposable2 = (enumerator4 as IDisposable)) != null)
                                    {
                                        disposable2.Dispose();
                                    }
                                }
                                break;
                            }
                        }
                    }
                    finally
                    {
                        IDisposable disposable3;
                        if ((disposable3 = (enumerator3 as IDisposable)) != null)
                        {
                            disposable3.Dispose();
                        }
                    }
                    value2.edges.Add(edge);
                }
            }
        }
        finally
        {
            IDisposable disposable4;
            if ((disposable4 = (enumerator as IDisposable)) != null)
            {
                disposable4.Dispose();
            }
        }
    }