public static void CallLuaFunc <T, P0, P1, P2, P3>(this T self, string name, P0 p0, P1 p1, P2 p2, P3 p3) where T : Component, ICapsUnityLuaBehavEx
    {
        CapsUnityLuaBehav major = GetMajorBehav(self);

        if (major != null)
        {
            major.BindLua();
            major.CallLuaFunc(name, p0, p1, p2, p3);
        }
    }
    public static void CallLuaFunc <T>(this T self, string name) where T : Component, ICapsUnityLuaBehavEx
    {
        CapsUnityLuaBehav major = GetMajorBehav(self);

        if (major != null)
        {
            major.BindLua();
            major.CallLuaFunc(name);
        }
    }
    public static object[] CallLuaFunc <T>(this T self, string name, params object[] args) where T : Component, ICapsUnityLuaBehavEx
    {
        CapsUnityLuaBehav major = GetMajorBehav(self);

        if (major != null)
        {
            major.BindLua();
            return(major.CallLuaFunc(name, args));
        }
        return(null);
    }
    public static bool CallLuaFunc <T, R, P0, P1, P2, P3, P4, P5>(this T self, string name, out R r, P0 p0, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) where T : Component, ICapsUnityLuaBehavEx
    {
        CapsUnityLuaBehav major = GetMajorBehav(self);

        if (major != null)
        {
            major.BindLua();
            return(major.CallLuaFunc(name, out r, p0, p1, p2, p3, p4, p5));
        }
        r = default(R);
        return(false);
    }
    public static bool CallLuaFunc <T, R, P0>(this T self, string name, out R r, P0 p0) where T : Component, ICapsUnityLuaBehavEx
    {
        CapsUnityLuaBehav major = GetMajorBehav(self);

        if (major != null)
        {
            major.BindLua();
            return(major.CallLuaFunc(name, out r, p0));
        }
        r = default(R);
        return(false);
    }
    public static CapsUnityLuaBehav GetMajorBehav <T>(this T self) where T : Component, ICapsUnityLuaBehavEx
    {
        CapsUnityLuaBehav major = self.Major;

        if (object.ReferenceEquals(major, null))
        {
            major = self.GetComponent <CapsUnityLuaBehav>();
            if (major != null)
            {
                self.Major = major;
            }
        }
        return(major);
    }
 public static void ExpandExFieldsToSelf(IntPtr l, CapsUnityLuaBehav behav, int index)
 {
     using (var lr = new LuaStateRecover(l))
     {
         l.pushvalue(index); // behav
         if (behav.ExFields != null)
         {
             foreach (var kvp in behav.ExFields)
             {
                 l.SetHierarchical(-1, kvp.Key, kvp.Value);
             }
         }
     }
 }
        public override IntPtr PushLua(IntPtr l, object val)
        {
            var h = base.PushLua(l, val);

            LuaObjCache.RegObj(l, val, -1, h);
            CapsUnityLuaBehav real = val as CapsUnityLuaBehav;

            if (real != null)
            {
                if (real.ShouldBindLua)
                {
                    real.BindLua(l, -1);
                }
            }
            return(IntPtr.Zero);
        }
 public static void ExpandExFields(IntPtr l, CapsUnityLuaBehav behav, int index)
 {
     using (var lr = new LuaStateRecover(l))
     {
         l.pushvalue(index);      // behav
         l.newtable();            // behav ex
         l.pushvalue(-1);         // behav ex ex
         l.SetField(-3, "___ex"); // behav ex
         if (behav.ExFields != null)
         {
             foreach (var kvp in behav.ExFields)
             {
                 l.SetHierarchical(-1, kvp.Key, kvp.Value);
             }
         }
     }
 }
示例#10
0
        /// <summary>
        /// 默认选择自己或与自己最近父节点的LuaBehavior
        /// </summary>
        protected void Reset()
        {
            Transform trans = this.transform;

            while (trans != null)
            {
                var luaBehaviComp = trans.GetComponent <CapsUnityLuaBehav>();
                if (luaBehaviComp)
                {
                    this.luaBehaviour = luaBehaviComp;
                    break;
                }
                else
                {
                    trans = trans.parent;
                }
            }
        }
