godot-navigation-tests/test.gd

72 lines
2 KiB
GDScript3
Raw Permalink Normal View History

2024-02-05 14:40:47 -06:00
extends Node2D
const movement_speed = 100
var single = NavigationPolygon.new()
var double = NavigationPolygon.new()
func _ready():
single.agent_radius = 0.75
double.agent_radius = 1.5
var root_node: Node3D = get_node("NavigationMeshBakingRootNode")
NavigationServer2D.parse_source_geometry_data(single, $nav.navigation_polygon, root_node)
for s in [single, double]:
NavigationServer2D.bake_from_source_geometry_data(single, $nav.navigation_polygon)
NavigationServer2D.bake_from_source_geometry_data(double, $nav.navigation_polygon)
var single_map: RID = NavigationServer2D.map_create()
var double_map: RID = NavigationServer2D.map_create()
NavigationServer2D.map_set_active(single_map, true)
NavigationServer2D.map_set_active(double_map, true)
var single_reg: RID = NavigationServer2D.region_create()
var double_reg: RID = NavigationServer2D.region_create()
NavigationServer2D.region_set_map(single_reg, single_map)
NavigationServer2D.region_set_map(double_reg, double_map)
NavigationServer3D.region_set_navigation_mesh(single_reg, single)
NavigationServer3D.region_set_navigation_mesh(double_reg, double)
$small/nav.path_desired_distance = 4.0
$small/nav.target_desired_distance = 4.0
$large/nav.path_desired_distance = 4.0
$large/nav.target_desired_distance = 4.0
call_deferred("actor_setup")
func actor_setup():
print("actor_setup awaiting...")
await get_tree().physics_frame
print("actor_setup finished awaiting")
set_movement_target($target.position)
func set_movement_target(p):
print("target: ", p)
$small/nav.target_position = p
$large/nav.target_position = p
func _process(delta):
pass
func do_path(a: CharacterBody2D, map: NavigationPolygon):
var n = a.get_node("nav")
if n.is_navigation_finished():
return
var p: Vector2 = a.global_position
var path = NavigationServer2D.map_get_path(map, p, $target.global_position, true)
print(path)
a.velocity = p.direction_to(path[0]) * movement_speed
a.move_and_slide()
print(path[0])
func _physics_process(delta):
do_path($small, single)
do_path($large, double)