Advertisement
Gerson_Linky

A GD-Script to make slimes grow in the board

Feb 21st, 2020
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.02 KB | None | 0 0
  1.  
  2. func generate_slime() -> void:
  3.    
  4.     var spaces_index: int
  5.     var slime_coords: Vector2
  6.     var piece_coords: Vector2
  7.     var piece: Node2D
  8.     var block: Node2D
  9.     var spaces_left: PoolVector2Array = slimmed_spaces
  10.     var unblocked_pieces: PoolVector2Array
  11.    
  12.     while spaces_left.size() > 0:
  13.        
  14.         spaces_index = randi() % spaces_left.size()
  15.         slime_coords = spaces_left[spaces_index]
  16.         spaces_left.remove(spaces_index)
  17.         unblocked_pieces = get_neighborn_unblocked_pieces_coords(slime_coords.x as int, slime_coords.y as int)
  18.        
  19.         if unblocked_pieces.size() > 0:
  20.            
  21.             piece_coords = unblocked_pieces[randi() % unblocked_pieces.size()]
  22.             piece = pieces[piece_coords.x][piece_coords.y]
  23.             piece.queue_free()
  24.             pieces[piece_coords.x][piece_coords.y] = null
  25.            
  26.             block = SLIME_BLOCK.instance()
  27.             block.position = grid_to_position(piece_coords.x as int, piece_coords.y as int)
  28.             slime_holder.add_child(block)
  29.             slimmed_blocks[piece_coords.x][piece_coords.y] = block
  30.             slimmed_spaces.append(piece_coords)
  31.             break
  32.  
  33.  
  34. func get_neighborn_unblocked_pieces_coords(column: int, row: int) -> PoolVector2Array:
  35.    
  36.     var neighborn_column: int
  37.     var neighborn_row: int
  38.     var extremes: PoolIntArray = [-1, 0, 1]
  39.     var unblocked_pieces := PoolVector2Array()
  40.    
  41.     for x in extremes:
  42.        
  43.         for y in extremes:
  44.            
  45.             if abs(x) == abs(y): # Use (x == 0 and y == 0) para permitir que os blocos das diagonais sejam selecionados.
  46.                 continue
  47.            
  48.             neighborn_column = column + x
  49.             neighborn_row = row + y
  50.            
  51.             if not is_in_grid(neighborn_column, neighborn_row) or is_blocked_space(neighborn_column, neighborn_row):
  52.                 continue
  53.            
  54.             unblocked_pieces.append(Vector2(neighborn_column, neighborn_row))
  55.    
  56.     return unblocked_pieces
  57.  
  58.  
  59. func is_blocked_space(x: int, y: int, blocked_spaces: Array = [empty_spaces, iced_spaces, locked_spaces, stonned_spaces, slimmed_spaces]) -> bool:
  60.    
  61.     var value: bool
  62.    
  63.     for spaces in blocked_spaces:
  64.        
  65.         if get_vector2_index_in_pool(Vector2(x, y), spaces) > -1:
  66.            
  67.             value = true
  68.             break
  69.    
  70.     return value
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement