1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
extends Spatial
var m = SpatialMaterial.new()
var winddir = Vector3(1,0,0)
onready var pathfinder = get_node("PLAYERS/Player2")
var path = []
var map_rids
var client_id
var player_char
var players_info = {}
var WORLD_MAP_RID : RID
# Called when the node enters the scene tree for the first time.
func _ready():
map_rids = NavigationServer.get_maps()
for rid in map_rids:
NavigationServer.map_set_edge_connection_margin(rid,1.5)
m.flags_unshaded = true
m.flags_use_point_size = true
m.albedo_color = Color.white
#merge all nav meshes onto the main map
yield(get_tree().create_timer(1.0), "timeout")
WORLD_MAP_RID = get_world().get_navigation_map()
find_path()
remotesync func update_players_info(info):
players_info = info
remote func _call_on_server(function, arguments):
print('Remote server call: ' + function)
$Server.call(function, arguments)
func find_path():
var start_pos = $START.global_transform.origin
var end_pos = $END.global_transform.origin
var t_path = NavigationServer.map_get_path(WORLD_MAP_RID, start_pos, end_pos, true)
var path_end = t_path[len(t_path)-1]
#is path end near desired end
#if not, is the end point in an unreachable region?
for rid in map_rids:
print("map " + str(rid.get_id()))
for region_rid in NavigationServer.map_get_regions(rid):
print("region " + str(region_rid.get_id()))
if NavigationServer.region_owns_point(region_rid, end_pos):
print("owns target point")
if NavigationServer.region_owns_point(region_rid, path_end):
print("owns end point")
print( (end_pos - t_path[len(t_path)-1]).length() )
draw_path(t_path)
pass
func draw_path(path_array):
var im = get_node("Draw")
im.set_material_override(m)
im.clear()
im.begin(Mesh.PRIMITIVE_POINTS, null)
im.add_vertex(path_array[0])
im.add_vertex(path_array[path_array.size() - 1])
im.end()
im.begin(Mesh.PRIMITIVE_LINE_STRIP, null)
for x in path_array:
im.add_vertex(x)
im.end()
func get_client_id() -> int:
return client_id
|