Swarm/MovementBehaviour/Prefabs/MovementBehaviourMosquito.gd

46 lines
1.2 KiB
GDScript3
Raw Normal View History

2024-03-04 16:04:40 +01:00
extends MovementBehaviour
class_name MovementBehaviourMosquito
@export var max_movement_reach: int = 1
func simulate_move_recursive(start: Vector4i, max_num: int, map: HexGrid, visited_cells: Array[Vector4i] = []) -> Array[Vector4i]:
var visited = visited_cells.duplicate()
var possible: Array[Vector4i] = []
visited.append(start)
if max_num < 1:
return [start]
for neighbour in map.get_neighbours(start, true):
if neighbour in visited:
continue
# can reach... can_reach should only apply to our current level
#if not map.can_reach(start, neighbour):
# continue
visited.append(neighbour)
possible.append_array(simulate_move_recursive(neighbour, max_num - 1, map, visited))
return possible
func get_available_spaces(pos: Vector4i, map: HexGrid) -> Array[Vector4i]:
if pos.w == 0:
return []
var possible_places: Array[Vector4i] = []
possible_places = simulate_move_recursive(pos, max_movement_reach, map)
return possible_places
#var target_spaces: Array[Vector4i] = []
#
#for neighbour in map.get_neighbours(pos):
#if map.is_cell_empty(neighbour):
#continue
#
#target_spaces.append_array(map.get_tile(neighbour).resource.movement_behaviour.get_available_spaces(pos, map))
#
#return target_spaces