Grid.gd 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. export (float) var moving_time = 1.0
  13. onready var life_container = $LifeContainer
  14. onready var tween = $MoveDown
  15. var current_state = State.DONE
  16. var current_row = 1
  17. func generate_and_move():
  18. generate_row()
  19. current_state = State.MOVING
  20. start_moving()
  21. func generate_row():
  22. for x in range(10):
  23. generate_cell(x, -current_row)
  24. func generate_cell(x, y):
  25. if randi() % 2 : # 50% of generation
  26. build_brick(x, y)
  27. func build_brick(x, y):
  28. set_cell(x, y, Tile.BRICK)
  29. life_container.spawn_brick(x, y, current_row * current_row)
  30. func damage_cell(tile_pos : Vector2):
  31. var cell_id = get_cellv(tile_pos)
  32. if cell_id != TileMap.INVALID_CELL and cell_id == Tile.BRICK:
  33. emit_signal("kace_damaged")
  34. if life_container.may_die_by_taking_this(tile_pos, 1):
  35. break_cell(tile_pos)
  36. func break_cell(tile_pos):
  37. set_cellv(tile_pos, -1)
  38. emit_signal("kace_broken")
  39. func start_moving():
  40. current_row += 1
  41. tween.interpolate_property(self, "position", position,
  42. position + Vector2(0, cell_size.y), moving_time,
  43. Tween.TRANS_QUART, Tween.EASE_IN_OUT)
  44. tween.start()
  45. func finish_moving():
  46. current_state = State.DONE
  47. emit_signal("has_moved")
  48. func _ready():
  49. randomize()
  50. generate_and_move()
  51. func _on_Ball_kace_contact(contact_pos:Vector2):
  52. var local_position = to_local(contact_pos)
  53. var tile_pos = world_to_map(local_position)
  54. damage_cell(tile_pos)
  55. func _on_Launcher_is_full():
  56. generate_and_move()
  57. func _on_MoveDown_tween_all_completed():
  58. finish_moving()