12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- extends TileMap
- signal kace_broken
- signal has_moved
- enum Tile {
- BRICK = 0,
- }
- enum State {
- DONE,
- MOVING,
- }
- var current_state = State.DONE
- var current_row = 1
- var living_cells = {}
- func generate_and_move():
- generate_row()
- current_state = State.MOVING
- move()
- current_state = State.DONE
- func generate_row():
- for x in range(10):
- generate_cell(x, -current_row)
- func generate_cell(x, y):
- if randi() % 2 : # 50% of generation
- build_brick(x, y)
- func build_brick(x, y):
- set_cell(x, y, Tile.BRICK)
- living_cells[Vector2(x, y)] = current_row * current_row
- func damage_cell(tile_pos : Vector2):
- var cell_id = get_cellv(tile_pos)
- if cell_id != TileMap.INVALID_CELL and cell_id == Tile.BRICK:
- living_cells[tile_pos] -= 1
- if living_cells[tile_pos] <= 0:
- break_cell(tile_pos)
- func break_cell(tile_pos):
- living_cells.erase(tile_pos)
- set_cellv(tile_pos, -1)
- emit_signal("kace_broken")
- func move():
- current_row += 1
- position.y += cell_size.y
- func _ready():
- randomize()
- generate_and_move()
- func _on_Ball_kace_contact(contact_pos:Vector2):
- var local_position = to_local(contact_pos)
- var tile_pos = world_to_map(local_position)
- damage_cell(tile_pos)
- func _on_Launcher_is_full():
- generate_and_move()
- emit_signal("has_moved")
|