Exemple #1
0
	public int AddEventHandlerLua(Movie movie = null, Button button = null)
	{
		if (luaState==null)
			return 0;

		Lua.lua_State l = (Lua.lua_State)luaState;
		string ev;
		int luaHandlerId;
		int handlerId;

		/* 1: LWF_LWF instance */
		/* 2: string */
		/* 3: function */
		ev = Lua.lua_tostring(l, 2).ToString();

		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_pushvalue(l, 3);
		/* -2: LWF.Instances.<instanceId>.Handlers */
		/* -1: function */
		luaHandlerId = GetEventOffset();
		Lua.lua_setfield(l, -2, luaHandlerId.ToString());
		/* LWF.Instances.<instanceId>.Handlers.<luaHandlerId> = function */
		/* -1: LWF.Instances.<instanceId>.Handlers */
		Lua.lua_pop(l, 1);
		/* 0 */

		if (movie != null) {
			if (string.IsNullOrEmpty(ev) || MovieEvents.ContainsKey(ev)) {
				/* Movie event */
				handlerId = movie.AddEventHandler(ev, (Movie m) => {
					Lua.lua_State _l = (Lua.lua_State)m.lwf.luaState;
					if (!m.lwf.PushHandlerLua(luaHandlerId))
						return;
					/* -1: function */

					Luna_LWF_Movie.push(_l, m, false);
					/* -2: function */
					/* -1: Movie */
					if (Lua.lua_pcall(_l, 1, 0, 0)!=0)
						Lua.lua_pop(_l, 1);
				});
			} else {
				handlerId = movie.AddEventHandler(ev, () => {
					Lua.lua_State _l = (Lua.lua_State)movie.lwf.luaState;
					if (!movie.lwf.PushHandlerLua(luaHandlerId))
						return;
					/* -1: function */

					/* User defined event */
					Lua.lua_createtable(_l, 0, 2);
					/* -2: function */
					/* -1: table */
					Lua.lua_pushstring(_l, ev);
					/* -3: function */
					/* -2: table */
					/* -1: string(type) */
					Lua.lua_setfield(_l, -2, "type");
					/* -2: function */
					/* -1: table */
					if (Lua.lua_istable(_l, 2)) {
						Lua.lua_getfield(_l, 2, "param");
						/* -3: function */
						/* -2: table */
						/* -1: param */
					} else {
						Lua.lua_pushnil(_l);
						/* -3: function */
						/* -2: table */
						/* -1: nil */
					}
					Lua.lua_setfield(_l, -2, "param");
					/* -2: function */
					/* -1: table */
					if (Lua.lua_pcall(_l, 1, 0, 0)!=0)
						Lua.lua_pop(_l, 1);
					/* 0 */
				});
			}
		} else if (button != null) {
			if (string.Compare(ev, "keyPress") == 0) {
				handlerId = button.AddEventHandler(ev, (Button b, int k) => {
					if (!b.lwf.PushHandlerLua(luaHandlerId))
						return;

					/* -1: function */
					Lua.lua_State _l = (Lua.lua_State)b.lwf.luaState;
					Luna_LWF_Button.push(_l, b, false);
					Lua.lua_pushnumber(_l, k);
					/* -3: function */
					/* -2: Button */
					/* -1: int */
					if (Lua.lua_pcall(l, 2, 0, 0)!=0)
						Lua.lua_pop(l, 1);
					/* 0 */
				});
			} else {
				handlerId = button.AddEventHandler(ev, (Button b) => {
					if (!b.lwf.PushHandlerLua(luaHandlerId))
						return;

					/* -1: function */
					Lua.lua_State _l = (Lua.lua_State)b.lwf.luaState;
					Luna_LWF_Button.push(_l, b, false);
					/* -2: function */
					/* -1: Button */
					if (Lua.lua_pcall(l, 1, 0, 0)!=0)
						Lua.lua_pop(l, 1);
					/* 0 */
				});
			}
		} else {
			handlerId = AddEventHandler(ev, (Movie m, Button b) => {
				if (!m.lwf.PushHandlerLua(luaHandlerId))
					return;

				/* -1: function */
				Lua.lua_State _l = (Lua.lua_State)m.lwf.luaState;
				Luna_LWF_Movie.push(_l, m, false);
				Luna_LWF_Button.push(_l, b, false);
				/* -3: function */
				/* -2: Movie */
				/* -1: Button */
				if (Lua.lua_pcall(l, 2, 0, 0)!=0)
					Lua.lua_pop(l, 1);
				/* 0 */
			});
		}

		Lua.lua_pushnumber(l, handlerId);
		/* -1: handlerId */
		return 1;

	error:
		Lua.lua_pushnumber(l, -1);
		/* -1: -1 */
		return 1;
	}
