public int AttachMovieLua(Movie movie, bool empty) { if (luaState==null) return 0; Lua.lua_State l = (Lua.lua_State)luaState; int args = Lua.lua_gettop(l); string linkageName; string attachName; int attachDepth = -1; bool reorder = false; int offset = empty ? 2 : 3; MovieEventHandlerDictionary handlers = new MovieEventHandlerDictionary() { {"load",null}, {"postLoad",null}, {"unload",null}, {"enterFrame",null}, {"update",null}, {"render",null} }; Movie child; /* 1: LWF_Movie instance */ /* 2: linkageName:string */ /* 3: attachName:string */ /* 4: table {key:string, handler:function} */ /* 5: attachDepth:number (option) */ /* 6: reorder:boolean (option) */ /* or */ /* 1: LWF_Movie instance */ /* 2: attachName:string */ /* 3: table {key:string, handler:function} */ /* 4: attachDepth:number (option) */ /* 5: reorder:boolean (option) */ linkageName = empty ? "_empty" : Lua.lua_tostring(l, 2).ToString(); attachName = Lua.lua_tostring(l, offset).ToString(); if (args >= offset + 1) { Lua.lua_getglobal(l, "LWF"); /* -1: LWF */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, "Instances"); /* -2: LWF */ /* -1: LWF.Instances */ Lua.lua_remove(l, -2); /* -1: LWF.Instances */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, instanceIdString); /* -2: LWF.Instances */ /* -1: LWF.Instances.<instanceId> */ Lua.lua_remove(l, -2); /* -1: LWF.Instances.<instanceId> */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, "Handlers"); /* -2: LWF.Instances.<instanceId> */ /* -1: LWF.Instances.<instanceId>.Handlers */ Lua.lua_remove(l, -2); /* -1: LWF.Instances.<instanceId>.Handlers */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_pushnil(l); /* -2: LWF.Instances.<instanceId>.Handlers */ /* -1: nil */ while (Lua.lua_next(l, 4) != 0) { /* -3: LWF.Instances.<instanceId>.Handlers */ /* -2: key: eventName string */ /* -1: value: handler function */ string key = Lua.lua_tostring(l, -2).ToString(); if (key != null && Lua.lua_isfunction(l, -1)) { int luaHandlerId = GetEventOffset(); handlers[key] = (Movie a) => { if (!a.lwf.PushHandlerLua(luaHandlerId)) return; /* -1: function */ Lua.lua_State ls = (Lua.lua_State)a.lwf.luaState; Luna_LWF_Movie.push(ls, a, false); /* -2: function */ /* -1: Movie or Button */ if (Lua.lua_pcall(ls, 1, 0, 0)!=0) Lua.lua_pop(ls, 1); /* 0 */ }; Lua.lua_setfield(l, -3, luaHandlerId.ToString()); /* LWF.Instances.<instanceId>.Handlers. <luaHandlerId> = function */ /* -2: LWF.Instances.<instanceId>.Handlers */ /* -1: key */ } else { Lua.lua_pop(l, 1); /* -2: LWF.Instances.<instanceId>.Handlers */ /* -1: key: eventName string */ } } /* -1: LWF.Instances.<instanceId>.Handlers */ Lua.lua_pop(l, 1); /* 0 */ } if (args >= offset + 2) attachDepth = (int)Lua.lua_tonumber(l, offset + 2); if (args >= offset + 3) reorder = Lua.lua_toboolean(l, offset + 3)!=0; child = movie.AttachMovie( linkageName, attachName, attachDepth, reorder, handlers["load"], handlers["postLoad"], handlers["unload"], handlers["enterFrame"], handlers["update"], handlers["render"]); Luna_LWF_Movie.push(l, child, false); /* -1: LWF_Movie child */ return 1; error: Lua.lua_pushnil(l); /* -1: nil */ return 1; }
public int AttachMovieLua(Movie movie, bool empty) { if (luaState == null) { return(0); } Lua.lua_State l = (Lua.lua_State)luaState; int args = Lua.lua_gettop(l); string linkageName; string attachName; int attachDepth = -1; bool reorder = false; int offset = empty ? 2 : 3; MovieEventHandlerDictionary handlers = new MovieEventHandlerDictionary() { { "load", null }, { "postLoad", null }, { "unload", null }, { "enterFrame", null }, { "update", null }, { "render", null } }; Movie child; /* 1: LWF_Movie instance */ /* 2: linkageName:string */ /* 3: attachName:string */ /* 4: table {key:string, handler:function} */ /* 5: attachDepth:number (option) */ /* 6: reorder:boolean (option) */ /* or */ /* 1: LWF_Movie instance */ /* 2: attachName:string */ /* 3: table {key:string, handler:function} */ /* 4: attachDepth:number (option) */ /* 5: reorder:boolean (option) */ linkageName = empty ? "_empty" : Lua.lua_tostring(l, 2).ToString(); attachName = Lua.lua_tostring(l, offset).ToString(); if (args >= offset + 1) { Lua.lua_getglobal(l, "LWF"); /* -1: LWF */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, "Instances"); /* -2: LWF */ /* -1: LWF.Instances */ Lua.lua_remove(l, -2); /* -1: LWF.Instances */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, instanceIdString); /* -2: LWF.Instances */ /* -1: LWF.Instances.<instanceId> */ Lua.lua_remove(l, -2); /* -1: LWF.Instances.<instanceId> */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, "Handlers"); /* -2: LWF.Instances.<instanceId> */ /* -1: LWF.Instances.<instanceId>.Handlers */ Lua.lua_remove(l, -2); /* -1: LWF.Instances.<instanceId>.Handlers */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_pushnil(l); /* -2: LWF.Instances.<instanceId>.Handlers */ /* -1: nil */ while (Lua.lua_next(l, 4) != 0) { /* -3: LWF.Instances.<instanceId>.Handlers */ /* -2: key: eventName string */ /* -1: value: handler function */ string key = Lua.lua_tostring(l, -2).ToString(); if (key != null && Lua.lua_isfunction(l, -1)) { int luaHandlerId = GetEventOffset(); handlers[key] = (Movie a) => { if (!a.lwf.PushHandlerLua(luaHandlerId)) { return; } /* -1: function */ Lua.lua_State ls = (Lua.lua_State)a.lwf.luaState; Luna_LWF_Movie.push(ls, a, false); /* -2: function */ /* -1: Movie or Button */ if (Lua.lua_pcall(ls, 1, 0, 0) != 0) { Lua.lua_pop(ls, 1); } /* 0 */ }; Lua.lua_setfield(l, -3, luaHandlerId.ToString()); /* LWF.Instances.<instanceId>.Handlers. * <luaHandlerId> = function */ /* -2: LWF.Instances.<instanceId>.Handlers */ /* -1: key */ } else { Lua.lua_pop(l, 1); /* -2: LWF.Instances.<instanceId>.Handlers */ /* -1: key: eventName string */ } } /* -1: LWF.Instances.<instanceId>.Handlers */ Lua.lua_pop(l, 1); /* 0 */ } if (args >= offset + 2) { attachDepth = (int)Lua.lua_tonumber(l, offset + 2); } if (args >= offset + 3) { reorder = Lua.lua_toboolean(l, offset + 3) != 0; } child = movie.AttachMovie( linkageName, attachName, attachDepth, reorder, handlers["load"], handlers["postLoad"], handlers["unload"], handlers["enterFrame"], handlers["update"], handlers["render"]); Luna_LWF_Movie.push(l, child, false); /* -1: LWF_Movie child */ return(1); error: Lua.lua_pushnil(l); /* -1: nil */ return(1); }