forked from Mirrors/openclonk
46 lines
1.2 KiB
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();
|
|
}
|