cambridge-modpack/tetris/rulesets/extended_sega.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