Grid.gd 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. set_cell(x, y, Tile.BRICK)
  24. living_cells[Vector2(x, y)] = current_row
  25. func damage_cell(tile_pos : Vector2):
  26. var cell_id = get_cellv(tile_pos)
  27. if cell_id != TileMap.INVALID_CELL and cell_id == Tile.BRICK:
  28. living_cells[tile_pos] -= 1
  29. if living_cells[tile_pos] <= 0:
  30. break_cell(tile_pos)
  31. func break_cell(tile_pos):
  32. living_cells.erase(tile_pos)
  33. set_cellv(tile_pos, -1)
  34. emit_signal("kace_broken")
  35. func move():
  36. current_row += 1
  37. position.y += cell_size.y
  38. func _ready():
  39. generate_and_move()
  40. func _on_Ball_kace_contact(contact_pos:Vector2):
  41. var local_position = to_local(contact_pos)
  42. var tile_pos = world_to_map(local_position)
  43. damage_cell(tile_pos)
  44. func _on_Launcher_is_full():
  45. generate_and_move()
  46. emit_signal("has_moved")