DrawningPlane

This commit is contained in:
xom9kxom9k 2024-02-19 16:52:42 +04:00
parent f6590d151b
commit 71d01b9f6e
3 changed files with 43 additions and 118 deletions

View File

@ -1,39 +1,13 @@
namespace Seaplane.Drawnings;
using Seaplane.Entities;
namespace Seaplane.Drawnings;
/// <summary>
/// Класс отвечающий за прорисовку и перемещение объекта - сущности
/// </summary>
public class DrawingSeaplane
public class DrawingSeaplane : DrawningPlane
{
/// <summary>
/// Класс - сущность
/// </summary>
public EntitySeaplane? EntitySeaplane { get; set; }
/// <summary>
/// Ширина окна
/// </summary>
private int? _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int? _pictureHeight;
/// <summary>
/// Левая координата прорисовки гидросамолета
/// </summary>
private int? _startPosX;
/// <summary>
/// Верхняя координата прорисовки гидросамолета
/// </summary>
private int? _startPosY;
/// <summary>
/// Ширина прорисовки гидросамолета
/// </summary>
private readonly int _drawningPlaneWidth = 0;
/// <summary>
/// Высота прорисовки гидросамолета
/// </summary>
private readonly int _drawningPlaneHeight = 0;
/// <summary>
/// Инициализация полей объекта-класса гидросамолета
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
@ -42,63 +16,12 @@ public class DrawingSeaplane
/// <param name="bodyKit">Наличие обвеса</param>
/// <param name="floats">Наличие поплавков</param>
/// <param name="inflatableBoat">Наличие надувной лодки</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine)
public DrawingSeaplane(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) : base(110, 60)
{
EntitySeaplane = new EntitySeaplane();
EntitySeaplane.Init(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine);
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
public bool SetPictureSize(int width, int height)
{
// TODO проверка, что объект "влезает" в размеры поля
// если влезает, сохраняем границы и корректируем позицию объекта,если она была уже установлена
if (width < _drawningPlaneWidth || height < _drawningPlaneHeight) return false;
_pictureWidth = width;
_pictureHeight = height;
if (_startPosX != null || _startPosY != null)
{
if (_startPosX + _drawningPlaneWidth > _pictureWidth)
{
_startPosX = _startPosX - (_startPosX + _drawningPlaneWidth - _pictureWidth);
}
else if (_startPosX < 0) _startPosX = 0;
if (_startPosY + _drawningPlaneHeight > _pictureHeight)
{
_startPosY = _startPosY - (_startPosY + _drawningPlaneHeight - _pictureHeight);
}
else if (_startPosY < 0) _startPosY = 0;
}
return true;
}
/// <summary>
/// Установка позиций
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
public void SetPosition(int x, int y)
{
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
{
return;
}
// TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
// то надо изменить координаты, чтобы он оставался в этих границах
if (x + _drawningPlaneWidth > _pictureWidth)
{
_startPosX = x - (x + _drawningPlaneWidth - _pictureWidth);
}
else if (x < 0) _startPosX = 0;
else _startPosX = x;
if (y + _drawningPlaneHeight > _pictureHeight)
{
_startPosY = y - (y + _drawningPlaneHeight - _pictureHeight);
}
else if (y < 0) _startPosY = 0;
else _startPosY = y;
EntityPlane = new EntitySeaplane(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine);
}
/// <summary>
/// Изменение направления перемещения
/// </summary>

View File

@ -12,7 +12,7 @@ public class DrawningPlane
/// <summary>
/// Класс - сущность
/// </summary>
public EntityPlane? EntityPlane { get; set; }
public EntityPlane? EntityPlane { get;protected set; }
/// <summary>
/// Ширина окна
/// </summary>
@ -24,11 +24,11 @@ public class DrawningPlane
/// <summary>
/// Левая координата прорисовки гидросамолета
/// </summary>
private int? _startPosX;
protected int? _startPosX;
/// <summary>
/// Верхняя координата прорисовки гидросамолета
/// </summary>
private int? _startPosY;
protected int? _startPosY;
/// <summary>
/// Ширина прорисовки гидросамолета
/// </summary>
@ -38,23 +38,41 @@ public class DrawningPlane
/// </summary>
private readonly int _drawningPlaneHeight = 0;
/// <summary>
/// Инициализация полей объекта-класса гидросамолета
/// Пустой конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyKit">Наличие обвеса</param>
/// <param name="floats">Наличие поплавков</param>
/// <param name="inflatableBoat">Наличие надувной лодки</param>
public void Init(int speed, double weight, Color bodyColor)
private DrawningPlane()
{
EntityPlane = new EntityPlane(speed, weight, bodyColor);
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
public DrawningPlane(int speed, double weight, Color bodyColor) : this()
{
EntityPlane = new EntityPlane(speed, weight, bodyColor);
}
/// <summary>
/// Конструктор для наследников
/// </summary>
/// <param name="drawningPlaneWidth">Ширина прорисовки гидросамолета</param>
/// <param name="drawningPlaneHeight">Высота прорисовки гидросамолета</param>
protected DrawningPlane(int drawningPlaneWidth, int drawningPlaneHeight) : this()
{
_drawningPlaneWidth = drawningPlaneWidth;
_drawningPlaneHeight = drawningPlaneHeight;
}
/// <summary>
/// Установка границ поля
/// </summary>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
public bool SetPictureSize(int width, int height)
{
// TODO проверка, что объект "влезает" в размеры поля
@ -152,7 +170,7 @@ public class DrawningPlane
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics g)
public virtual void DrawTransport(Graphics g)
{
if (EntityPlane == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
@ -161,8 +179,6 @@ public class DrawningPlane
Pen pen = new(Color.Black);
//корпус гидросамолета
Brush br = new SolidBrush(EntityPlane.BodyColor);
g.FillRectangle(br, _startPosX.Value, _startPosY.Value + 20, 100, 20);

View File

@ -2,19 +2,8 @@
/// <summary>
/// Класс-сущность Гидросамолет
/// </summary>
public class EntitySeaplane
{ /// <summary>
/// Скорость
/// </summary>
public int Speed { get; private set; }
/// <summary>
/// Вес
/// </summary>
public double Weight { get; private set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
public class EntitySeaplane : EntityPlane
{
/// <summary>
/// Дополниетльный цвет
/// </summary>
@ -47,9 +36,6 @@ public class EntitySeaplane
/// <param name="inflatableBoat">Наличие надувной лодки</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool floats, bool inflatableBoat)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor;
BodyKit = bodyKit;
Floats = floats;