Exemple #2
0
        public int AddEventHandlerLua(Movie movie = null, Button button = null)
        {
            if (luaState == null)
            {
                return(0);
            }

            Lua.lua_State l = (Lua.lua_State)luaState;
            string        ev;
            int           luaHandlerId;
            int           handlerId;

            /* 1: LWF_LWF instance */
            /* 2: string */
            /* 3: function */
            ev = Lua.lua_tostring(l, 2).ToString();

            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_pushvalue(l, 3);
            /* -2: LWF.Instances.<instanceId>.Handlers */
            /* -1: function */
            luaHandlerId = GetEventOffset();
            Lua.lua_setfield(l, -2, luaHandlerId.ToString());
            /* LWF.Instances.<instanceId>.Handlers.<luaHandlerId> = function */
            /* -1: LWF.Instances.<instanceId>.Handlers */
            Lua.lua_pop(l, 1);
            /* 0 */

            if (movie != null)
            {
                if (string.IsNullOrEmpty(ev) || MovieEvents.ContainsKey(ev))
                {
                    /* Movie event */
                    handlerId = movie.AddEventHandler(ev, (Movie m) => {
                        Lua.lua_State _l = (Lua.lua_State)m.lwf.luaState;
                        if (!m.lwf.PushHandlerLua(luaHandlerId))
                        {
                            return;
                        }
                        /* -1: function */

                        Luna_LWF_Movie.push(_l, m, false);
                        /* -2: function */
                        /* -1: Movie */
                        if (Lua.lua_pcall(_l, 1, 0, 0) != 0)
                        {
                            Lua.lua_pop(_l, 1);
                        }
                    });
                }
                else
                {
                    handlerId = movie.AddEventHandler(ev, () => {
                        Lua.lua_State _l = (Lua.lua_State)movie.lwf.luaState;
                        if (!movie.lwf.PushHandlerLua(luaHandlerId))
                        {
                            return;
                        }
                        /* -1: function */

                        /* User defined event */
                        Lua.lua_createtable(_l, 0, 2);
                        /* -2: function */
                        /* -1: table */
                        Lua.lua_pushstring(_l, ev);
                        /* -3: function */
                        /* -2: table */
                        /* -1: string(type) */
                        Lua.lua_setfield(_l, -2, "type");
                        /* -2: function */
                        /* -1: table */
                        if (Lua.lua_istable(_l, 2))
                        {
                            Lua.lua_getfield(_l, 2, "param");
                            /* -3: function */
                            /* -2: table */
                            /* -1: param */
                        }
                        else
                        {
                            Lua.lua_pushnil(_l);
                            /* -3: function */
                            /* -2: table */
                            /* -1: nil */
                        }
                        Lua.lua_setfield(_l, -2, "param");
                        /* -2: function */
                        /* -1: table */
                        if (Lua.lua_pcall(_l, 1, 0, 0) != 0)
                        {
                            Lua.lua_pop(_l, 1);
                        }
                        /* 0 */
                    });
                }
            }
            else if (button != null)
            {
                if (string.Compare(ev, "keyPress") == 0)
                {
                    handlerId = button.AddEventHandler(ev, (Button b, int k) => {
                        if (!b.lwf.PushHandlerLua(luaHandlerId))
                        {
                            return;
                        }

                        /* -1: function */
                        Lua.lua_State _l = (Lua.lua_State)b.lwf.luaState;
                        Luna_LWF_Button.push(_l, b, false);
                        Lua.lua_pushnumber(_l, k);
                        /* -3: function */
                        /* -2: Button */
                        /* -1: int */
                        if (Lua.lua_pcall(l, 2, 0, 0) != 0)
                        {
                            Lua.lua_pop(l, 1);
                        }
                        /* 0 */
                    });
                }
                else
                {
                    handlerId = button.AddEventHandler(ev, (Button b) => {
                        if (!b.lwf.PushHandlerLua(luaHandlerId))
                        {
                            return;
                        }

                        /* -1: function */
                        Lua.lua_State _l = (Lua.lua_State)b.lwf.luaState;
                        Luna_LWF_Button.push(_l, b, false);
                        /* -2: function */
                        /* -1: Button */
                        if (Lua.lua_pcall(l, 1, 0, 0) != 0)
                        {
                            Lua.lua_pop(l, 1);
                        }
                        /* 0 */
                    });
                }
            }
            else
            {
                handlerId = AddEventHandler(ev, (Movie m, Button b) => {
                    if (!m.lwf.PushHandlerLua(luaHandlerId))
                    {
                        return;
                    }

                    /* -1: function */
                    Lua.lua_State _l = (Lua.lua_State)m.lwf.luaState;
                    Luna_LWF_Movie.push(_l, m, false);
                    Luna_LWF_Button.push(_l, b, false);
                    /* -3: function */
                    /* -2: Movie */
                    /* -1: Button */
                    if (Lua.lua_pcall(l, 2, 0, 0) != 0)
                    {
                        Lua.lua_pop(l, 1);
                    }
                    /* 0 */
                });
            }

            Lua.lua_pushnumber(l, handlerId);
            /* -1: handlerId */
            return(1);

error:
            Lua.lua_pushnumber(l, -1);
            /* -1: -1 */
            return(1);
        }