1 /**
2 	FindObject.c
3 	Wrappers for convenient calls to the FindObject family.
4 
5 	@author
6 */
7 
8 
9 /*-- Find functions --*/
10 
11 // documented in /docs/sdk/script/fn
Find_Not(cond)12 global func Find_Not(cond)
13 {
14 	return [C4FO_Not, cond];
15 }
16 
17 // documented in /docs/sdk/script/fn
Find_And(...)18 global func Find_And(...)
19 {
20 	var result = [C4FO_And];
21 	for (var i = 0; Par(i); i++)
22 		result[i + 1] = Par(i);
23 	return result;
24 }
25 
26 // documented in /docs/sdk/script/fn
Find_Or(...)27 global func Find_Or(...)
28 {
29 	var result = [C4FO_Or];
30 	for (var i = 0; Par(i); i++)
31 		result[i + 1] = Par(i);
32 	return result;
33 }
34 
35 // documented in /docs/sdk/script/fn
Find_Exclude(object obj)36 global func Find_Exclude(object obj)
37 {
38 	if (!obj)
39 		obj = this;
40 	if (!obj)
41 		return;
42 	return [C4FO_Exclude, obj];
43 }
44 
45 // documented in /docs/sdk/script/fn
Find_ID(id def)46 global func Find_ID(id def)
47 {
48 	return [C4FO_ID, def];
49 }
50 
51 // documented in /docs/sdk/script/fn
Find_InRect(int x,int y,int wdt,int hgt)52 global func Find_InRect(int x, int y, int wdt, int hgt)
53 {
54 	return [C4FO_InRect, x, y, wdt, hgt];
55 }
56 
57 // documented in /docs/sdk/script/fn
Find_AtPoint(int x,int y)58 global func Find_AtPoint(int x, int y)
59 {
60 	return [C4FO_AtPoint, x, y];
61 }
62 
Find_AtRect(int x,int y,int wdt,int hgt)63 global func Find_AtRect(int x, int y, int wdt, int hgt)
64 {
65 	return [C4FO_AtRect, x, y, wdt, hgt];
66 }
67 
68 // documented in /docs/sdk/script/fn
Find_OnLine(int x,int y,int x2,int y2)69 global func Find_OnLine(int x, int y, int x2, int y2)
70 {
71 	return [C4FO_OnLine, x, y, x2, y2];
72 }
73 
74 // documented in /docs/sdk/script/fn
Find_Distance(int r,int x,int y)75 global func Find_Distance(int r, int x, int y)
76 {
77 	return [C4FO_Distance, x, y, r];
78 }
79 
80 // documented in /docs/sdk/script/fn
Find_Cone(int r,int cone_angle,int cone_width,int x,int y,int prec_angle)81 global func Find_Cone(int r, int cone_angle, int cone_width, int x, int y, int prec_angle)
82 {
83 	if (!prec_angle)
84 		prec_angle = 1;
85 	return [C4FO_Cone, x, y, r, cone_angle, cone_width, prec_angle];
86 }
87 
88 // documented in /docs/sdk/script/fn
Find_OCF(int ocf)89 global func Find_OCF(int ocf)
90 {
91 	return [C4FO_OCF, ocf];
92 }
93 
94 // documented in /docs/sdk/script/fn
Find_Category(int category)95 global func Find_Category(int category)
96 {
97 	return [C4FO_Category, category];
98 }
99 
100 // documented in /docs/sdk/script/fn
Find_Action(string action)101 global func Find_Action(string action)
102 {
103 	return [C4FO_Action, action];
104 }
105 
106 // documented in /docs/sdk/script/fn
Find_ActionTarget(object target)107 global func Find_ActionTarget(object target)
108 {
109 	return [C4FO_ActionTarget, target, 0];
110 }
111 
112 // documented in /docs/sdk/script/fn
Find_ActionTarget2(object target)113 global func Find_ActionTarget2(object target)
114 {
115 	return [C4FO_ActionTarget, target, 1];
116 }
117 
118 // documented in /docs/sdk/script/fn
Find_ActionTargets(object target)119 global func Find_ActionTargets(object target)
120 {
121 	return [C4FO_Or, Find_ActionTarget(target), Find_ActionTarget2(target)];
122 }
123 
Find_Procedure(string procedure)124 global func Find_Procedure(string procedure)
125 {
126 	return [C4FO_Procedure, procedure];
127 }
128 
129 // documented in /docs/sdk/script/fn
Find_Container(object container)130 global func Find_Container(object container)
131 {
132 	return [C4FO_Container, container];
133 }
134 
135 // documented in /docs/sdk/script/fn
Find_NoContainer()136 global func Find_NoContainer()
137 {
138 	return [C4FO_Container, nil];
139 }
140 
141 // documented in /docs/sdk/script/fn
Find_AnyContainer()142 global func Find_AnyContainer()
143 {
144 	return [C4FO_AnyContainer];
145 }
146 
147 // documented in /docs/sdk/script/fn
Find_Owner(int owner)148 global func Find_Owner(int owner)
149 {
150 	return [C4FO_Owner, owner];
151 }
152 
Find_Controller(int controller)153 global func Find_Controller(int controller)
154 {
155 	return [C4FO_Controller, controller];
156 }
157 
158 // documented in /docs/sdk/script/fn
Find_Hostile(int plr)159 global func Find_Hostile(int plr)
160 {
161 	var p = [C4FO_Or];
162 	for (var i = -1; i < GetPlayerCount(); i++)
163 		if (Hostile(plr, GetPlayerByIndex(i)))
164 			p[GetLength(p)] = Find_Owner(GetPlayerByIndex(i));
165 	return p;
166 }
167 
168 /*
169 Similar to Find_Hostile, but defaults to treating all players as hostile when plr = NO_OWNER.
170 */
Find_AnimalHostile(int plr)171 global func Find_AnimalHostile(int plr)
172 {
173 	if (plr == NO_OWNER)
174 		return Find_Not(Find_Owner(NO_OWNER));
175 	return Find_Or(Find_Owner(NO_OWNER), Find_Hostile(plr));
176 }
177 
178 // documented in /docs/sdk/script/fn
Find_Allied(int plr)179 global func Find_Allied(int plr)
180 {
181 	var p = [C4FO_Or];
182 	for (var i = -1; i < GetPlayerCount(); i++)
183 		if (!Hostile(plr, GetPlayerByIndex(i)))
184 			p[GetLength(p)] = Find_Owner(GetPlayerByIndex(i));
185 	return p;
186 }
187 
188 // documented in /docs/sdk/script/fn
Find_Team(int team)189 global func Find_Team(int team)
190 {
191 	var p = [C4FO_Or];
192 	for (var i = -1; i < GetPlayerCount(); i++)
193 		if (GetPlayerTeam(GetPlayerByIndex(i)) == team)
194 			p[GetLength(p)] = Find_Owner(GetPlayerByIndex(i));
195 	return p;
196 }
197 
198 // documented in /docs/sdk/script/fn
Find_Func(string f,p1,p2,p3,p4,p5,p6,p7,p8,p9)199 global func Find_Func(string f, p1, p2, p3, p4, p5, p6, p7, p8, p9)
200 {
201 	return [C4FO_Func, f, p1, p2, p3, p4, p5, p6, p7, p8, p9];
202 }
203 
204 // documented in /docs/sdk/script/fn
Find_Layer(object layer)205 global func Find_Layer(object layer)
206 {
207 	return [C4FO_Layer, layer];
208 }
209 
210 // documented in /docs/sdk/script/fn
Find_InArray(array a)211 global func Find_InArray(array a)
212 {
213 	return [C4FO_InArray, a];
214 }
215 
216 // documented in /docs/sdk/script/fn
Find_Property(string s)217 global func Find_Property(string s)
218 {
219 	return [C4FO_Property, s];
220 }
221 
222 // documented in /docs/sdk/script/fn
Find_AnyLayer()223 global func Find_AnyLayer()
224 {
225 	return [C4FO_AnyLayer];
226 }
227 
Find_PathFree(object to_obj)228 global func Find_PathFree(object to_obj)
229 {
230 	if (!to_obj)
231 		to_obj = this;
232 	return [C4FO_Func, "Find_PathFreeCheck", to_obj];
233 }
234 
Find_PathFreeCheck(object to_obj)235 global func Find_PathFreeCheck(object to_obj)
236 {
237 	return PathFree(GetX(), GetY(), to_obj->GetX(), to_obj->GetY());
238 }
239 
240 /*-- Sort functions --*/
241 
242 // documented in /docs/sdk/script/fn
Sort_Reverse(array sort)243 global func Sort_Reverse(array sort)
244 {
245 	return [C4SO_Reverse, sort];
246 }
247 
248 // documented in /docs/sdk/script/fn
Sort_Multiple(...)249 global func Sort_Multiple(...)
250 {
251 	var result = [C4SO_Multiple];
252 	for (var i = 0; Par(i); i++)
253 		result[i + 1] = Par(i);
254 	return result;
255 }
256 
257 // documented in /docs/sdk/script/fn
Sort_Distance(int x,int y)258 global func Sort_Distance(int x, int y)
259 {
260 	return [C4SO_Distance, x, y];
261 }
262 
263 // documented in /docs/sdk/script/fn
Sort_Random()264 global func Sort_Random()
265 {
266 	return [C4SO_Random];
267 }
268 
269 // documented in /docs/sdk/script/fn
Sort_Speed()270 global func Sort_Speed()
271 {
272 	return [C4SO_Speed];
273 }
274 
275 // documented in /docs/sdk/script/fn
Sort_Mass()276 global func Sort_Mass()
277 {
278 	return [C4SO_Mass];
279 }
280 
281 // documented in /docs/sdk/script/fn
Sort_Value()282 global func Sort_Value()
283 {
284 	return [C4SO_Value];
285 }
286 
287 // documented in /docs/sdk/script/fn
Sort_Func(string f,p1,p2,p3,p4,p5,p6,p7,p8,p9)288 global func Sort_Func(string f, p1, p2, p3, p4, p5, p6, p7, p8, p9)
289 {
290 	return [C4SO_Func, f, p1, p2, p3, p4, p5, p6, p7, p8, p9];
291 }
292