示例#11
0
        //private ScrollRectExDelegate3 createItemLuaFunc;
        //private ScrollRectExDelegate3 createLineLuaFunc;
        //private ScrollRectExDelegate1 resetItemLuaFunc;
        //private ScrollRectExDelegate1 updateItemIndexLuaFunc;
        //private ScrollRectExDelegate destroyItemLuaFunc;
        //private ScrollRectExDelegate onItemIndexChanged;
        //private ScrollRectExDelegate2 onScrollPositionChanged;

        public void Awake()
        {
            if (luaBehaviour == null)
            {
                luaBehaviour = GetComponent <CapsUnityLuaBehav>();
            }
            //if (createItemLuaFunc == null)
            //{
            //    luaBehaviour.lua.Get("createItem", out createItemLuaFunc);
            //}
            //if (createLineLuaFunc == null)
            //{
            //    luaBehaviour.lua.Get("createLine", out createLineLuaFunc);
            //}
            //if (resetItemLuaFunc == null)
            //{
            //    luaBehaviour.lua.Get("resetItem", out resetItemLuaFunc);
            //}
            //if (updateItemIndexLuaFunc == null)
            //{
            //    luaBehaviour.lua.Get("updateItemIndex", out updateItemIndexLuaFunc);
            //}
            //if (destroyItemLuaFunc == null)
            //{
            //    luaBehaviour.lua.Get("destroyItem", out destroyItemLuaFunc);
            //}
            //if (onItemIndexChanged == null)
            //{
            //    luaBehaviour.lua.Get("onItemIndexChanged", out onItemIndexChanged);
            //}
            //if (onScrollPositionChanged == null)
            //{
            //    luaBehaviour.lua.Get("onScrollPositionChanged", out onScrollPositionChanged);
            //}

            scrollRect = GetComponent <ScrollRect>();
            if (!isShowLine)
            {
                lineSpace = 0;
            }
            CalcCellCount();
        }
示例#12
0
 public static BaseLua CreateUserDataAndExpandExFields(this CapsUnityLuaBehav behav)
 {
     using (var lr = GlobalLua.CreateStackRecover())
     {
         var l  = GlobalLua.L;
         var ud = new LuaOnStackUserData(l, behav);
         ud.PushToLua();
         l.pushvalue(-1);
         var refid = l.refer();
         l.newtable();
         l.SetField(-2, "___ex");
         foreach (var kvp in behav.ExpandExVal())
         {
             if (!(kvp.Value is CapsUnityLuaBehav.NotAvailableExVal))
             {
                 ud.SetHierarchical("___ex." + kvp.Key, kvp.Value);
             }
         }
         return(new BaseLua(l, refid));
     }
 }
示例#13
0
 public void SelectDefaultToggle(int tag)
 {
     m_cache_tag          = tag;
     isTriggerLuaListener = false;
     for (int i = 0; i < Toggles.Count; i++)
     {
         int               toggleTag = i + 1;
         GameObject        obj       = Toggles[i];
         CapsUnityLuaBehav btnLua    = obj.GetComponent <CapsUnityLuaBehav>();
         if (toggleTag == tag)
         {
             obj.GetComponent <Toggle>().isOn = true;
             luaBehav.CallLuaFunc <CapsUnityLuaBehav, int>("onToggleSelected", btnLua, tag);
             luaBehav.CallLuaFunc <CapsUnityLuaBehav, int>("onTagSwitched", btnLua, tag);
         }
         else
         {
             obj.GetComponent <Toggle>().isOn = false;
             luaBehav.CallLuaFunc <CapsUnityLuaBehav, int>("onToggleDeselected", btnLua, tag);
         }
     }
     isTriggerLuaListener = true;
 }
