summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthe lemons <citrons@mondecitronne.com>2023-03-26 22:02:07 -0500
committerthe lemons <citrons@mondecitronne.com>2023-03-26 22:02:07 -0500
commita966f45abf25dd486071a9552686e579de717417 (patch)
tree6993c1861e2dec9014d75d973c0d1901bcb5e52a
parent1e0c38bd730a5206160e07a8920aea3b95edcd0c (diff)
fix pieces locking midair
-rw-r--r--game/init.lua11
-rw-r--r--game/polyomino.lua18
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