2024-04-06 21:31:39 +04:00
|
|
|
import java.awt.*;
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
public class DrawingModernMonorail {
|
|
|
|
private EntityModernMonorail _entityMonorail;
|
|
|
|
private DrawingWheels _wheels;
|
|
|
|
|
|
|
|
private Integer _pictureWidth = null;
|
|
|
|
private Integer _pictureHeight = null;
|
|
|
|
|
|
|
|
private int _startPositionX;
|
|
|
|
private int _startPositionY;
|
|
|
|
|
|
|
|
private int _drawningMonorailWidth = 160;
|
|
|
|
private final int _drawningMonorailHeight = 55;
|
|
|
|
|
|
|
|
public EntityModernMonorail getMonorail() {return _entityMonorail;}
|
|
|
|
public DrawingWheels getWheels() {return _wheels;}
|
2024-04-06 22:04:56 +04:00
|
|
|
private int _wheelsSeed;
|
2024-04-06 21:31:39 +04:00
|
|
|
|
|
|
|
public void Initialization(int speed, float weight, Color bodyColor, Color additionalColor, boolean monorailTrack, boolean cabin)
|
|
|
|
{
|
|
|
|
_entityMonorail = new EntityModernMonorail();
|
|
|
|
_entityMonorail.Initialization(speed, weight, bodyColor, additionalColor, monorailTrack, cabin);
|
|
|
|
_wheels = new DrawingWheels();
|
|
|
|
Random rnd = new Random();
|
|
|
|
_wheels.SetCountWheels(2 + rnd.nextInt(0, 3));
|
2024-04-06 22:04:56 +04:00
|
|
|
_wheelsSeed = rnd.nextInt(0, 2);
|
2024-04-06 21:31:39 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
public boolean SetPictureSize(int width, int height)
|
|
|
|
{
|
|
|
|
if (_drawningMonorailWidth > width || _drawningMonorailHeight > height) return false;
|
|
|
|
|
|
|
|
if (_startPositionX >= 0 && _startPositionY >= 0)
|
|
|
|
{
|
|
|
|
if (_startPositionX + _drawningMonorailWidth > width)
|
|
|
|
{
|
|
|
|
_startPositionX = width - _drawningMonorailWidth;
|
|
|
|
}
|
|
|
|
if (_startPositionY + _drawningMonorailHeight > height)
|
|
|
|
{
|
|
|
|
_startPositionY = height - _drawningMonorailHeight;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_pictureWidth = width;
|
|
|
|
_pictureHeight = height;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SetPosition(int x, int y, int width, int height)
|
|
|
|
{
|
|
|
|
if (_pictureHeight == null || _pictureWidth == null) return;
|
|
|
|
|
|
|
|
if (x + _drawningMonorailWidth > _pictureWidth || x < 0)
|
|
|
|
{
|
|
|
|
_startPositionX = (int)Math.random() * (_pictureWidth - _drawningMonorailWidth);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_startPositionX = x;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (y + _drawningMonorailHeight > _pictureHeight || y < 0)
|
|
|
|
{
|
|
|
|
_startPositionY = (int)Math.random() * (_pictureHeight - _drawningMonorailHeight);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_startPositionY = y;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean MoveTransport(DirectionType direction)
|
|
|
|
{
|
|
|
|
if (_pictureWidth == null || _pictureHeight == null) return false;
|
|
|
|
|
|
|
|
switch (direction)
|
|
|
|
{
|
|
|
|
case Right:
|
|
|
|
if (_startPositionX + _drawningMonorailWidth + _entityMonorail.Step < _pictureWidth)
|
|
|
|
{
|
|
|
|
_startPositionX += _entityMonorail.Step;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
case Left:
|
|
|
|
if (_startPositionX - _entityMonorail.Step >= 0)
|
|
|
|
{
|
|
|
|
_startPositionX -= _entityMonorail.Step;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
case Up:
|
|
|
|
if (_startPositionY - _entityMonorail.Step >= 0)
|
|
|
|
{
|
|
|
|
_startPositionY -= _entityMonorail.Step;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
case Down:
|
|
|
|
if (_startPositionY + _drawningMonorailHeight + _entityMonorail.Step < _pictureHeight)
|
|
|
|
{
|
|
|
|
_startPositionY += _entityMonorail.Step;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void DrawTransport(Graphics g)
|
|
|
|
{
|
|
|
|
if (_startPositionX < 0 || _startPositionY < 0 || _pictureHeight== null || _pictureWidth== null) return;
|
|
|
|
|
|
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
|
|
g.setColor(_entityMonorail.getBodyColor());
|
|
|
|
|
|
|
|
//Кузов монорельса
|
|
|
|
g.drawLine(_startPositionX + 8, _startPositionY + 10, _startPositionX + 13, _startPositionY);
|
|
|
|
g.drawLine(_startPositionX + 13, _startPositionY, _startPositionX + 80, _startPositionY);
|
|
|
|
g.drawLine(_startPositionX + 80, _startPositionY, _startPositionX + 80, _startPositionY + 25);
|
|
|
|
g.drawLine(_startPositionX + 80, _startPositionY + 25, _startPositionX + 8, _startPositionY + 25);
|
|
|
|
g.drawLine(_startPositionX + 8, _startPositionY + 25, _startPositionX + 8, _startPositionY + 10);
|
|
|
|
g.drawLine(_startPositionX + 8, _startPositionY + 10, _startPositionX + 30, _startPositionY + 10);
|
|
|
|
g.drawLine(_startPositionX + 39, _startPositionY + 10, _startPositionX + 80, _startPositionY + 10);
|
|
|
|
|
|
|
|
//Дверь
|
|
|
|
g.drawRect(_startPositionX + 30, _startPositionY + 5, 9, 15);
|
|
|
|
|
|
|
|
//Окна
|
|
|
|
g.setColor(_entityMonorail.getAdditionalColor());
|
|
|
|
g.drawRect(_startPositionX + 14, _startPositionY + 2, 5, 6);
|
|
|
|
g.drawRect(_startPositionX + 21, _startPositionY + 2, 5, 6);
|
|
|
|
g.drawRect(_startPositionX + 70, _startPositionY + 2, 5, 6);
|
|
|
|
|
|
|
|
//Связка монорельса
|
|
|
|
g.setColor(_entityMonorail.getBodyColor());
|
|
|
|
g.fillRect(_startPositionX + 80, _startPositionY + 2, 7, 22);
|
|
|
|
|
|
|
|
//Нижняя часть монорельса
|
|
|
|
int xPoly_LeftSide[] = {_startPositionX, _startPositionX + 8, _startPositionX + 72, _startPositionX + 36, _startPositionX + 36, _startPositionX + 15, _startPositionX + 15, _startPositionX};
|
|
|
|
int yPoly_LeftSide[] = {_startPositionY + 30, _startPositionY + 25, _startPositionY + 25, _startPositionY + 25, _startPositionY + 32, _startPositionY + 32, _startPositionY + 35, _startPositionY + 32};
|
|
|
|
g.fillPolygon(xPoly_LeftSide, yPoly_LeftSide, xPoly_LeftSide.length);
|
|
|
|
|
|
|
|
int xPoly_RightSide[] = {_startPositionX + 86, _startPositionX + 80, _startPositionX + 50, _startPositionX + 50, _startPositionX + 69, _startPositionX + 79, _startPositionX + 86};
|
|
|
|
int yPoly_RightSide[] = {_startPositionY + 30, _startPositionY + 25, _startPositionY + 25, _startPositionY + 32, _startPositionY + 32, _startPositionY + 35, _startPositionY + 32};
|
|
|
|
g.fillPolygon(xPoly_RightSide, yPoly_RightSide, xPoly_RightSide.length);
|
|
|
|
|
|
|
|
g.fillRect(_startPositionX + 8, _startPositionY + 25, 70, 3);
|
|
|
|
|
|
|
|
if (_entityMonorail.getMonorailTrack()) {
|
|
|
|
if (_entityMonorail.getCabin()) {
|
|
|
|
g.fillRect(_startPositionX, _startPositionY + 35, 170, 5);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
g.fillRect(_startPositionX, _startPositionY + 35, 86, 5);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//Колеса
|
|
|
|
int[] coordinatesX = new int[_wheels.getCountWheels()];
|
|
|
|
coordinatesX[0] = _startPositionX + 10;
|
|
|
|
coordinatesX[1] = _startPositionX + 65;
|
|
|
|
|
|
|
|
if (coordinatesX.length == 4) {
|
|
|
|
coordinatesX[2] = _startPositionX + 25;
|
|
|
|
coordinatesX[3] = _startPositionX + 50;
|
|
|
|
}
|
|
|
|
else if (coordinatesX.length == 3) {
|
|
|
|
Random rnd = new Random();
|
2024-04-06 22:04:56 +04:00
|
|
|
if (_wheelsSeed == 1) {
|
2024-04-06 21:31:39 +04:00
|
|
|
coordinatesX[2] = _startPositionX + 25;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
coordinatesX[2] = _startPositionX + 50;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_wheels.DrawWheels(g2, coordinatesX, _startPositionY + 30, _entityMonorail.getAdditionalColor());
|
|
|
|
|
|
|
|
if (_entityMonorail.getCabin()) {
|
|
|
|
int offset = 170;
|
|
|
|
|
|
|
|
//Кузов монорельса
|
|
|
|
g.drawLine(_startPositionX - 8 + offset, _startPositionY + 10, _startPositionX - 13 + offset, _startPositionY);
|
|
|
|
g.drawLine(_startPositionX - 13 + offset, _startPositionY, _startPositionX - 80 + offset, _startPositionY);
|
|
|
|
g.drawLine(_startPositionX - 80 + offset, _startPositionY, _startPositionX - 80 + offset, _startPositionY + 25);
|
|
|
|
g.drawLine(_startPositionX - 80 + offset, _startPositionY + 25, _startPositionX - 8 + offset, _startPositionY + 25);
|
|
|
|
g.drawLine(_startPositionX - 8 + offset, _startPositionY + 25, _startPositionX - 8 + offset, _startPositionY + 10);
|
|
|
|
g.drawLine(_startPositionX - 8 + offset, _startPositionY + 10, _startPositionX - 30 + offset, _startPositionY + 10);
|
|
|
|
g.drawLine(_startPositionX - 39 + offset, _startPositionY + 10, _startPositionX - 80 + offset, _startPositionY + 10);
|
|
|
|
|
|
|
|
//Дверь
|
|
|
|
g.drawRect(_startPositionX - 39 + offset, _startPositionY + 5, 9, 15);
|
|
|
|
|
|
|
|
//Окна
|
|
|
|
g.setColor(_entityMonorail.getAdditionalColor());
|
|
|
|
g.drawRect(_startPositionX - 20 + offset, _startPositionY + 2, 5, 6);
|
|
|
|
g.drawRect(_startPositionX - 27 + offset, _startPositionY + 2, 5, 6);
|
|
|
|
g.drawRect(_startPositionX - 76 + offset, _startPositionY + 2, 5, 6);
|
|
|
|
|
|
|
|
//Связка монорельса
|
|
|
|
g.setColor(_entityMonorail.getBodyColor());
|
|
|
|
g.fillRect(_startPositionX - 87 + offset, _startPositionY + 2, 7, 22);
|
|
|
|
|
|
|
|
//Нижняя часть монорельса
|
|
|
|
xPoly_LeftSide = new int[]{_startPositionX + offset, _startPositionX - 8 + offset, _startPositionX - 72 + offset, _startPositionX - 36 + offset, _startPositionX - 36 + offset, _startPositionX - 15 + offset, _startPositionX - 15 + offset, _startPositionX + offset};
|
|
|
|
yPoly_LeftSide = new int[] {_startPositionY + 30, _startPositionY + 25, _startPositionY + 25, _startPositionY + 25, _startPositionY + 32, _startPositionY + 32, _startPositionY + 35, _startPositionY + 32};
|
|
|
|
g.fillPolygon(xPoly_LeftSide, yPoly_LeftSide, xPoly_LeftSide.length);
|
|
|
|
|
|
|
|
xPoly_RightSide = new int[]{_startPositionX - 86 + offset, _startPositionX - 80 + offset, _startPositionX - 50 + offset, _startPositionX - 50 + offset, _startPositionX - 69 + offset, _startPositionX - 79 + offset, _startPositionX - 86 + offset};
|
|
|
|
yPoly_RightSide = new int[] {_startPositionY + 30, _startPositionY + 25, _startPositionY+ 25, _startPositionY + 32, _startPositionY + 32 , _startPositionY + 35, _startPositionY + 32};
|
|
|
|
g.fillPolygon(xPoly_RightSide, yPoly_RightSide, xPoly_RightSide.length);
|
|
|
|
g.fillRect(_startPositionX - 80 + offset, _startPositionY + 25, 70, 3);
|
|
|
|
|
|
|
|
//Колеса
|
|
|
|
coordinatesX = new int[_wheels.getCountWheels()];
|
|
|
|
coordinatesX[0] = _startPositionX - 20 + offset;
|
|
|
|
coordinatesX[1] = _startPositionX - 75 + offset;
|
|
|
|
|
|
|
|
if (coordinatesX.length == 4) {
|
|
|
|
coordinatesX[2] = _startPositionX - 35 + offset;
|
|
|
|
coordinatesX[3] = _startPositionX - 60 + offset;
|
|
|
|
}
|
|
|
|
else if (coordinatesX.length == 3) {
|
|
|
|
Random rnd = new Random();
|
2024-04-06 22:04:56 +04:00
|
|
|
if (_wheelsSeed == 1) {
|
2024-04-06 21:31:39 +04:00
|
|
|
coordinatesX[2] = _startPositionX - 35 + offset;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
coordinatesX[2] = _startPositionX - 60 + offset;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_wheels.DrawWheels(g2, coordinatesX, _startPositionY + 30, _entityMonorail.getAdditionalColor());
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|