Grid.gd 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. extends TileMap
  2. signal kace_broken
  3. signal has_moved
  4. enum Tile {
  5. BRICK = 0,
  6. }
  7. enum State {
  8. DONE,
  9. MOVING,
  10. }
  11. var current_state = State.DONE
  12. var current_row = 1
  13. var living_cells = {}
  14. func generate_and_move():
  15. generate_row()
  16. current_state = State.MOVING
  17. move()
  18. current_state = State.DONE
  19. func generate_row():
  20. for x in range(10):
  21. generate_cell(x, -current_row)
  22. func generate_cell(x, y):
  23. if randi() % 2 : # 50% of generation
  24. build_brick(x, y)
  25. func build_brick(x, y):
  26. set_cell(x, y, Tile.BRICK)
  27. living_cells[Vector2(x, y)] = current_row * current_row
  28. func damage_cell(tile_pos : Vector2):
  29. var cell_id = get_cellv(tile_pos)
  30. if cell_id != TileMap.INVALID_CELL and cell_id == Tile.BRICK:
  31. living_cells[tile_pos] -= 1
  32. if living_cells[tile_pos] <= 0:
  33. break_cell(tile_pos)
  34. func break_cell(tile_pos):
  35. living_cells.erase(tile_pos)
  36. set_cellv(tile_pos, -1)
  37. emit_signal("kace_broken")
  38. func move():
  39. current_row += 1
  40. position.y += cell_size.y
  41. func _ready():
  42. randomize()
  43. generate_and_move()
  44. func _on_Ball_kace_contact(contact_pos:Vector2):
  45. var local_position = to_local(contact_pos)
  46. var tile_pos = world_to_map(local_position)
  47. damage_cell(tile_pos)
  48. func _on_Launcher_is_full():
  49. generate_and_move()
  50. emit_signal("has_moved")