From a75f34a1fc91fa90340b51004e55c656ba06ca0c Mon Sep 17 00:00:00 2001 From: the lemons Date: Sun, 26 Mar 2023 22:46:28 -0500 Subject: drop next piece immediately --- game/init.lua | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/game/init.lua b/game/init.lua index 1dba8b8..9872a4c 100644 --- a/game/init.lua +++ b/game/init.lua @@ -87,8 +87,8 @@ end function M:place_piece() if not self.piece:can_move(-1, 0) then self.piece:place() - self.piece = nil evloop.queue "game.lock_cancel" + self:next_piece() return true else return false @@ -103,7 +103,7 @@ end function M:lock_loop() local function loop() - assert(evloop.poll "game.lock" == "game.lock") + evloop.poll "game.lock" local e = evloop.poll(self.lock_delay, "game.lock_cancel") if e then return loop() @@ -119,20 +119,19 @@ function M:gravity_loop() local function loop() evloop.sleep(self.gravity_delay) self.field:remove_cleared() - if not self.piece then - assert(self:next_piece(), "you lose!") - return loop() - end - if not self.piece:move(-1, 0) then + if self.piece and not self.piece:move(-1, 0) then evloop.queue "game.lock" end - return loop() + if self.piece then + return loop() + end end return loop end function M:loop() local function loop() + self:next_piece() evloop.await_any( self:input_loop(), self:gravity_loop(), -- cgit v1.2.3 From e04f25ecee84392a9bbcb27f82188c3722afa486 Mon Sep 17 00:00:00 2001 From: the lemons Date: Sun, 26 Mar 2023 23:47:05 -0500 Subject: evloop pausing, debug sleep --- evloop.lua | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/evloop.lua b/evloop.lua index dec8bd1..302a29a 100644 --- a/evloop.lua +++ b/evloop.lua @@ -71,37 +71,55 @@ function M.await_any(...) end end +function M.debug_sleep(secs) + M.paused = true + local t = 0 + while t < secs do + local _, dt = M.poll "debug.update" + t = t + dt + end + M.paused = false +end + +local function poll_love() + love.event.pump() + local es = love.event.poll() + while true do + local e = {es()} + if not e[1] then break end + if love.handlers[e[1]] then + love.handlers[e[1]](unpack(e, 2)) + end + table.insert(queue, e) + end +end + function M.mainloop(start) local main = create_task(function() start() end) return function() - love.event.pump() - local es = love.event.poll() - while true do - local e = {es()} - if not e[1] then break end + if not M.paused then poll_love() end + + local q = queue + queue = {} + for i, e in ipairs(q) do if e[1] == "quit" then if not love.quit or not love.quit() then return e[2] or 0 end end - if love.handlers[e[1]] then - love.handlers[e[1]](unpack(e, 2)) - end - table.insert(queue, e) - end - - local q = queue - queue = {} - for i, e in ipairs(q) do if not resume_task(main, e) then return 0 end end local dt = love.timer.step() - if not resume_task(main, {"update", dt}) then return 0 end + if not resume_task( + main, {M.paused and "debug.update" or "update", dt}) then + return 0 + end + ::graphics:: if love.graphics and love.graphics.isActive() then love.graphics.clear(love.graphics.getBackgroundColor()) require "viewport".origin() -- cgit v1.2.3