Skip to content

Commit 9a6a922

Browse files
+Triggers, -RandomElement, load .Hades earlier
1 parent 67c36ce commit 9a6a922

File tree

4 files changed

+173
-119
lines changed

4 files changed

+173
-119
lines changed

ModUtil.Hades.lua

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
ModUtil.Mod.Register( "Hades", ModUtil )
32

43
ModUtil.Table.Merge( ModUtil.Hades, {
@@ -391,19 +390,79 @@ function ModUtil.Hades.CloseMenuYesNo( screen, button )
391390
ModUtil.Hades.CloseMenu( screen, button )
392391
end
393392

394-
-- Misc
393+
-- Trigger Proxy
394+
395+
local triggers = { }
396+
397+
local function isTrigger( name )
398+
if name:sub( 1, 2 ) ~= "On" then return false end
399+
local func = _G[ name ]
400+
return type( func ) == "function" and debug.getinfo( func, "S" ).what == "C"
401+
end
402+
403+
local proxyTriggerMeta = {
404+
__index = function( s, k )
405+
if type( k ) == "string" then
406+
local w, n = pcall( tonumber, k )
407+
if w then k = n end
408+
end
409+
return rawget( s, k )
410+
end,
411+
__newindex = function( s, k, v )
412+
if type( k ) == "string" then
413+
local w, n = pcall( tonumber, k )
414+
if w then k = n end
415+
end
416+
rawset( s, k, v )
417+
end
418+
}
395419

396-
function ModUtil.Hades.RandomElement( tableArg, rng )
397-
local Collapsed = CollapseTable( tableArg )
398-
return Collapsed[ RandomInt( 1, #Collapsed, rng ) ]
420+
local function proxyTriggerCallback( indexArray, func, args )
421+
local t = ModUtil.IndexArray.Get( triggers, indexArray ) or setmetatable( { }, proxyTriggerMeta )
422+
local n = #t + 1
423+
local f = ModUtil.Override( func, function( ... )
424+
return t[ n ].Call( ... )
425+
end )
426+
table.insert( t, { Args = args, Call = func } )
427+
ModUtil.IndexArray.Set( triggers, indexArray, t )
428+
return f
429+
end
430+
431+
local function proxyTrigger( name )
432+
ModUtil.IndexArray.Wrap( _G, { name }, function( base, args, ... )
433+
local cargs = ModUtil.Table.Copy( args )
434+
local func = table.remove( cargs )
435+
local file = debug.getinfo( 2, "S" ).source
436+
args[ #args ] = proxyTriggerCallback( { name, file }, func, cargs )
437+
return base( args, ... )
438+
end )
439+
end
440+
441+
setmetatable( triggers, {
442+
__newindex = function( s, k, v )
443+
if v == true then
444+
proxyTrigger( k )
445+
v = s[ k ] or { }
446+
end
447+
rawset( s, k, v )
448+
end
449+
} )
450+
ModUtil.Hades.Triggers = triggers
451+
ModUtil.Identifiers.Inverse[ triggers ] = "ModUtil.Hades.Triggers"
452+
453+
for k in pairs( _G ) do
454+
if isTrigger( k ) then
455+
proxyTrigger( k )
456+
end
399457
end
400458

401459
-- Internal Access
402460

403461
do
404462
local ups = ModUtil.UpValues( function( )
405463
return menuScreens, closeFuncs, forceClosed, printStack,
406-
orderPrintStack, closePrintStack, printDisplay
464+
orderPrintStack, closePrintStack, printDisplay,
465+
triggers, isTrigger, proxyTrigger, proxyTriggerMeta, proxyTriggerCallback
407466
end )
408467
ModUtil.Entangled.Union.Add( ModUtil.Internal, ups )
409468
end

ModUtil.Main.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,8 @@ ModUtil.Metatables.Mod = {
233233
end
234234
}
235235

236+
-- Load Trigger Queue
237+
236238
local funcsToLoad = { }
237239

238240
local function loadFuncs( triggerArgs )

0 commit comments

Comments
 (0)