public int GetAvailableLight(PlantState plant)
{
var maxX = plant.GridX + plant.CellRadius + 25;
if (maxX > _gridWidth - 1)
{
maxX = _gridWidth - 1;
}
var overlappingPlantsEast = FindOrganismsInCells(plant.GridX + plant.CellRadius,
maxX, plant.GridY - plant.CellRadius,
plant.GridY + plant.CellRadius);
var minX = plant.GridX - plant.CellRadius - 25;
if (minX < 0)
{
minX = 0;
}
var overlappingPlantsWest = FindOrganismsInCells(minX, plant.GridX - plant.CellRadius,
plant.GridY - plant.CellRadius,
plant.GridY + plant.CellRadius);
double maxAngleEast = 0;
foreach (OrganismState targetPlant in overlappingPlantsEast)
{
if (!(targetPlant is PlantState)) continue;
var currentAngle = Math.Atan2(((PlantState) targetPlant).Height,
targetPlant.Position.X - plant.Position.X);
if (currentAngle > maxAngleEast)
{
maxAngleEast = currentAngle;
}
}
double maxAngleWest = 0;
foreach (OrganismState targetPlant in overlappingPlantsWest)
{
if (!(targetPlant is PlantState)) continue;
var currentAngle = Math.Atan2(((PlantState) targetPlant).Height,
plant.Position.X - targetPlant.Position.X);
if (currentAngle > maxAngleWest)
{
maxAngleWest = currentAngle;
}
}
return (int) (((Math.PI - maxAngleEast + maxAngleWest)/Math.PI)*100);
}