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>
|
2023-12-03 14:42:46 +04:00
|
|
|
|
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)
|
|
|
|
|
{
|
2023-12-03 14:42:46 +04:00
|
|
|
|
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);
|
2023-12-03 14:42:46 +04:00
|
|
|
|
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); }//рисуем бассейн
|
|
|
|
|
}
|
2023-12-03 14:42:46 +04:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// установка цвета большого лайнера
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void SetAddColor(Color color)
|
|
|
|
|
{
|
|
|
|
|
(EntityLiner as EntityBigLiner).BodyColor = color;
|
|
|
|
|
}
|
2023-09-25 14:04:52 +04:00
|
|
|
|
}
|
|
|
|
|
}
|