130 lines
5.1 KiB
Java
130 lines
5.1 KiB
Java
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);
|
||
}
|
||
}
|
||
} |