Refactored to use Vector4i. Added Spider/Grasshopper. TODO: Ant
This commit is contained in:
parent
ff4aa93845
commit
11f8a71f52
19 changed files with 482 additions and 326 deletions
|
|
@ -1,2 +1,38 @@
|
|||
extends MovementBehaviour
|
||||
class_name MovementBehaviourAnt
|
||||
|
||||
# Ant uses a modified BFS? It's basically a supercharged spider with limitlesss movement range
|
||||
# Naive approach: BFS from all neighbours, don't go to already visited cells, check if can reach
|
||||
# Maybe better: Get al "placecable tiles" from the map, go over those. Might be faster but more complicated
|
||||
|
||||
func simulate_move_recursive(start: Vector4i, exclude: Array[Vector4i], map: HexGrid, visited_cells: Array[Vector4i] = []) -> Array[Vector4i]:
|
||||
var visited = visited_cells
|
||||
var possible: Array[Vector4i] = []
|
||||
|
||||
#if max_num < 1:
|
||||
# return [start]
|
||||
|
||||
for neighbour in map.get_empty_neighbours(start):
|
||||
if neighbour in visited:
|
||||
continue
|
||||
|
||||
if not map.can_reach(start, neighbour):
|
||||
continue
|
||||
|
||||
var same_neighbours = map.get_same_neighbours(start, neighbour)
|
||||
for e in exclude:
|
||||
same_neighbours.erase(e)
|
||||
|
||||
if same_neighbours.size() > 0:
|
||||
visited.append(neighbour)
|
||||
print("yay?")
|
||||
possible.append_array(simulate_move_recursive(neighbour, exclude, map, visited))
|
||||
|
||||
return possible
|
||||
|
||||
func get_available_spaces(pos: Vector4i, map: HexGrid) -> Array[Vector4i]:
|
||||
var possible_places: Array[Vector4i] = []
|
||||
|
||||
possible_places = simulate_move_recursive(pos, [pos], map)
|
||||
|
||||
return possible_places
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue