81 lines
3.6 KiB
C#
81 lines
3.6 KiB
C#
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); }//рисуем бассейн
|
||
}
|
||
}
|
||
}
|