File: FlagHelpers.c

package info (click to toggle)
openclonk 8.1-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 169,520 kB
  • sloc: cpp: 180,479; ansic: 108,988; xml: 31,371; python: 1,223; php: 767; makefile: 145; sh: 101; javascript: 34
file content (49 lines) | stat: -rw-r--r-- 1,130 bytes parent folder | download | duplicates (6)
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
/**
	Global functions used in correlation to Objects.ocd\Libraries.ocd\Flag.ocd
	
	@author Zapper
*/

// Returns the flagpole that is currently holding ownership of a specific point in the landscape.
global func GetFlagpoleForPosition(int x, int y)
{
	if (GetType(LIB_FLAG_FlagList) != C4V_Array)
		return;
	
	var oldest = nil;
	var oldest_time = 0;
	
	for (var flag in LIB_FLAG_FlagList)
	{
		// Safety in case this gets called during destruction of a flag.
		if (!flag) 
			continue;
		if (!flag->HasCoordinatesInControlArea(x + GetX(), y + GetY()))
			continue;

		if (oldest == nil || flag->GetFlagConstructionTime() < oldest_time)
		{
			oldest = flag;
			oldest_time = flag->GetFlagConstructionTime();
		}
	}
	return oldest;
}

// Returns the current owner that controls a certain point with a flagpole or NO_OWNER.
global func GetOwnerOfPosition(int x, int y)
{
	var flag = GetFlagpoleForPosition(x, y);
	if (!flag) 
		return NO_OWNER;
	return flag->GetOwner();
}

// Redraws all flag radiuses.
global func RedrawAllFlagRadiuses()
{
	for (var flag in LIB_FLAG_FlagList)
		if (flag) 
			flag->RedrawFlagRadius();
	return;
}