48 lines
2.1 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|