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