Compare commits

...

2 Commits

1 changed files with 34 additions and 10 deletions

View File

@ -248,6 +248,7 @@
GAMESTATE:ApplyModifiers('clearall') GAMESTATE:ApplyModifiers('clearall')
local drawfunctionArguments = {}
local specialActorFrames = {} -- ones defined specifically; here for drawfunction jank local specialActorFrames = {} -- ones defined specifically; here for drawfunction jank
function setDrawFunction(frame, func) function setDrawFunction(frame, func)
@ -261,19 +262,29 @@
a:Draw() a:Draw()
end end
end end
func() local args = drawfunctionArguments[frame]
if args then
func(unpack(args))
else
func()
end
end) end)
end end
function setShader(actor, shader) function setShader(actor, shader)
if not shader.__raw then error('uranium: cannot set shader during module loadtime! put this in uranium.init or actor:addcommand(\'Init\', ...)', 2) end if not shader.__raw then
if not actor.__raw then error('uranium: cannot set shader while the actor hasn\'t been loaded!', 2) end function uranium.init() setShader(actor, shader) end
actor:SetShader(shader.__raw) else
actor:SetShader(shader.__raw)
end
end end
function setShaderfuck(shader) function setShaderfuck(shader)
if not shader.__raw then error('uranium: cannot set shader during module loadtime! put this in uranium.init or actor:addcommand(\'Init\', ...)', 2) end if not shader.__raw then
DISPLAY:ShaderFuck(shader.__raw) function uranium.init() setShaderfuck(shader) end
else
DISPLAY:ShaderFuck(shader.__raw)
end
end end
function clearShaderfuck() function clearShaderfuck()
@ -401,6 +412,13 @@
end end
end end
local actorMethodOverrides = {
Draw = function(self, ...)
drawfunctionArguments[self] = arg
self.__raw:Draw()
end
}
local function createProxyActor(name) local function createProxyActor(name)
local queue = {} local queue = {}
local initCommands = {} local initCommands = {}
@ -413,11 +431,15 @@
return lockedActor return lockedActor
end end
if lockedActor then if lockedActor then
local val = lockedActor[key] if actorMethodOverrides[key] then
if type(val) == 'function' then return actorMethodOverrides[key]
return patchFunction(val, lockedActor) else
local val = lockedActor[key]
if type(val) == 'function' then
return patchFunction(val, lockedActor)
end
return val
end end
return val
end end
if key == '__queue' then if key == '__queue' then
return queueRepresentation return queueRepresentation
@ -727,6 +749,8 @@
uranium:call('ready') uranium:call('ready')
end end
drawfunctionArguments = {}
for _, q in ipairs(globalQueue) do for _, q in ipairs(globalQueue) do
local actor = q[1] local actor = q[1]
local v = q[2] local v = q[2]