]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/gamec/urrebot_nn_search.qc
Renamed remotely
[divverent/nexuiz.git] / data / qcsrc / gamec / urrebot_nn_search.qc
1 /* --- CheckNavNode ---\r
2 Evaluates travel cost and wether to continue search or not in this direction*/\r
3 \r
4 float(entity from, entity to, float lflag) CheckNavNode =\r
5 {\r
6         local float addcost;\r
7         local vector foundpoint;\r
8 \r
9         if (!to)\r
10                 return FALSE;\r
11 \r
12         if (!(lflag & LF_NOWALK))\r
13         if (!(lflag & LF_NOLINK))\r
14         {\r
15                 if (from.sflags & S_TELEPORT) // teleporter exception\r
16                         foundpoint = from.origin;\r
17                 else\r
18                         foundpoint = ClampPointToSpace(from.pointl, from, to);\r
19                 addcost = vlen(from.pointl - foundpoint);\r
20                 addcost = addcost + from.costl;\r
21                 if (addcost <= search_distance)\r
22                 if (to.costl > addcost)\r
23                 {\r
24                         to.lmark = TRUE;\r
25                         to.enemy = from;\r
26                         to.costl = addcost;\r
27                         to.pointl = foundpoint;\r
28                 }\r
29         }\r
30         return TRUE;\r
31 };\r
32 \r
33 /* --- MarkRoute ---\r
34 Searches as far as possible, and gives all navnodes a travel cost and shortest\r
35 travel point, which is then used for goal evaluation\r
36 \r
37 Starts by clearing all navnodes, and searches breadth first from the starting navnode*/\r
38 \r
39 void(float sdist) MarkRoute =\r
40 {\r
41         local entity t, start;\r
42         local float searching;\r
43 \r
44         start = FindCurrentNavNode(self.origin, self.mins, self.maxs);\r
45 \r
46         if(!start)\r
47                 return;\r
48 \r
49         search_distance = sdist;\r
50 \r
51         t = navnode_chain;\r
52         while (t)\r
53         {\r
54                 t.enemy = world;\r
55                 t.lmark = FALSE;\r
56                 t.costl = 10000000;\r
57                 t.pointl = '0 0 0';\r
58                 t = t.list;\r
59         }\r
60 \r
61         start.lmark = TRUE;\r
62         start.costl = 0;\r
63         start.pointl = self.origin;\r
64 \r
65         searching = TRUE;\r
66         while(searching)\r
67         {\r
68                 searching = FALSE;\r
69                 t = navnode_chain;\r
70                 while(t)\r
71                 {\r
72                         if(t.lmark)\r
73                         {\r
74                                 searching = TRUE;\r
75                                 t.lmark = FALSE;\r
76                                 if (CheckNavNode(t, t.link0, t.lflags0))\r
77                                 if (CheckNavNode(t, t.link1, t.lflags1))\r
78                                 if (CheckNavNode(t, t.link2, t.lflags2))\r
79                                 if (CheckNavNode(t, t.link3, t.lflags3))\r
80                                 if (CheckNavNode(t, t.link4, t.lflags4))\r
81                                 if (CheckNavNode(t, t.link5, t.lflags5))\r
82                                 if (CheckNavNode(t, t.link6, t.lflags6))\r
83                                 if (CheckNavNode(t, t.link7, t.lflags7))\r
84                                 if (CheckNavNode(t, t.link8, t.lflags8))\r
85                                 if (CheckNavNode(t, t.link9, t.lflags9))\r
86                                 if (CheckNavNode(t, t.link10, t.lflags10))\r
87                                 if (CheckNavNode(t, t.link11, t.lflags11))\r
88                                 if (CheckNavNode(t, t.link12, t.lflags12))\r
89                                 if (CheckNavNode(t, t.link13, t.lflags13))\r
90                                 if (CheckNavNode(t, t.link14, t.lflags14))\r
91                                 if (CheckNavNode(t, t.link15, t.lflags15))\r
92                                 if (CheckNavNode(t, t.link16, t.lflags16))\r
93                                 if (CheckNavNode(t, t.link17, t.lflags17))\r
94                                 if (CheckNavNode(t, t.link18, t.lflags18))\r
95                                 CheckNavNode(t, t.link19, t.lflags19);\r
96                         }\r
97                         t = t.list;\r
98                 }\r
99         }\r
100 };