示例#14
0
        public static BaseLua BindBehav(this CapsUnityLuaBehav behav)
        {
            using (var lr = GlobalLua.CreateStackRecover())
            {
                var l = GlobalLua.L;
                if (behav == null)
                {
                    return(null);
                }
                if (string.IsNullOrEmpty(behav.InitLuaPath))
                {
                    return(CreateUserDataAndExpandExFields(behav));
                }

                int  oldtop      = lr.Top;
                bool luaFileDone = false;
                l.pushcfunction(LuaFramework.ClrDelErrorHandler);
                l.GetGlobal("require");
                l.PushString(behav.InitLuaPath);
                if (l.pcall(1, 1, -3) == 0)
                {
                    if (l.gettop() > oldtop + 1 && l.istable(oldtop + 2))
                    {
                        luaFileDone = true;
                    }
                    else
                    {
                        if (GLog.IsLogErrorEnabled)
                        {
                            GLog.LogError("Failed to init script by require " + behav.InitLuaPath + ". (Not a table.) Now Init it by file.");
                        }
                    }
                }
                else
                {
                    if (GLog.IsLogErrorEnabled)
                    {
                        GLog.LogError(l.GetLua(-1).UnwrapDynamic() + "\nFailed to init script by require " + behav.InitLuaPath + ". Now Init it by file.");
                    }
                }
                if (!luaFileDone)
                {
                    if (GLog.IsLogInfoEnabled)
                    {
                        GLog.LogInfo("Init it by file. - Disabled");
                    }
                    //string path = behav.InitLuaPath;
                    //if (path.EndsWith(".lua"))
                    //{
                    //    path = path.Substring(0, path.Length - 4);
                    //}
                    //path = path.Replace('.', '/');
                    //path = path.Replace('\\', '/');
                    //if (!path.StartsWith("spt/"))
                    //{
                    //    path = "spt/" + path;
                    //}
                    //path += ".lua";
                    //path = ResManager.UpdatePath + "/" + path;

                    //l.settop(oldtop);
                    //if (l.dofile(path) == 0)
                    //{
                    //    if (l.gettop() > oldtop && l.istable(oldtop + 1))
                    //    {
                    //        luaFileDone = true;
                    //    }
                    //    else
                    //    {
                    //       if (GLog.IsLogInfoEnabled) GLog.LogInfo("Failed to load script " + path + ". (Not a table.)");
                    //    }
                    //}
                    //else
                    //{
                    //   if (GLog.IsLogInfoEnabled) GLog.LogInfo(l.GetLua(-1).UnwrapDynamic());
                    //   if (GLog.IsLogInfoEnabled) GLog.LogInfo("Failed to load script " + path);
                    //}
                }
                if (luaFileDone)
                {
                    l.GetField(oldtop + 2, "attach");
                    if (l.isfunction(-1))
                    {
                        var ud = CreateUserDataAndExpandExFields(behav);
                        l.getref(ud.Refid);
                        if (l.pcall(1, 0, oldtop + 1) == 0)
                        {
                        }
                        else
                        {
                            if (GLog.IsLogErrorEnabled)
                            {
                                GLog.LogError(l.GetLua(-1).UnwrapDynamic());
                            }
                        }
                        return(ud);
                    }
                }
                return(CreateUserDataAndExpandExFields(behav));
            }
        }
示例#15
0
        protected override void Awake()
        {
            base.Awake();

            if (ButtonGroupType == ButtonGroupType.Dynamic)
            {
                Toggles = new List <GameObject>();

                GameObject prefabObj = null;
                if (!string.IsNullOrEmpty(TogglePrefab))
                {
                    prefabObj = ResManager.LoadRes(TogglePrefab) as GameObject;
                }

                for (int i = 0; i < TogglesCount; i++)
                {
                    var obj = GameObject.Instantiate(prefabObj != null ? prefabObj : ToggleObj, transform);

                    if (obj)
                    {
                        if (!obj.activeSelf)
                        {
                            obj.SetActive(true);
                        }

                        Toggles.Add(obj);
                    }
                }
            }
            for (int i = 0; i < Toggles.Count; i++)
            {
                int        tag = i + 1;
                GameObject obj = Toggles[i];
                Debug.Assert(obj.GetComponent <UnityEngine.UI.Toggle>(), "Toggle object must has a toggle compoment");
                CapsUnityLuaBehav btnLua = obj.GetComponent <CapsUnityLuaBehav>();
                luaBehav.CallLuaFunc <CapsUnityLuaBehav, int>("onToggleCreated", btnLua, tag);
                Toggle t = obj.GetComponent <Toggle>();
                t.group          = this;
                t.onValueChanged = new Toggle.ToggleEvent();
                t.onValueChanged.AddListener((bool active) =>
                {
                    if (isTriggerLuaListener)
                    {
                        CapsUnityLuaBehav btnLua2 = Toggles[tag - 1].GetComponent <CapsUnityLuaBehav>();
                        if (active)
                        {
                            if (AllowReselect)
                            {
                                m_cache_tag = tag;
                            }
                            else if (tag == m_cache_tag)
                            {
                                return;
                            }
                            else
                            {
                                m_cache_tag = tag;
                            }

                            luaBehav.CallLuaFunc <CapsUnityLuaBehav, int>("onToggleSelected", btnLua2, tag);
                            luaBehav.CallLuaFunc <CapsUnityLuaBehav, int>("onTagSwitched", btnLua2, tag);
                        }
                        else
                        {
                            luaBehav.CallLuaFunc <CapsUnityLuaBehav, int>("onToggleDeselected", btnLua2, tag);
                        }
                    }
                });
            }
        }
