Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func generate_slime() -> void:
- var spaces_index: int
- var slime_coords: Vector2
- var piece_coords: Vector2
- var piece: Node2D
- var block: Node2D
- var spaces_left: PoolVector2Array = slimmed_spaces
- var unblocked_pieces: PoolVector2Array
- while spaces_left.size() > 0:
- spaces_index = randi() % spaces_left.size()
- slime_coords = spaces_left[spaces_index]
- spaces_left.remove(spaces_index)
- unblocked_pieces = get_neighborn_unblocked_pieces_coords(slime_coords.x as int, slime_coords.y as int)
- if unblocked_pieces.size() > 0:
- piece_coords = unblocked_pieces[randi() % unblocked_pieces.size()]
- piece = pieces[piece_coords.x][piece_coords.y]
- piece.queue_free()
- pieces[piece_coords.x][piece_coords.y] = null
- block = SLIME_BLOCK.instance()
- block.position = grid_to_position(piece_coords.x as int, piece_coords.y as int)
- slime_holder.add_child(block)
- slimmed_blocks[piece_coords.x][piece_coords.y] = block
- slimmed_spaces.append(piece_coords)
- break
- func get_neighborn_unblocked_pieces_coords(column: int, row: int) -> PoolVector2Array:
- var neighborn_column: int
- var neighborn_row: int
- var extremes: PoolIntArray = [-1, 0, 1]
- var unblocked_pieces := PoolVector2Array()
- for x in extremes:
- for y in extremes:
- if abs(x) == abs(y): # Use (x == 0 and y == 0) para permitir que os blocos das diagonais sejam selecionados.
- continue
- neighborn_column = column + x
- neighborn_row = row + y
- if not is_in_grid(neighborn_column, neighborn_row) or is_blocked_space(neighborn_column, neighborn_row):
- continue
- unblocked_pieces.append(Vector2(neighborn_column, neighborn_row))
- return unblocked_pieces
- func is_blocked_space(x: int, y: int, blocked_spaces: Array = [empty_spaces, iced_spaces, locked_spaces, stonned_spaces, slimmed_spaces]) -> bool:
- var value: bool
- for spaces in blocked_spaces:
- if get_vector2_index_in_pool(Vector2(x, y), spaces) > -1:
- value = true
- break
- return value
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement