2023-11-24 12:39:11 +04:00

81 lines
3.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 bodyColor, Color bottomColor, bool swimmingPool, bool deck, int width, int height)
: base(speed,weight,bodyColor,bottomColor,width,height,100,80)
{
if(EntityLiner!= null)
{
EntityLiner = new EntityBigLiner(speed, weight, bodyColor, bottomColor, deck, swimmingPool);
}
}
/// <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(EntityLiner.BottomColor);
Brush deckBrush = new SolidBrush(EntityLiner.BodyColor);
// палуба
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); }//рисуем бассейн
}
}
}