prevent double execution of on_event.lua
makes it safe to dofile("on_event.lua")
(cherry-picked from commit 6010ffe98e
)
This commit is contained in:
parent
7e4d12e10d
commit
20177dbe5e
1 changed files with 10 additions and 3 deletions
|
@ -3,19 +3,25 @@ local utils = wesnoth.require "wml-utils"
|
|||
-- so you have to call this function from a toplevel lua tag or from a preload event.
|
||||
-- It is also not possible to use this for first_time_only=yes events.
|
||||
|
||||
if rawget(_G, "core_on_event") then
|
||||
return rawget(_G, "core_on_event") -- prevent double execution
|
||||
end
|
||||
|
||||
local event_handlers = {}
|
||||
|
||||
local old_on_event = wesnoth.game_events.on_event or function(eventname) end
|
||||
wesnoth.game_events.on_event = function(eventname)
|
||||
old_on_event(eventname)
|
||||
local context = nil
|
||||
for k,v in pairs(event_handlers[eventname] or {}) do
|
||||
for _, entry in pairs(event_handlers[eventname] or {}) do
|
||||
if context == nil then
|
||||
context = wesnoth.current.event_context
|
||||
end
|
||||
v.h(context)
|
||||
entry.h(context)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function on_event(eventname, arg1, arg2)
|
||||
if string.match(eventname, ",") then
|
||||
for elem in utils.split(eventname or "") do
|
||||
|
@ -35,7 +41,7 @@ local function on_event(eventname, arg1, arg2)
|
|||
event_handlers[eventname] = event_handlers[eventname] or {}
|
||||
local eh = event_handlers[eventname]
|
||||
table.insert(eh, { h = handler, p = priority})
|
||||
-- sort it.
|
||||
-- prioritize last entry
|
||||
for i = #eh - 1, 1, -1 do
|
||||
if eh[i].p < eh[i + 1].p then
|
||||
eh[i], eh[i + 1] = eh[i + 1], eh[i]
|
||||
|
@ -43,4 +49,5 @@ local function on_event(eventname, arg1, arg2)
|
|||
end
|
||||
end
|
||||
|
||||
core_on_event = on_event
|
||||
return on_event
|
||||
|
|
Loading…
Add table
Reference in a new issue