// 调用功能
    protected bool doFunction(XMLFunctionStruct f)
    {
        if (f == null)
        {
            return(false);
        }

        // 遍历该功能绑定的条件检查
        foreach (XMLConditionStruct c in f.mConditions)
        {
            if (mSceneInterfaceMap.ContainsKey(c.mType))
            {
                // 调用场景提供的功能接口
                SceneFunctionInterface funcCondition = mSceneInterfaceMap[c.mType];
                if (!funcCondition(c.mParams))
                {
                    return(false);
                }
            }
        }

        // 检查成功 调用功能函数
        if (mSceneInterfaceMap.ContainsKey(f.mType))
        {
            SceneFunctionInterface funcInterface = mSceneInterfaceMap[f.mType];
            funcInterface(f.mParams);
        }

        return(true);
    }
    // 解析Functions
    private void ParseFunctions(XmlNode node)
    {
        if (!mEventsInited)
        {
            GameDebug.LogError("ScriptXML Error : Events 需要位于 Functions 之前!");
            return;
        }

        XmlNodeList nodeList = node.ChildNodes;

        for (int i = 0; i < nodeList.Count; ++i)
        {
            XmlNode childNode = nodeList[i];
            if (childNode != null && childNode.Name == "Function")
            {
                string type = childNode.Attributes["type"].Value;
                if (type == null || type.Length < 1)
                {
                    continue;
                }

                XMLFunctionStruct xmlFunction = new XMLFunctionStruct();
                xmlFunction.mName = childNode.Attributes["name"].Value;
                xmlFunction.mType = childNode.Attributes["type"].Value;

                int          index  = 1;
                XmlAttribute attrib = null;
                while ((attrib = childNode.Attributes["param" + index.ToString()]) != null)
                {
                    xmlFunction.mParams.Add(attrib.Value);
                    index++;
                }

                //mFunctionsList.Add(xmlFunction);
                if (mFunctionsNameMap.ContainsKey(xmlFunction.mName))
                {
                    GameDebug.LogError("ScriptXML Error : Function自命名重复!name:" + xmlFunction.mName);
                }

                mFunctionsNameMap.Add(xmlFunction.mName, xmlFunction);

                XmlAttribute evtattrib = childNode.Attributes["event"];
                if (evtattrib != null)
                {
                    string eventName = evtattrib.Value;
                    if (mEventsNameMap.ContainsKey(eventName))
                    {
                        mEventsNameMap[eventName].mFunctions.Add(xmlFunction);
                    }

//                    GameDebug.Log("mEventsNameMap.mFunctions.Count:" + mEventsNameMap[eventName].mFunctions.Count.ToString() +
//                    "         mEventTypeMap.mFunctions.Count:" + (mEventsTypeMap[mEventsNameMap[eventName].mType][0] as XMLEventStruct).mFunctions.Count.ToString());
                }
            }
        }

        mFunctionsInited = true;
    }
    // 外部调用功能
    public bool InvokeFunction(string name)
    {
        if (string.IsNullOrEmpty(name))
        {
            return(false);
        }

        if (!mFunctionsNameMap.ContainsKey(name))
        {
            return(false);
        }

        XMLFunctionStruct xmlfunc = mFunctionsNameMap[name];

        return(doFunction(xmlfunc));
    }