48 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AirBomber
{
/// <summary>
/// Класс-дополнение к самолету отвечающий за число двигателей и их отрисовку
/// </summary>
internal class DrawningAirplaneEngines : IAirplaneEngines
{
/// <summary>Приватное поле содержащие текущее количество двигателей самолета</summary>
private CountEngines _countEngines;
public int CountEngines
{
get => (int)_countEngines;
set
{
int currCountEngines = Math.Clamp(value, 2, 6); // Отсекаем значения меньше 2 и больше 6
_countEngines = (CountEngines)(currCountEngines - currCountEngines % 2); // Значения между 2, 4, 6 округляем в нижнию сторону
}
}
public void DrawEngines(Graphics g, Color colorEngine, float wingPosX, float leftWingY, float rightWingY, int widthBodyAirplane)
{
float distanceBetweenEngines = (leftWingY - rightWingY - widthBodyAirplane) / 8.0f;
float centerY = rightWingY + (leftWingY - rightWingY) / 2.0f;
float distToWing = widthBodyAirplane / 2.0f;
for (var i = 1; i <= CountEngines / 2; i++)
{
DrawEngine(g, colorEngine, new RectangleF(wingPosX - 10, centerY - distToWing - distanceBetweenEngines * i - 5, 20, 10));
DrawEngine(g, colorEngine, new RectangleF(wingPosX - 10, centerY + distToWing + distanceBetweenEngines * i - 5, 20, 10));
}
}
protected virtual void DrawEngine(Graphics g, Color colorAirplane, RectangleF rectAroundEngine)
{
g.FillEllipse(new SolidBrush(colorAirplane), rectAroundEngine);
g.FillEllipse(new SolidBrush(Color.Black),
new RectangleF(rectAroundEngine.X, rectAroundEngine.Y, rectAroundEngine.Width / 4, rectAroundEngine.Height));
}
}
}