diff options
author | the lemons <citrons@mondecitronne.com> | 2023-03-26 22:02:07 -0500 |
---|---|---|
committer | the lemons <citrons@mondecitronne.com> | 2023-03-26 22:02:07 -0500 |
commit | a966f45abf25dd486071a9552686e579de717417 (patch) | |
tree | 6993c1861e2dec9014d75d973c0d1901bcb5e52a | |
parent | 1e0c38bd730a5206160e07a8920aea3b95edcd0c (diff) |
fix pieces locking midair
-rw-r--r-- | game/init.lua | 11 | ||||
-rw-r--r-- | 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 |