Add block collision
This commit is contained in:
parent
d18fec84bf
commit
89fd29430e
31
GameBoard.gd
31
GameBoard.gd
@ -19,15 +19,33 @@ func get_random_shape():
|
|||||||
|
|
||||||
|
|
||||||
func update_board():
|
func update_board():
|
||||||
if active_shape.position.y == RASTER_SIZE * 10:
|
if can_active_move_down():
|
||||||
|
move_active_down()
|
||||||
|
else:
|
||||||
turn_active_into_static()
|
turn_active_into_static()
|
||||||
check_for_full_line()
|
check_for_full_line()
|
||||||
|
|
||||||
active_shape = get_random_shape()
|
active_shape = get_random_shape()
|
||||||
|
|
||||||
|
|
||||||
|
func move_active_down():
|
||||||
active_shape.position.y += RASTER_SIZE
|
active_shape.position.y += RASTER_SIZE
|
||||||
|
|
||||||
|
|
||||||
|
func can_active_move_down():
|
||||||
|
if active_shape.position.y >= RASTER_SIZE * 10:
|
||||||
|
return false
|
||||||
|
|
||||||
|
for block in active_shape.get_blocks():
|
||||||
|
var down_x = block.global_position.x
|
||||||
|
var down_y = block.global_position.y + RASTER_SIZE
|
||||||
|
|
||||||
|
if is_block_at_position(down_x, down_y):
|
||||||
|
return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
|
||||||
func turn_active_into_static():
|
func turn_active_into_static():
|
||||||
for block in active_shape.get_blocks():
|
for block in active_shape.get_blocks():
|
||||||
var global_shape_position = block.global_position
|
var global_shape_position = block.global_position
|
||||||
@ -72,12 +90,21 @@ func rotate_shape():
|
|||||||
|
|
||||||
|
|
||||||
func drop():
|
func drop():
|
||||||
active_shape.position.y = BOTTOM
|
while can_active_move_down():
|
||||||
|
move_active_down()
|
||||||
|
|
||||||
# Restart the timer to give full time for sliding the piece
|
# Restart the timer to give full time for sliding the piece
|
||||||
$GravityTimer.start()
|
$GravityTimer.start()
|
||||||
|
|
||||||
|
|
||||||
|
func is_block_at_position(pos_x, pos_y):
|
||||||
|
for block in $StaticBlocks.get_children():
|
||||||
|
if block.global_position.x == pos_x and block.global_position.y == pos_y:
|
||||||
|
return true
|
||||||
|
|
||||||
|
return false
|
||||||
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
if event.is_action_pressed("move_left"):
|
if event.is_action_pressed("move_left"):
|
||||||
move_left()
|
move_left()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user