Swarm/MovementBehaviour/Prefabs/MovementBehaviourGrasshopper.gd

39 lines
1 KiB
GDScript3
Raw Normal View History

2024-03-04 16:04:40 +01:00
extends MovementBehaviour
class_name MovementBehaviourGrasshopper
const DIRS = [
Vector4i(0, -1, +1, 0), #UP
Vector4i(-1, 0, +1, 0), #UP_LEFT
Vector4i(-1, +1, 0, 0), #DOWN_LEFT
Vector4i(0, +1, -1, 0), #DOWN
Vector4i(+1, 0, -1, 0), #DOWN_RIGHT
Vector4i(+1, -1, 0, 0), #UP_RIGHT
]
func simulate_move_dirs(start: Vector4i, map: HexGrid) -> Array[Vector4i]:
var possible: Array[Vector4i] = []
for dir in DIRS:
possible.push_back(simulate_move_recursive(start, dir, map))
return possible
func simulate_move_recursive(start: Vector4i, dir: Vector4i, map: HexGrid) -> Vector4i:
var possible: Array[Vector4i] = []
var target: Vector4i = start + dir
if map.is_cell_empty(target):
return target
return simulate_move_recursive(target, dir, map)
func get_available_spaces(pos: Vector4i, map: HexGrid) -> Array[Vector4i]:
var possible_places: Array[Vector4i] = []
possible_places = simulate_move_dirs(pos, map)
for neighbour in map.get_empty_neighbours(pos):
possible_places.erase(neighbour)
return possible_places