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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|