Beispiel #1
0
        public DocumentElement getElementById(object p)
        {
#if DISABLE
            var id      = p.ToString();
            var xmltags = m_scrObj.GetComponent <xmlTags_html>();

            Debug.Log("id=" + id);
            Debug.Log("m_id[" + id + "]=" + xmltags.m_id[id]);

            string d = "ids=>"; foreach (var k in xmltags.m_id.Keys)
            {
                d += k + "=" + xmltags.m_id[k] + ",";
            }
            Debug.Log(d);


            GameObject o = (GameObject)xmltags.m_id[id];
            if (o == null)
            {
                Debug.LogWarning("getElementById ERROR");
                write("getElementById ERROR:CAN'T FIND ID");
                return(null);
            }
            var de = new DocumentElement();
            de.gameObject = o;
            Debug.LogWarning("getElementById o" + o);
            return(de);
#endif
            var id   = p.ToString();
            var body = ((hglWindowInfo)hgca.FindAscendantComponent(m_scrObj.gameObject, typeof(hglWindowInfo))).m_curBodyElement;


            var elm = hglParser.FindID(id, body);
            if (elm != null && elm.FindBone() != null)
            {
                var de = new DocumentElement();
                de.gameObject = elm.FindBone().gameObject;
                de.xe         = elm;

                var rect = new hgRect(elm.formatBase.doneRealRect);
                var v    = Vector2.zero - (elm.formatBase.doneRealRect.center);
                rect.Move(v);
                de.rect = rect;

                return(de);
            }
            return(null);
        }
    public static bool ExecuteFunction(ELEMENT e, xmlScriptObj scrObj, STACKVAL stack, out object o)
    {
        o = null;
        object[] arglist = null;
        ELEMENT  func    = e.GetPointerLast();

        if (!func.isFUNCTION())
        {
            return(false);
        }

        if (func.raw == "typeof")
        {
            if (func.GetListElement(0).isBLOCK_C())
            {
                var     p0e  = func.GetListElement(0).GetListElement(0);
                ELEMENT last = p0e.GetPointerLast();
                var     pstr = p0e.GetPointerString();
                pstr = string.IsNullOrEmpty(pstr) ? last.raw : pstr + "." + last.raw;
                Type t = xmlScriptReflection.GetTypeOf(pstr);
                if (t == null)
                {
                    var o_1 = xmlScriptFunc.Execute(p0e, scrObj, stack);
                    if (o_1 != null)
                    {
                        t = xmlScriptGetMethod.ObjectGetType(o_1);
                    }
                }
                o = t;
                return(true);
            }
            return(false);
        }
        if (func.raw == "SETUPDATEFUNC" /*"S_SetUpdateFunc"*/)
        {
            if (func.GetListElement(0).isBLOCK_C())
            {
                var p0 = func.GetListElement(0).GetListElement(0);
                var p1 = func.GetListElement(0).GetListElement(1);

                var p0_o     = xmlScriptFunc.Execute(p0, scrObj, stack);
                var funcname = (p1.isQUOTE() ? p1.raw : null);
                if (!string.IsNullOrEmpty(funcname) && xmlScriptGetMethod.ObjectGetType(p0_o) == typeof(GameObject))
                {
                    var scriptMan = scrObj.GetComponent <xmlScriptMan>();
                    if (scriptMan != null)
                    {
                        scriptMan.SetUpdate(funcname, (GameObject)p0_o);
                        return(true);
                    }
                }
            }
            return(false);
        }
        else if (func.raw == "SETSTARTFUNC")
        {
            if (func.GetListElement(0).isBLOCK_C())
            {
                var p0 = func.GetListElement(0).GetListElement(0);
                var p1 = func.GetListElement(0).GetListElement(1);

                var p0_o = xmlScriptFunc.Execute(p0, scrObj, stack);
                var p1_o = xmlScriptFunc.Execute(p1, scrObj, stack);
                //var funcname = p1_o.ToString();
                if (p1_o != null && !string.IsNullOrEmpty(p1_o.ToString()) && (p0_o == null || xmlScriptGetMethod.ObjectGetType(p0_o) == typeof(GameObject)))
                {
                    var scriptMan = scrObj.GetComponent <xmlScriptMan>();
                    if (scriptMan != null)
                    {
                        scriptMan.SetStart(p1_o.ToString(), (GameObject)p0_o);
                        return(true);
                    }
                }
            }
            return(false);
        }
        else if (func.raw == "CALL")
        {
            if (func.GetListElement(0).isBLOCK_C())
            {
                var p0 = func.GetListElement(0).GetListElement(0);

                var p0_o = xmlScriptFunc.Execute(p0, scrObj, stack);
                //var funcname = p1_o.ToString();
                if (p0_o != null && !string.IsNullOrEmpty(p0_o.ToString()))
                {
                    var scriptMan = scrObj.GetComponent <xmlScriptMan>();
                    if (scriptMan != null)
                    {
                        scrObj.m_scriptMan.RunFunction(p0_o.ToString(), null, scrObj);
                        return(true);
                    }
                }
            }
            return(false);
        }

        arglist = GetArgs(func.GetListElement(0), scrObj, stack);

        if (e == func)
        {
            if (xmlScriptFunc.CallScriptFunction(func.raw, scrObj, stack, arglist, out o))
            {
                if (o != null && xmlScriptGetMethod.ObjectGetType(o) == typeof(SENTENCE_STATE))
                {
                    var ss = (SENTENCE_STATE)o;
                    if (ss.state == SENTENCE_STATE.STATE.RETURN)
                    {
                        o = ss.ret;
                    }
                }
                return(true);
            }
        }
        else
        {
            var pointerstr = e.GetPointerString();
            if (xmlScriptReflection.InvokeFunc(e, arglist, scrObj, stack, out o))
            {
                return(true);
            }
        }
        return(false);
    }