-
Notifications
You must be signed in to change notification settings - Fork 3
/
global.gd
116 lines (94 loc) · 2.03 KB
/
global.gd
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
extends Node
var kdtree = load("res://Alg/KDTree.gd")
const rect:float = 30.0
var blue_elixir := 0
var red_elixir := 0
var skel = load("res://Character/Skeleton/Skeleton.tscn")
var arch = load("res://Character/Archer/Archer.tscn")
var nav:Navigation2D = null
var red_deck = [0, 1, 0, 1, 0, 1, 0, 1]
var blue_deck = [0, 1, 0, 1, 0, 1, 0, 1]
var card_map = {
0 : [skel, 3, 10, 200, "Skeleton"],
1 : [arch, 2, 90, 80, "Archer"]
}
var blue_card = -1
var red_card = -1
#debug information
var red = 0
var blue = 0
#menu information
var host = true
#name creation
var counter = 0
func ngen():
counter += 1
return str(counter)
func _ready():
return
var map_blue = {}
var map_red = {}
var blue_tree = null
var red_tree = null
func clear_map():
map_blue.clear()
map_red.clear()
blue_tree = null
red_tree = null
return
func build_tree():
blue_tree = kdtree.create(build_points(map_blue))
red_tree = kdtree.create(build_points(map_red))
return
func build_points(map):
var points = []
for i in map.keys():
var arr = map[i]
var avg = Vector2()
for i in arr:
avg += i.position
avg /= arr.size()
points.append([avg.x, avg.y, arr])
return points
func ikey(value):
return int(round(fkey(value)))
func fkey(value:float):
var hrect = rect * 0.5
var absx = abs(value) + hrect
var auxx = fmod(absx, rect)
return ((absx - auxx) / rect) * sign(value)
func index_blue(id:Node2D):
var k = key(id.position)
if not map_blue.has(k):
var arr = []
map_blue[k] = arr
arr.append(id)
else:
map_blue[k].append(id)
return
func key(pos):
var x = ikey(pos.x)
var y = ikey(pos.y)
var k = str(x,",",y)
return k
func index_red(id:Node2D):
var k = key(id.position)
if not map_red.has(k):
var arr = []
map_red[k] = arr
arr.append(id)
else:
map_red[k].append(id)
return
func get_nearest_blue(pos):
var near = kdtree.nearest(blue_tree, [pos.x, pos.y])
if near:
return near.median[2]
else:
return []
func get_nearest_red(pos):
var near = kdtree.nearest(red_tree, [pos.x, pos.y])
if near:
return near.median[2]
else:
return []