openclonk/planet/System.ocg/Flag.c

46 lines
1.2 KiB
C

/*--
Global functions used in correlation to Objects.ocd\Libraries.ocd\Flag.ocd
Authors: Zapper
--*/
// returns the flagpole that is currently holding ownership of a specific point in the landscape
global func GetFlagpoleForPosition(
int x /* x position in local coordinates */
, int y /* y position in local coordinates */)
{
if(GetType(LibraryFlag_flag_list) != C4V_Array) return nil;
var oldest = nil, oldest_time = 0;
for(var flag in LibraryFlag_flag_list)
{
var d = Distance(GetX() + x, GetY() + y, flag->GetX(), flag->GetY());
if(d > flag->GetFlagRadius()) 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 /* x position in local coordinates */
, int y /* y position in local coordinates */)
{
var flag = GetFlagpoleForPosition(x, y);
if(!flag) return NO_OWNER;
return flag->GetOwner();
}
// redraws all flag radiuses
global func RedrawAllFlagRadiuses()
{
for(var f in LibraryFlag_flag_list)
f->RedrawFlagRadius();
}