extends GridMap const Tetromino = preload("res://Tetrominos/Tetromino.gd") const ExplodingLine = preload("res://ExplodingLine.tscn") const EMPTY_CELL = -1 const MINO = 0 export (int) var NB_LINES = 20 export (int) var NB_COLLUMNS = 10 var exploding_lines = [] func _ready(): for y in range(NB_LINES): exploding_lines.append(ExplodingLine.instance()) add_child(exploding_lines[y]) exploding_lines[y].translation = Vector3(NB_COLLUMNS/2, y, 1) func is_free_cell(position): return ( 0 <= position.x and position.x < NB_COLLUMNS and position.y >= 0 and get_cell_item(position.x, position.y, 0) == GridMap.INVALID_CELL_ITEM ) func possible_positions(initial_positions, movement): var position var test_positions = [] for i in range(4): position = initial_positions[i] + movement if is_free_cell(position): test_positions.append(position) if test_positions.size() == Tetromino.NB_MINOES: return test_positions else: return [] func lock(piece): for position in piece.positions(): set_cell_item(position.x, position.y, 0, MINO) func clear_lines(): var nb_minoes var lines_cleared = 0 for y in range(NB_LINES-1, -1, -1): nb_minoes = 0 for x in range(NB_COLLUMNS): if get_cell_item(x, y, 0) == MINO: nb_minoes += 1 if nb_minoes == NB_COLLUMNS: for y2 in range(y, NB_LINES+2): for x in range(NB_COLLUMNS): set_cell_item(x, y2, 0, get_cell_item(x, y2+1, 0)) lines_cleared += 1 exploding_lines[y].restart() return lines_cleared