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