172 lines
5.6 KiB
Java
Raw Normal View History

import java.awt.*;
import java.awt.Color;
import java.util.Random;
public class DrawingPlane
{
public EntityPlane Airbus; //класс-сущность
public DrawingAirplaneWindow _airplaneWindow; //для дополнительной отрисовки
private float _startPosX; //левая координата отрисовки
private float _startPosY; //верхняя координата отрисовки
private Integer _pictureWidth = null; //ширина окна отрисовки
private Integer _pictureHeight = null; //высота окна отрисовки
protected final int _airbusWidth = 50; //ширина отрисовки самолёта
protected final int _airbusHeight = 16; //высота отрисовки самолёта
//инициализаци свойств
public void Initial(int speed, float weight, Color corpusColor)
{
Airbus = new EntityPlane();
Airbus.Initial(speed, weight, corpusColor);
_airplaneWindow = new DrawingAirplaneWindow();
SetAddEnum();
}
//установка кол-ва иллюминаторов
public void SetAddEnum()
{
Random rnd = new Random();
int countWindow = rnd.nextInt(1, 4);
_airplaneWindow.SetAddEnum(countWindow);
}
public EntityPlane GetPlane()
{
return Airbus;
}
//установка координат позиции самолёта
public void SetPosition(int x, int y, int width, int height)
{
if (x < 0 || y < 0 || width <= x + _airbusWidth || height <= y + _airbusHeight)
{
_pictureHeight = null;
_pictureWidth = null;
return;
}
_startPosX = x;
_startPosY = y;
_pictureWidth = width;
_pictureHeight = height;
}
//изменение направления движения
public void MoveTransport(Direction direction)
{
if (GetPlane() == null)
{
return;
}
switch (direction)
{
case Right: //вправо
if (_startPosX + _airbusWidth + Airbus.GetStep() < _pictureWidth)
{
_startPosX += Airbus.GetStep();
}
break;
case Left: //влево
if (_startPosX - _airbusWidth - Airbus.GetStep() > 0)
{
_startPosX -= Airbus.GetStep();
}
break;
case Up: //вверх
if (_startPosY - _airbusHeight - Airbus.GetStep() > 0)
{
_startPosY -= Airbus.GetStep();
}
break;
case Down: //вниз
if (_startPosY + _airbusHeight + Airbus.GetStep() < _pictureHeight)
{
_startPosY += Airbus.GetStep();
}
break;
}
}
public void DrawTransport(Graphics g)
{
if (_startPosX < 0 || _startPosY < 0 || _pictureHeight == null || _pictureWidth == null)
{
return;
}
if(GetPlane() == null){
return;
}
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, _pictureWidth, _pictureHeight);
//заливает фигуру
g2d.setPaint(Color.BLACK);
//крыло
g2d.fillRect((int)_startPosX + 10, (int)_startPosY + 15, 20, 2);
g2d.fillRect((int)_startPosX + 12, (int)_startPosY + 17, 16, 2);
//заднее поперечное крыло
g2d.fillOval((int)_startPosX - 3, (int)_startPosY + 7, 10, 5);
//задние шасси
g2d.fillRect((int)_startPosX + 10, (int)_startPosY + 21, 2, 2);
g2d.fillRect((int)_startPosX + 12, (int)_startPosY + 23, 4, 4);
g2d.fillRect((int)_startPosX + 8, (int)_startPosY + 23, 2, 4);
//переднее шасси
g2d.fillRect((int)_startPosX + 35, (int)_startPosY + 21, 2, 2);
g2d.fillRect((int)_startPosX + 35, (int)_startPosY + 23, 4, 4);
g2d.setColor(Color.BLACK); //рисует контур
//корпус
g2d.drawRect((int)_startPosX, (int)_startPosY + 10, 40, 10);
//хвостовое крыло
g2d.drawLine((int)_startPosX, (int)_startPosY + 10, (int)_startPosX, (int)_startPosY);
g2d.drawLine((int)_startPosX, (int)_startPosY, (int)_startPosX + 10, (int)_startPosY + 10);
//нос самолёта
g2d.drawLine((int)_startPosX + 40, (int)_startPosY + 15, (int)_startPosX + 50, (int)_startPosY + 16);
g2d.drawLine((int)_startPosX + 40, (int)_startPosY + 10, (int)_startPosX + 47, (int)_startPosY + 15);
g2d.drawLine((int)_startPosX + 40, (int)_startPosY + 20, (int)_startPosX + 50, (int)_startPosY + 15);
//отрисовка иллюминаторов
_airplaneWindow.DrawAirplaneWindow(Airbus.GetColor(), g, _startPosX, _startPosY);
}
//смена границ формы отрисовки
public void ChangeBorders(int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_pictureWidth <= _airbusWidth || _pictureHeight <= _airbusHeight)
{
_pictureWidth = null;
_pictureHeight = null;
return;
}
if (_startPosX + _airbusWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _airbusWidth;
}
if (_startPosY + _airbusHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _airbusHeight;
}
}
}