Ejemplo n.º 1
0
    private Interactive CreateInteractiveByXmlNode(XmlNode interactive)
    {
        Type        type = Type.GetType("PuzzleGame.Model." + interactive.Name + "," + Assembly.GetExecutingAssembly().FullName);
        Interactive obj  = Activator.CreateInstance(type, true) as Interactive;

        //解析属性
        foreach (XmlAttribute attribute in interactive.Attributes)
        {
            //含有-表示当前属性是列表
            if (attribute.Name.Contains("-"))
            {
                //为null则创建
                //Debug.Log(attribute.Name.Split('-')[0] + "---" + obj.GetType().Name);
                if (type.GetField("m_" + attribute.Name.Split('-')[0]).GetValue(obj) == null)
                {
                    object list = Activator.CreateInstance(typeof(List <string>));
                    type.GetField("m_" + attribute.Name.Split('-')[0]).SetValue(obj, list);
                }
                //为列表添加值
                (type.GetField("m_" + attribute.Name.Split('-')[0]).GetValue(obj) as List <string>).Add(attribute.Value);
            }
            else
            {
                type.GetField("m_" + attribute.Name).SetValue(obj, attribute.Value);
                type.GetField("m_" + "value").SetValue(obj, interactive.InnerText);
            }
        }
        obj.Initialized();
        //对Jump的特殊解析
        if (obj is Jump)
        {
            Jump jump = obj as Jump;
            if (Jump.m_JumpList.ContainsKey(jump.m_Id))
            {
                throw new Exception("JumpId : " + jump.m_Id + "repeated");
            }
            Jump.m_JumpList.Add(jump.m_Id, jump);
        }
        if (interactive.ChildNodes[0] == null)
        {
            return(obj);
        }
        //dfs解析value
        if (interactive.ChildNodes[0].ChildNodes.Count > 0)
        {
            obj = dfs(interactive, obj);
        }
        return(obj);
    }