|
|
|
@ -239,6 +239,27 @@ uint Station::GetCatchmentRadius() const
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines catchment rectangle of this station
|
|
|
|
|
* @return clamped catchment rectangle
|
|
|
|
|
*/
|
|
|
|
|
Rect Station::GetCatchmentRect() const
|
|
|
|
|
{
|
|
|
|
|
assert(!this->rect.IsEmpty());
|
|
|
|
|
|
|
|
|
|
/* Compute acceptance rectangle */
|
|
|
|
|
int catchment_radius = this->GetCatchmentRadius();
|
|
|
|
|
|
|
|
|
|
Rect ret = {
|
|
|
|
|
max<int>(this->rect.left - catchment_radius, 0),
|
|
|
|
|
max<int>(this->rect.top - catchment_radius, 0),
|
|
|
|
|
min<int>(this->rect.right + catchment_radius, MapMaxX()),
|
|
|
|
|
min<int>(this->rect.bottom + catchment_radius, MapMaxY())
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Rect and pointer to IndustryVector */
|
|
|
|
|
struct RectAndIndustryVector {
|
|
|
|
|
Rect rect;
|
|
|
|
@ -290,16 +311,8 @@ void Station::RecomputeIndustriesNear()
|
|
|
|
|
this->industries_near.Clear();
|
|
|
|
|
if (this->rect.IsEmpty()) return;
|
|
|
|
|
|
|
|
|
|
/* Compute acceptance rectangle */
|
|
|
|
|
int catchment_radius = this->GetCatchmentRadius();
|
|
|
|
|
|
|
|
|
|
RectAndIndustryVector riv = {
|
|
|
|
|
{
|
|
|
|
|
max<int>(this->rect.left - catchment_radius, 0),
|
|
|
|
|
max<int>(this->rect.top - catchment_radius, 0),
|
|
|
|
|
min<int>(this->rect.right + catchment_radius, MapMaxX()),
|
|
|
|
|
min<int>(this->rect.bottom + catchment_radius, MapMaxY())
|
|
|
|
|
},
|
|
|
|
|
this->GetCatchmentRect(),
|
|
|
|
|
&this->industries_near
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|