Grid.gd 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. extends TileMap
  2. signal kace_broken
  3. signal kace_damaged
  4. signal has_moved
  5. enum Tile {
  6. BRICK = 0,
  7. }
  8. enum State {
  9. DONE,
  10. MOVING,
  11. }
  12. onready var life_container = $LifeContainer
  13. var current_state = State.DONE
  14. var current_row = 1
  15. func generate_and_move():
  16. generate_row()
  17. current_state = State.MOVING
  18. move()
  19. current_state = State.DONE
  20. func generate_row():
  21. for x in range(10):
  22. generate_cell(x, -current_row)
  23. func generate_cell(x, y):
  24. if randi() % 2 : # 50% of generation
  25. build_brick(x, y)
  26. func build_brick(x, y):
  27. set_cell(x, y, Tile.BRICK)
  28. life_container.spawn_brick(x, y, current_row * current_row)
  29. func damage_cell(tile_pos : Vector2):
  30. var cell_id = get_cellv(tile_pos)
  31. if cell_id != TileMap.INVALID_CELL and cell_id == Tile.BRICK:
  32. emit_signal("kace_damaged")
  33. if life_container.may_die_by_taking_this(tile_pos, 1):
  34. break_cell(tile_pos)
  35. func break_cell(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")