Добавил класс прорисовки
This commit is contained in:
parent
7d24f56b1f
commit
7d8ee126e2
@ -0,0 +1,201 @@
|
||||
namespace ProjectGasolineTanker;
|
||||
|
||||
public class DrawingGasolineTanker
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс-сущность
|
||||
/// </summary>
|
||||
public EntityGasolineTanker? EntityGasolineTanker { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ширина окна
|
||||
/// </summary>
|
||||
private int? _pictureWidth;
|
||||
|
||||
/// <summary>
|
||||
/// Высота окна
|
||||
/// </summary>
|
||||
private int? _pictureHeight;
|
||||
|
||||
/// <summary>
|
||||
/// Левая координата прорисовки бензовоза
|
||||
/// </summary>
|
||||
private int? _posX;
|
||||
|
||||
/// <summary>
|
||||
/// Верхняя кооридната прорисовки бензовоза
|
||||
/// </summary>
|
||||
private int? _posY;
|
||||
|
||||
/// <summary>
|
||||
/// Ширина прорисовки бензовоза
|
||||
/// </summary>
|
||||
private readonly int _drawingWidth = 90;
|
||||
|
||||
/// <summary>
|
||||
/// Высота прорисовки бензовоза
|
||||
/// </summary>
|
||||
private readonly int _drawingHeight = 63;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализация свойств
|
||||
/// </summary>
|
||||
/// <param name="speed">Скорость</param>
|
||||
/// <param name="weight">Вес</param>
|
||||
/// <param name="bodyColor">Основной цвет</param>
|
||||
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||
/// <param name="tank">Бак</param>
|
||||
/// <param name="signalBeacon">Сигнальный маяк</param>
|
||||
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool tank, bool signalBeacon)
|
||||
{
|
||||
EntityGasolineTanker = new EntityGasolineTanker();
|
||||
EntityGasolineTanker.Init(speed, weight, bodyColor, additionalColor, tank, signalBeacon);
|
||||
_pictureWidth = null;
|
||||
_pictureHeight = null;
|
||||
_posX = null;
|
||||
_posY = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Установка границ поля
|
||||
/// </summary>
|
||||
/// <param name="width">Ширина поля</param>
|
||||
/// <param name="height">Высота поля</param>
|
||||
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
|
||||
public bool SetPictureSize(int width, int height)
|
||||
{
|
||||
if (width > _drawingWidth && height > _drawingHeight)
|
||||
{
|
||||
_pictureWidth = width;
|
||||
_pictureHeight = height;
|
||||
if (_posX != null && _posY != null)
|
||||
{
|
||||
if (_posX.Value < 0) _posX = 0;
|
||||
if (_posY.Value < 0) _posY = 0;
|
||||
if (_posX.Value + _drawingWidth > _pictureWidth)
|
||||
{
|
||||
_posX = _pictureWidth - _drawingWidth;
|
||||
}
|
||||
if (_posY.Value + _drawingHeight > _pictureHeight)
|
||||
{
|
||||
_posY = _pictureHeight - _drawingHeight;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Установка позиции
|
||||
/// </summary>
|
||||
/// <param name="x">Координата X</param>
|
||||
/// <param name="y">Координата Y</param>
|
||||
public void SetPosition(int x, int y)
|
||||
{
|
||||
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_posX = x;
|
||||
_posY = y;
|
||||
|
||||
if (_pictureHeight.Value < (_posY + _drawingHeight))
|
||||
{
|
||||
_posY = _pictureHeight - _drawingHeight;
|
||||
}
|
||||
if (_pictureWidth.Value < (_posX = _drawingWidth))
|
||||
{
|
||||
_posX = _pictureWidth - _drawingWidth;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Изменение направления перемещения
|
||||
/// </summary>
|
||||
/// <param name="direction">Направление</param>
|
||||
/// <returns>true - перемещене выполнено, false - перемещение невозможно</returns>
|
||||
public bool MoveTransport(DirectionType direction)
|
||||
{
|
||||
if (EntityGasolineTanker == null || !_posX.HasValue || !_posY.HasValue)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (direction)
|
||||
{
|
||||
case DirectionType.Left:
|
||||
if (_posX.Value - EntityGasolineTanker.Step > 0)
|
||||
{
|
||||
_posX -= EntityGasolineTanker.Step;
|
||||
}
|
||||
return true;
|
||||
|
||||
case DirectionType.Up:
|
||||
if (_posY.Value - EntityGasolineTanker.Step > 0)
|
||||
{
|
||||
_posY -= EntityGasolineTanker.Step;
|
||||
}
|
||||
return true;
|
||||
|
||||
case DirectionType.Right:
|
||||
if (_posX.Value + _drawingWidth + EntityGasolineTanker.Step < _pictureWidth)
|
||||
{
|
||||
_posX += EntityGasolineTanker.Step;
|
||||
}
|
||||
return true;
|
||||
|
||||
case DirectionType.Down:
|
||||
if (_posY + EntityGasolineTanker.Step + _drawingHeight < _pictureHeight)
|
||||
{
|
||||
_posY += EntityGasolineTanker.Step;
|
||||
}
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Прорисовка объекта
|
||||
/// </summary>
|
||||
/// <param name="g"></param>
|
||||
public void DrawTransport(Graphics g)
|
||||
{
|
||||
if (EntityGasolineTanker == null || !_posX.HasValue || !_posY.HasValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Pen pen = new(Color.Black);
|
||||
Brush additionalBrush = new SolidBrush(EntityGasolineTanker.AdditionalColor);
|
||||
|
||||
// Кузов
|
||||
Brush br = new SolidBrush(EntityGasolineTanker.BodyColor);
|
||||
g.FillRectangle(br, _posX.Value + 0, _posY.Value + 35, 90, 7);
|
||||
g.FillRectangle(br, _posX.Value + 67, _posY.Value + 5, 22, 28);
|
||||
|
||||
// Колеса
|
||||
Brush brBlack = new SolidBrush(Color.Black);
|
||||
g.FillEllipse(brBlack, _posX.Value + 0, _posY.Value + 40, 23, 23);
|
||||
g.FillEllipse(brBlack, _posX.Value + 23, _posY.Value + 40, 23, 23);
|
||||
g.FillEllipse(brBlack, _posX.Value + 67, _posY.Value + 40, 23, 23);
|
||||
|
||||
// Бак
|
||||
if (EntityGasolineTanker.Tank)
|
||||
{
|
||||
g.DrawEllipse(pen, _posX.Value + 0, _posY.Value + 5, 64, 30);
|
||||
g.FillEllipse(additionalBrush, _posX.Value + 0, _posY.Value + 5, 64, 30);
|
||||
}
|
||||
|
||||
// Сигнальный маяк
|
||||
if (EntityGasolineTanker.SignalBeacon)
|
||||
{
|
||||
g.FillRectangle(additionalBrush, _posX.Value + 79, _posY.Value + 0, 5, 5);
|
||||
g.DrawEllipse(pen, _posX.Value + 79, _posY.Value + 0, 5, 10);
|
||||
g.FillEllipse(additionalBrush, _posX.Value + 79, _posY.Value + 0, 5, 10);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user