extends Node3D class_name NavObstable @export var enabled: bool = false: set(val): if val != enabled: enabled = val update(enabled) @export var aabb: AABB = AABB(Vector3(-1,0,-1),Vector3(2,2,2)) @export var weight: float = 10.0 @export var make_solid: bool = false var updated_regions: Array[RID] = [] func _exit_tree() -> void: update(false) func update(enable: bool) -> void: if !is_node_ready(): await ready var global_aabb: AABB = global_transform * aabb #DebugDraw3D.draw_aabb(global_aabb, Color.DARK_CYAN, 5) for map_rid in NavigationServer3D.get_maps(): for region_rid in NavigationServer3D.map_get_regions(map_rid): var region_aabb: AABB = NavigationServer3D.region_get_bounds(region_rid).grow(0.1) #DebugDraw3D.draw_aabb(region_aabb, Color.YELLOW, 5) if global_aabb.intersects(region_aabb): var old_weight: float = NavigationServer3D.region_get_travel_cost(region_rid) var new_weight: float = (old_weight * weight) if enable else (old_weight / weight) NavigationServer3D.region_set_travel_cost(region_rid, new_weight) if make_solid: NavigationServer3D.region_set_enabled(region_rid, enable) DebugDraw3D.draw_aabb(region_aabb, Color.RED if enable else Color.GREEN, 5)