Implement a new run system

This commit is contained in:
Rin 2021-08-20 18:44:01 +01:00
parent 923f3d3696
commit 49b39259e5
2 changed files with 86 additions and 4 deletions

View File

@ -1 +1 @@
version = "v0.3-beta6" version = "v0.3-beta6-nrs"

View File

@ -18,6 +18,13 @@ function love.load()
--config["das_last_key"] = false --config["das_last_key"] = false
--config["fullscreen"] = false --config["fullscreen"] = false
runsystem = {
drawfps = 0,
updatefps = 0,
updatedelta = 0,
showperformancestatistics = false
}
love.window.setMode(love.graphics.getWidth(), love.graphics.getHeight(), {resizable = true}); love.window.setMode(love.graphics.getWidth(), love.graphics.getHeight(), {resizable = true});
-- used for screenshots -- used for screenshots
@ -74,6 +81,14 @@ function love.draw()
love.graphics.scale(scale_factor) love.graphics.scale(scale_factor)
scene:render() scene:render()
if runsystem.showperformancestatistics then
love.graphics.setColor(1, 1, 1, 1)
love.graphics.print('u='..tostring(runsystem.updatefps)..
'\nd='..tostring(runsystem.drawfps)..
'\ndel='..tostring(runsystem.updatedelta), 0, 0)
end
love.graphics.pop() love.graphics.pop()
love.graphics.setCanvas() love.graphics.setCanvas()
@ -107,6 +122,9 @@ function love.keypressed(key, scancode)
end end
print("Saving screenshot as "..ss_name) print("Saving screenshot as "..ss_name)
GLOBAL_CANVAS:newImageData():encode("png", ss_name) GLOBAL_CANVAS:newImageData():encode("png", ss_name)
-- F9 toggles performance statistics for the new runsystem
elseif scancode == "f9" then
runsystem.showperformancestatistics = not runsystem.showperformancestatistics
-- function keys are reserved -- function keys are reserved
elseif string.match(scancode, "^f[1-9]$") or string.match(scancode, "^f[1-9][0-9]+$") then elseif string.match(scancode, "^f[1-9]$") or string.match(scancode, "^f[1-9][0-9]+$") then
return return
@ -274,6 +292,8 @@ end
local TARGET_FPS = 60 local TARGET_FPS = 60
--[[
-- OLD RUN CODE BELOW
function love.run() function love.run()
if love.load then love.load(love.arg.parseGameArguments(arg), arg) end if love.load then love.load(love.arg.parseGameArguments(arg), arg) end
@ -324,3 +344,65 @@ function love.run()
last_time = love.timer.getTime() last_time = love.timer.getTime()
end end
end end
]]
function love.run()
-- New Run system
-- by rin
-- aims to speedup the responsiveness of the game by
-- only updating 60 times per second, but letting
-- it poll as fast as it wants
if not love.timer then
error('new run system requires love.timer to function.')
end
if love.load then love.load(love.arg.parseGameArguments(arg), arg) end
if love.timer then love.timer.step() end
local tacc = 0
local start_time = love.timer.getTime()
return function()
if love.event then
love.event.pump()
for n, a, b, c, d, e, f in love.event.poll() do
if n == 'quit' then
if not love.quit or not love.quit() then
return a or 0
end
end
love.handlers[n](a, b, c, d, e, f)
end
end
if love.timer then
processBGMFadeout(love.timer.step())
end
local ut = love.timer.getTime()
runsystem.updatedelta = ut - start_time
runsystem.updatefps = 1 / (ut - start_time)
if scene and scene.update and love.timer then
local delta = ut - start_time
start_time = ut
tacc = tacc + delta
if tacc >= 1 / TARGET_FPS then
runsystem.drawfps = 1 / tacc
tacc = 0
scene:update()
if love.graphics and love.graphics.isActive() and love.draw then
love.graphics.origin()
love.graphics.clear(love.graphics.getBackgroundColor())
love.draw()
love.graphics.present()
end
end
end
end
end