From a966f45abf25dd486071a9552686e579de717417 Mon Sep 17 00:00:00 2001 From: the lemons Date: Sun, 26 Mar 2023 22:02:07 -0500 Subject: fix pieces locking midair --- game/init.lua | 11 ++++++++--- game/polyomino.lua | 18 ++++++++++++++---- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/game/init.lua b/game/init.lua index c5925b1..1dba8b8 100644 --- a/game/init.lua +++ b/game/init.lua @@ -85,9 +85,14 @@ function M:input_loop() end function M:place_piece() - self.piece:place() - self.piece = nil - evloop.queue "game.lock_cancel" + if not self.piece:can_move(-1, 0) then + self.piece:place() + self.piece = nil + evloop.queue "game.lock_cancel" + return true + else + return false + end end function M:next_piece() diff --git a/game/polyomino.lua b/game/polyomino.lua index 8696277..9d9a295 100644 --- a/game/polyomino.lua +++ b/game/polyomino.lua @@ -96,6 +96,17 @@ function piece:can_occupy(line, column, rotation) return true end +function piece:can_move(lines, columns, rotation) + local rotation = self.rotation + (rotation or 0) + if rotation > 4 then + rotation = 1 + elseif rotation < 1 then + rotation = 4 + end + local line, column = self.line + lines or 0, self.column + columns or 0 + return self:can_occupy(line, column, rotation) +end + function piece:place() if self.placed then return @@ -126,10 +137,9 @@ function piece:rotate(ccw) end function piece:move(lines, columns) - local line, column = self.line + lines, self.column + columns - if self:can_occupy(line, column) then - self.line = line - self.column = column + if self:can_move(lines, columns) then + self.line = self.line + lines or 0 + self.column = self.column + columns or 0 return true end return false -- cgit v1.2.3