32 lines
987 B
Lua
32 lines
987 B
Lua
local Sega = require 'tetris.rulesets.sega'
|
|
|
|
local ExtendedSega = Sega:extend()
|
|
|
|
ExtendedSega.name = "Extended Sega"
|
|
ExtendedSega.hash = "ExtendedSega"
|
|
|
|
function ExtendedSega:attemptWallkicks(piece, new_piece, rot_dir, grid)
|
|
if piece.shape == "I" or piece.shape == "O" then return end
|
|
|
|
local kick_dir = "none"
|
|
|
|
for _, offset in pairs(new_piece:getBlockOffsets()) do
|
|
if piece.position.x + offset.x < 0 then
|
|
kick_dir = "right"
|
|
break
|
|
elseif piece.position.x + offset.x >= grid.width then
|
|
kick_dir = "left"
|
|
break
|
|
end
|
|
end
|
|
|
|
if kick_dir == "none" then
|
|
return
|
|
elseif kick_dir == "right" and (grid:canPlacePiece(new_piece:withOffset({x=1, y=0}))) then
|
|
piece:setRelativeRotation(rot_dir):setOffset({x=1, y=0})
|
|
elseif kick_dir == "left" and (grid:canPlacePiece(new_piece:withOffset({x=-1, y=0}))) then
|
|
piece:setRelativeRotation(rot_dir):setOffset({x=-1, y=0})
|
|
end
|
|
end
|
|
|
|
return ExtendedSega |