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); } } } }
/// <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; } } }
//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(); }
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)); } }
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; }
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)); } }
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); } } }); } }
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)); } }