PIbd-22_Chernyshev_G.J._29_.../Trolleybus/DrawingTrolleybus.java

130 lines
5.1 KiB
Java
Raw Normal View History

2023-11-11 21:48:58 +04:00
package Trolleybus;
import java.awt.*;
import java.util.Random;
public class DrawingTrolleybus {
// Класс-сущность
public EntityTrolleybus EntityTrolleybus;
// Замена свойства
public EntityTrolleybus getEntityTrolleybus() {return EntityTrolleybus;}
private void setEntityTrolleybus(EntityTrolleybus entityTrolleybus) {EntityTrolleybus = entityTrolleybus;}
public DrawingDoors Doors;
// Ширина окна
private int _pictureWidth;
// Высота окна
private int _pictureHeight;
// Левая координата прорисовки троллейбуса
private int _startPosX;
// Верхняя координата прорисовки троллейбуса
private int _startPosY;
// Ширина прорисовки троллейбуса
private final int _trolleybusWidth = 150;
// Высота прорисовки троллейбуса
private final int _trolleybusHeight = 95;
// Инициализация свойств
public boolean Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean horns, boolean batteries, int width, int height)
{
if (width < _trolleybusWidth || height < _trolleybusHeight)
{
return false;
}
_pictureWidth = width;
_pictureHeight = height;
EntityTrolleybus = new EntityTrolleybus();
EntityTrolleybus.Init(speed, weight, bodyColor, additionalColor, horns, batteries);
//Кол-во дверей
Random random = new Random();
Doors = new DrawingDoors();
Doors.SetCntOfDoors(random.nextInt(3, 6));
return true;
}
// Установка позиции
public void SetPosition(int x, int y)
{
if (x > _pictureWidth || y > _pictureHeight) {
return;
}
_startPosX = Math.min(Math.max(x, 0), _pictureWidth - _trolleybusWidth);
_startPosY = Math.min(Math.max(y, 0), _pictureHeight - _trolleybusHeight);
}
// Изменение направления перемещения
public void MoveTransport(DirectionType directionType)
{
if (EntityTrolleybus == null)
{
return;
}
switch (directionType)
{
//влево
case Left:
if (_startPosX - EntityTrolleybus.Step > 0)
{
_startPosX -= (int)EntityTrolleybus.Step;
}
break;
//вверх
case Up:
if (_startPosY - EntityTrolleybus.Step > 0)
{
_startPosY -= (int)EntityTrolleybus.Step;
}
break;
// вправо
case Right:
if (_startPosX + _trolleybusWidth + EntityTrolleybus.Step < _pictureWidth)
{
_startPosX += (int)EntityTrolleybus.Step;
}
break;
// вниз
case Down:
if (_startPosY + _trolleybusHeight + EntityTrolleybus.Step < _pictureHeight)
{
_startPosY += (int)EntityTrolleybus.Step;
}
break;
}
}
// Прорисовка объекта
public void DrawTransport(Graphics g)
{
if (EntityTrolleybus == null)
{
return;
}
Graphics2D g2d = (Graphics2D)g;
//РИСОВАНИЕ САМОГО ТРРОЛЛЕЙБУСА
//Корпус
g2d.setColor(EntityTrolleybus.getBodyColor());
g2d.drawLine(_startPosX, _startPosY + 30, _startPosX, _startPosY + 80);
g2d.drawLine(_startPosX, _startPosY + 80, _startPosX + 20, _startPosY + 80);
g2d.drawLine(_startPosX + 45, _startPosY + 80, _startPosX + 105, _startPosY + 80);
g2d.drawLine(_startPosX + 130, _startPosY + 80, _startPosX + 150, _startPosY + 80);
g2d.drawLine(_startPosX + 150, _startPosY + 80, _startPosX + 150, _startPosY + 30);
g2d.drawLine(_startPosX + 150, _startPosY + 30, _startPosX, _startPosY + 30);
//Колёса
g2d.setColor(Color.BLACK);
g2d.drawOval(_startPosX + 20, _startPosY + 70, 25, 25);
g2d.drawOval(_startPosX + 105, _startPosY + 70, 25, 25);
//Двери
Doors.DrawDoors(g2d, EntityTrolleybus.getBodyColor(), _startPosX, _startPosY);
//Опциональные "рога"
g2d.setColor(EntityTrolleybus.getAdditionalColor());
if (EntityTrolleybus.Horns)
{
g2d.drawLine(_startPosX + 70, _startPosY + 30, _startPosX + 40, _startPosY);
g2d.drawLine(_startPosX + 70, _startPosY + 30, _startPosX + 60, _startPosY);
}
//Опциональный отсек для батареи
if (EntityTrolleybus.Batteries)
{
int[] xOfBatteries = {_startPosX + 70, _startPosX + 70, _startPosX + 100, _startPosX + 110};
int[] yOfBatteries = {_startPosY + 30, _startPosY + 25, _startPosY + 25, _startPosY + 30};
g2d.fillPolygon(xOfBatteries, yOfBatteries, 4);
}
}
}