88 lines
3.8 KiB
C#
Raw Normal View History

2023-09-25 14:04:52 +04:00
using Liner.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Liner.Drawing
{
public class DrawingBigLiner : DrawingLiner
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес лайнера</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="swimmingPool">Признак наличия бассейна</param>
/// <param name="deck">Признак наличия доп палубы</param>
/// <param name="width">Ширина картинки</param>
/// <param name="height">Высота картинки</param>
public DrawingBigLiner(int speed, double weight, Color bottomColor, Color bodyColor, bool swimmingPool, bool deck, int width, int height)
: base(speed,weight,bodyColor,width,height,100,80)
2023-09-25 14:04:52 +04:00
{
if(EntityLiner!= null)
{
EntityLiner = new EntityBigLiner(speed, weight,bottomColor, bodyColor, deck, swimmingPool);
2023-09-25 14:04:52 +04:00
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
// высота палубы - 20 пикселей
public override void DrawTransport(Graphics g)
{
if (EntityLiner is not EntityBigLiner liner)
{
return;
}
Pen pen = new(Color.Black);
Brush poolBrush = new SolidBrush(Color.Blue);
Brush bottomBrush = new SolidBrush(liner.BottomColor);
Brush deckBrush = new SolidBrush(liner.BodyColor);
2023-09-25 14:04:52 +04:00
// палуба
Point[] firstDeck = {new Point(_startPosX + 30, _startPosY), new Point(_startPosX + 30 + 60, _startPosY),
new Point(_startPosX + 30 + 60, _startPosY + 20), new Point(_startPosX + 30, _startPosY + 20)};
int addY = 20;
// нижний корпус
Point[] bottom = {new Point(_startPosX, _startPosY), new Point(_startPosX + 100, _startPosY),
new Point(_startPosX+80, _startPosY + 40), new Point(_startPosX + 20, _startPosY + 40)};
// бассейн
Point[] pool = {new Point(_startPosX + 10, _startPosY), new Point(_startPosX + 30, _startPosY),
new Point(_startPosX+30, _startPosY + 10), new Point(_startPosX + 10, _startPosY + 10)};
g.FillPolygon(deckBrush, firstDeck);
g.DrawPolygon(pen, firstDeck);//рисуем палубу
Point[] currentDeck = new Point[4]; //буффер для прорисовки доп палуб
firstDeck.CopyTo(currentDeck, 0);
if (liner.Deck) //рисуем вторую палубу
{
for (int i = 0; i < 4; i++)
{
currentDeck[i].Y += addY;
}
g.FillPolygon(deckBrush, currentDeck);
g.DrawPolygon(pen, currentDeck);
addY += 20;
}
for (int i = 0; i < 4; i++) //сдвигаем элементы вниз на кол-во палуб
{
bottom[i].Y += addY;
pool[i].Y += addY;
}
g.FillPolygon(bottomBrush, bottom);
g.DrawPolygon(pen, bottom);//рисуем нижний корпус
if (liner.SwimmingPool) { g.FillPolygon(poolBrush, pool); }//рисуем бассейн
}
/// <summary>
/// установка цвета большого лайнера
/// </summary>
public void SetAddColor(Color color)
{
(EntityLiner as EntityBigLiner).BodyColor = color;
}
2023-09-25 14:04:52 +04:00
}
}