summaryrefslogtreecommitdiff
path: root/godot/scripts/World.gd
blob: 01df1b51e0928c2216e3639944bec3cc9a06c3e4 (plain)
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