move flag coordinate in area check into flag's script

This allows also for using rectangular ownership shapes, which can be useful for blocking areas.
shapetextures
Maikel de Vries 2015-09-14 20:57:57 +02:00
parent c925351b15
commit 2dde6fd600
3 changed files with 13 additions and 15 deletions

View File

@ -95,7 +95,7 @@ private func FxIntAreaMonteCarloTimer(object target, proplist effect, int time)
{ {
var x = Random(LandscapeWidth()); var x = Random(LandscapeWidth());
var y = Random(LandscapeHeight()); var y = Random(LandscapeHeight());
if (CoveredByFlag(x, y)) if (GetFlagpoleForPosition(x, y))
rate++; rate++;
} }
var promille = 1000 * rate / cnt; var promille = 1000 * rate / cnt;
@ -107,15 +107,6 @@ private func FxIntAreaMonteCarloTimer(object target, proplist effect, int time)
return 1; return 1;
} }
// Returns whether the point (x,y) is covered by a flagpole.
private func CoveredByFlag(int x, int y)
{
for (var flag in FindObjects(Find_Func("IsFlagpole"), Sort_Distance(x - GetX(), y - GetY())))
if (Distance(flag->GetX(), flag->GetY(), x, y) < flag->GetFlagRadius())
return true;
return false;
}
// Return the description of this goal. // Return the description of this goal.
public func GetDescription(int plr) public func GetDescription(int plr)
{ {

View File

@ -18,10 +18,9 @@ global func GetFlagpoleForPosition(int x, int y)
// Safety in case this gets called during destruction of a flag. // Safety in case this gets called during destruction of a flag.
if (!flag) if (!flag)
continue; continue;
var d = Distance(GetX() + x, GetY() + y, flag->GetX(), flag->GetY()); if (!flag->HasCoordinatesInControlArea(x + GetX(), y + GetY()))
if (d > flag->GetFlagRadius()) continue;
continue;
if (oldest == nil || flag->GetFlagConstructionTime() < oldest_time) if (oldest == nil || flag->GetFlagConstructionTime() < oldest_time)
{ {
oldest = flag; oldest = flag;

View File

@ -111,7 +111,7 @@ public func RedrawFlagRadius()
{ {
if (other_flag) if (other_flag)
{ {
if (Distance(GetX() + x, GetY() + y, other_flag->GetX(), other_flag->GetY()) <= other_flag->GetFlagRadius()) if (other_flag->HasCoordinatesInControlArea(GetX() + x, GetY() + y))
{ {
// For equal construction times, increase this construction time. // For equal construction times, increase this construction time.
// TODO: this feels rather hacky?! // TODO: this feels rather hacky?!
@ -165,6 +165,14 @@ public func RedrawFlagRadius()
return; return;
} }
// Callback from the global function that determines the ownership for a position.
// The coordinates x and y are global.
public func HasCoordinatesInControlArea(int x, int y)
{
var d = Distance(x, y, GetX(), GetY());
return d <= GetFlagRadius();
}
// Removes all the ownership markers for this flag. // Removes all the ownership markers for this flag.
private func ClearFlagMarkers() private func ClearFlagMarkers()
{ {