示例#16
0
    public static BaseLua BindBehav(IntPtr l, CapsUnityLuaBehav behav, int index)
    {
        ExpandExFields(l, behav, index);
        using (var lr = new LuaStateRecover(l))
        {
            if (string.IsNullOrEmpty(behav.InitLuaPath))
            {
                l.pushvalue(index);
                var refid = l.refer();
                return(new BaseLua(l, refid));
            }

            int  oldtop      = lr.Top;
            bool luaFileDone = false;
            l.pushcfunction(LuaHub.LuaFuncOnError);
            l.GetGlobal("require");
            l.PushString(behav.InitLuaPath);
            if (l.pcall(1, 1, -3) == 0)
            {
                if (l.gettop() > oldtop + 1 && l.istable(oldtop + 2))
                {
                    luaFileDone = true;
                }
                else
                {
                    DynamicHelper.LogError("Failed to init script by require " + behav.InitLuaPath + ". (Not a table.) Now Init it by file.");
                }
            }
            else
            {
                DynamicHelper.LogError(l.GetLua(-1));
                DynamicHelper.LogInfo("Failed to init script by require " + behav.InitLuaPath + ". Now Init it by file.");
            }
            if (!luaFileDone)
            {
                DynamicHelper.LogInfo("Init it by file. - Disabled");
                //string path = behav.InitLuaPath;
                //if (path.EndsWith(".lua"))
                //{
                //    path = path.Substring(0, path.Length - 4);
                //}
                //path = path.Replace('.', '/');
                //path = path.Replace('\\', '/');
                //if (!path.StartsWith("spt/"))
                //{
                //    path = "spt/" + path;
                //}
                //path += ".lua";
                //path = ResManager.UpdatePath + "/" + path;

                //l.settop(oldtop);
                //if (l.dofile(path) == 0)
                //{
                //    if (l.gettop() > oldtop && l.istable(oldtop + 1))
                //    {
                //        luaFileDone = true;
                //    }
                //    else
                //    {
                //        DynamicHelper.LogInfo("Failed to load script " + path + ". (Not a table.)");
                //    }
                //}
                //else
                //{
                //    DynamicHelper.LogInfo(l.GetLua(-1).UnwrapDynamic());
                //    DynamicHelper.LogInfo("Failed to load script " + path);
                //}
            }
            if (luaFileDone)
            {
                l.GetField(oldtop + 2, "___bind_ex_to_self");
                if (!l.isnoneornil(-1))
                {
                    bool bindex;
                    l.GetLua(-1, out bindex);
                    if (bindex)
                    {
                        ExpandExFieldsToSelf(l, behav, oldtop);
                    }
                }
                l.pop(1);

                l.GetField(oldtop + 2, "attach");
                if (l.isfunction(-1))
                {
                    l.pushvalue(oldtop);
                    if (l.pcall(1, 0, oldtop + 1) == 0)
                    {
                    }
                    else
                    {
                        DynamicHelper.LogError(l.GetLua(-1));
                    }
                    l.pushvalue(oldtop);
                    var refid = l.refer();
                    return(new BaseLua(l, refid));
                }
            }
        }
        {
            l.pushvalue(index);
            var refid = l.refer();
            return(new BaseLua(l, refid));
        }
    }