2023-09-26 22:13:53 +04:00
|
|
|
|
package laba1Loco;
|
|
|
|
|
|
|
|
|
|
import java.awt.*;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import javax.swing.*;
|
|
|
|
|
import javax.swing.Timer;
|
|
|
|
|
import java.awt.event.*;
|
|
|
|
|
|
2023-10-08 01:10:54 +04:00
|
|
|
|
public class DrawingLoco extends DrawingTrain{
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Инициализация свойств
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="speed">Скорость</param>
|
|
|
|
|
/// <param name="weight">Вес</param>
|
|
|
|
|
/// <param name="bodyColor">Цвет кузова</param>
|
|
|
|
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
|
|
|
|
/// <param name="tube">Признак наличия трубы</param>
|
|
|
|
|
/// <param name="fuelTank">Признак наличия бака</param>
|
|
|
|
|
/// <param name="locoLine">Признак наличия паровозной полосы</param>
|
|
|
|
|
/// <param name="width">Ширина картинки</param>
|
|
|
|
|
/// <param name="height">Высота картинки</param>
|
|
|
|
|
public DrawingLoco(int speed, double weight, Color bodyColor, int _numWheel, Color additionalColor, boolean tube, boolean fuelTank, boolean locoLine, int width, int height)
|
|
|
|
|
{
|
|
|
|
|
super(speed, weight, bodyColor, _numWheel, width, height);
|
|
|
|
|
EntityTrain = new EntityLoco(speed, weight, bodyColor, _numWheel, additionalColor, tube, fuelTank, locoLine);
|
|
|
|
|
_locoWidth = ((EntityLoco)EntityTrain).FuelTank ? 169 : 83;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Установка позиции
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="x">Координата X</param>
|
|
|
|
|
/// <param name="y">Координата Y</param>
|
|
|
|
|
public void SetPosition(int x, int y)
|
|
|
|
|
{
|
|
|
|
|
_startPosX = Math.min(x, _pictureWidth-_locoWidth);
|
|
|
|
|
_startPosY = Math.min(y, _pictureHeight-_locoHeight);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Прорисовка объекта
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="g"></param>
|
|
|
|
|
public void DrawTransport(Graphics2D g2d)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (EntityTrain == null)
|
2023-09-26 22:13:53 +04:00
|
|
|
|
{
|
2023-10-08 01:10:54 +04:00
|
|
|
|
return;
|
2023-09-26 22:13:53 +04:00
|
|
|
|
}
|
2023-10-08 01:10:54 +04:00
|
|
|
|
|
|
|
|
|
super.DrawTransport(g2d);
|
|
|
|
|
|
|
|
|
|
g2d.setColor(((EntityLoco)EntityTrain).AdditionalColor);
|
|
|
|
|
if (((EntityLoco)EntityTrain).Tube)
|
2023-09-26 22:13:53 +04:00
|
|
|
|
{
|
2023-10-08 01:10:54 +04:00
|
|
|
|
g2d.drawPolyline(new int[] {
|
|
|
|
|
_startPosX + 40,_startPosX + 40,_startPosX + 45,_startPosX + 41,_startPosX + 41,_startPosX + 44,_startPosX + 44,_startPosX + 45,_startPosX + 45,
|
|
|
|
|
},new int[] {
|
|
|
|
|
_startPosY+9,_startPosY+3,_startPosY+3,_startPosY+3,_startPosY,_startPosY,_startPosY+3,_startPosY+3,_startPosY+9,
|
|
|
|
|
},9);
|
2023-09-26 22:13:53 +04:00
|
|
|
|
}
|
2023-10-08 01:10:54 +04:00
|
|
|
|
if (((EntityLoco)EntityTrain).LocoLine)
|
2023-09-26 22:13:53 +04:00
|
|
|
|
{
|
2023-10-08 01:10:54 +04:00
|
|
|
|
g2d.drawPolyline(new int[] {
|
|
|
|
|
_startPosX + 60,_startPosX + 38,
|
|
|
|
|
},new int[] {
|
|
|
|
|
_startPosY+10,_startPosY+32
|
|
|
|
|
},2);
|
|
|
|
|
g2d.drawPolyline(new int[] {
|
|
|
|
|
_startPosX + 65,_startPosX + 43,
|
|
|
|
|
},new int[] {
|
|
|
|
|
_startPosY+10,_startPosY+32
|
|
|
|
|
},2);
|
|
|
|
|
g2d.drawPolyline(new int[] {
|
|
|
|
|
_startPosX + 70,_startPosX + 48,
|
|
|
|
|
},new int[] {
|
|
|
|
|
_startPosY+10,_startPosY+32
|
|
|
|
|
},2);
|
2023-09-26 22:13:53 +04:00
|
|
|
|
}
|
2023-10-08 01:10:54 +04:00
|
|
|
|
if (((EntityLoco)EntityTrain).FuelTank)
|
2023-09-26 22:13:53 +04:00
|
|
|
|
{
|
|
|
|
|
// body
|
2023-10-08 01:10:54 +04:00
|
|
|
|
g2d.setColor(EntityTrain.BodyColor);
|
|
|
|
|
g2d.drawPolyline(new int[]{
|
|
|
|
|
_startPosX + 89, _startPosX + 164, _startPosX + 164, _startPosX + 89, _startPosX + 89,
|
|
|
|
|
}, new int[]{
|
|
|
|
|
_startPosY+10, _startPosY+10, _startPosY+32, _startPosY+32, _startPosY+10
|
|
|
|
|
}, 5);
|
|
|
|
|
g2d.drawPolyline(new int[]{
|
|
|
|
|
_startPosX + 89, _startPosX + 164,
|
|
|
|
|
}, new int[]{
|
|
|
|
|
_startPosY+21, _startPosY+21,
|
|
|
|
|
}, 2);
|
|
|
|
|
|
|
|
|
|
// trucks
|
|
|
|
|
g2d.fillPolygon(new int[]{
|
2023-09-26 22:13:53 +04:00
|
|
|
|
_startPosX + 0+85,_startPosX + 5+85,_startPosX + 32+85,_startPosX + 36+85,
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}, new int[]{
|
2023-09-26 22:13:53 +04:00
|
|
|
|
_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}, 4);
|
|
|
|
|
g2d.fillPolygon(new int[]{
|
2023-09-26 22:13:53 +04:00
|
|
|
|
_startPosX + 44+85,_startPosX + 49+85,_startPosX + 76+85,_startPosX + 80+85,
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}, new int[]{
|
2023-09-26 22:13:53 +04:00
|
|
|
|
_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}, 4);
|
2023-09-26 22:13:53 +04:00
|
|
|
|
|
2023-10-08 01:10:54 +04:00
|
|
|
|
//back
|
|
|
|
|
g2d.fillPolygon(new int[]{
|
2023-09-26 22:13:53 +04:00
|
|
|
|
_startPosX + 79+85,_startPosX + 82+85,_startPosX + 82+85,_startPosX + 79+85,
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}, new int[]{
|
2023-09-26 22:13:53 +04:00
|
|
|
|
_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}, 4);
|
2023-09-26 22:13:53 +04:00
|
|
|
|
|
2023-10-08 01:10:54 +04:00
|
|
|
|
|
|
|
|
|
//front
|
|
|
|
|
g2d.fillPolygon(new int[]{
|
2023-09-26 22:13:53 +04:00
|
|
|
|
_startPosX + 86,_startPosX + 89,_startPosX + 89,_startPosX + 86,
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}, new int[]{
|
2023-09-26 22:13:53 +04:00
|
|
|
|
_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}, 4);
|
2023-09-26 22:13:53 +04:00
|
|
|
|
|
|
|
|
|
}
|
2023-10-09 21:35:00 +04:00
|
|
|
|
|
|
|
|
|
//wheels
|
|
|
|
|
wheelDrawing.Draw(_startPosX, _startPosY, ((EntityLoco)EntityTrain).FuelTank, EntityTrain.BodyColor, g2d);
|
2023-10-08 01:10:54 +04:00
|
|
|
|
}
|
2023-09-26 22:13:53 +04:00
|
|
|
|
}
|