2022-10-28 15:45:35 +04:00
|
|
|
import java.awt.*;
|
2022-10-28 21:18:49 +04:00
|
|
|
import java.util.Random;
|
2022-10-28 15:45:35 +04:00
|
|
|
|
|
|
|
class DrawingAircraft
|
|
|
|
{
|
|
|
|
public EntityAircraft AirFighter;
|
2022-11-10 16:44:45 +04:00
|
|
|
public IDrawingEngines drawingEngines;
|
2022-10-28 15:45:35 +04:00
|
|
|
|
2022-11-10 16:44:45 +04:00
|
|
|
protected float _startPosX;
|
|
|
|
protected float _startPosY;
|
2022-10-28 15:45:35 +04:00
|
|
|
|
|
|
|
private int _pictureWidth = -1;
|
|
|
|
private int _pictureHeight = -1;
|
|
|
|
|
|
|
|
private int _airFighterWidth = 195;
|
|
|
|
private int _airFighterHeight = 166;
|
|
|
|
|
2022-11-10 16:44:45 +04:00
|
|
|
private void peekRandomEngines(Color color) {
|
2022-10-28 21:18:49 +04:00
|
|
|
Random rnd = new Random();
|
2022-11-10 16:44:45 +04:00
|
|
|
int randEngine = rnd.nextInt(1, 4);
|
|
|
|
|
|
|
|
switch(randEngine) {
|
|
|
|
case 1:
|
|
|
|
drawingEngines = new DrawingEngines(rnd.nextInt(1, 8), color);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
drawingEngines = new DrawingTruncatedEngines(rnd.nextInt(1, 8), color);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
drawingEngines = new DrawingWavyEngines(rnd.nextInt(1, 8), color);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public DrawingAircraft(int speed, float weight, Color bodyColor)
|
|
|
|
{
|
|
|
|
AirFighter = new EntityAircraft(speed, weight, bodyColor);
|
|
|
|
peekRandomEngines(bodyColor);
|
|
|
|
}
|
2022-10-28 21:18:49 +04:00
|
|
|
|
2022-11-15 18:20:34 +04:00
|
|
|
public DrawingAircraft(EntityAircraft airFighter, IDrawingEngines engines)
|
|
|
|
{
|
|
|
|
AirFighter = airFighter;
|
|
|
|
this.drawingEngines = engines;
|
|
|
|
}
|
2022-11-10 16:44:45 +04:00
|
|
|
|
|
|
|
public DrawingAircraft(int speed, float weight, Color bodyColor, int airFighterWidth, int airFighterHeight)
|
|
|
|
{
|
|
|
|
this(speed, weight, bodyColor);
|
|
|
|
_airFighterWidth = airFighterWidth;
|
|
|
|
_airFighterHeight = airFighterHeight;
|
2022-10-28 15:45:35 +04:00
|
|
|
}
|
|
|
|
|
2022-11-10 16:44:45 +04:00
|
|
|
|
2022-10-28 15:45:35 +04:00
|
|
|
public void SetPosition(int x, int y, int width, int height)
|
|
|
|
{
|
|
|
|
if (width < _airFighterWidth || height < _airFighterHeight) return;
|
|
|
|
|
|
|
|
if (x + _airFighterWidth > width || x < 0) return;
|
|
|
|
if (y + _airFighterHeight > height || y < 0) return;
|
|
|
|
|
|
|
|
_startPosX = x;
|
|
|
|
_startPosY = y;
|
|
|
|
|
|
|
|
_pictureWidth = width;
|
|
|
|
_pictureHeight = height;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void MoveTransport(Direction direction)
|
|
|
|
{
|
|
|
|
if (_pictureWidth == -1 || _pictureHeight == -1)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
switch (direction)
|
|
|
|
{
|
|
|
|
case Right:
|
|
|
|
if (_startPosX + _airFighterWidth + AirFighter.Step < _pictureWidth)
|
|
|
|
{
|
|
|
|
_startPosX += AirFighter.Step;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case Left:
|
|
|
|
if (_startPosX - AirFighter.Step > 0)
|
|
|
|
{
|
|
|
|
_startPosX -= AirFighter.Step;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case Up:
|
|
|
|
if (_startPosY - AirFighter.Step > 0)
|
|
|
|
{
|
|
|
|
_startPosY -= AirFighter.Step;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case Down:
|
|
|
|
if (_startPosY + _airFighterHeight + AirFighter.Step < _pictureHeight)
|
|
|
|
{
|
|
|
|
_startPosY += AirFighter.Step;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void DrawTransport(Graphics2D g)
|
|
|
|
{
|
|
|
|
if (_pictureWidth == -1 || _pictureHeight == -1)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
g.setPaint(AirFighter.BodyColor);
|
|
|
|
|
|
|
|
Polygon front = new Polygon();
|
|
|
|
front.addPoint((int)(_startPosX + 160), (int)(_startPosY + 70));
|
|
|
|
front.addPoint((int)(_startPosX + 195), (int)(_startPosY + 83));
|
|
|
|
front.addPoint((int)(_startPosX + 160), (int)(_startPosY + 96));
|
|
|
|
|
|
|
|
|
|
|
|
Polygon tailTop = new Polygon();
|
|
|
|
tailTop.addPoint((int)(_startPosX), (int)(_startPosY + 30));
|
|
|
|
tailTop.addPoint((int)(_startPosX), (int)(_startPosY + 70));
|
|
|
|
tailTop.addPoint((int)(_startPosX + 25), (int)(_startPosY + 70));
|
|
|
|
tailTop.addPoint((int)(_startPosX + 25), (int)(_startPosY + 55));
|
|
|
|
|
|
|
|
|
|
|
|
Polygon tailBottom = new Polygon();
|
|
|
|
tailBottom.addPoint((int)(_startPosX), (int)(_startPosY + 96));
|
|
|
|
tailBottom.addPoint((int)(_startPosX), (int)(_startPosY + 136));
|
|
|
|
tailBottom.addPoint((int)(_startPosX + 25), (int)(_startPosY + 111));
|
|
|
|
tailBottom.addPoint((int)(_startPosX + 25), (int)(_startPosY + 96));
|
|
|
|
|
|
|
|
|
|
|
|
Polygon wingTop = new Polygon();
|
|
|
|
wingTop.addPoint((int)(_startPosX + 100), (int)(_startPosY));
|
|
|
|
wingTop.addPoint((int)(_startPosX + 100), (int)(_startPosY + 70));
|
|
|
|
wingTop.addPoint((int)(_startPosX + 75), (int)(_startPosY + 70));
|
|
|
|
wingTop.addPoint((int)(_startPosX + 90), (int)(_startPosY));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Polygon wingBottom = new Polygon();
|
|
|
|
wingBottom.addPoint((int)(_startPosX + 100), (int)(_startPosY + 96));
|
|
|
|
wingBottom.addPoint((int)(_startPosX + 100), (int)(_startPosY + 166));
|
|
|
|
wingBottom.addPoint((int)(_startPosX + 90), (int)(_startPosY + 166));
|
|
|
|
wingBottom.addPoint((int)(_startPosX + 75), (int)(_startPosY + 96));
|
|
|
|
|
|
|
|
g.fillPolygon(front);
|
|
|
|
g.drawPolygon(tailTop);
|
|
|
|
g.drawPolygon(tailBottom);
|
|
|
|
g.drawPolygon(wingTop);
|
|
|
|
g.drawPolygon(wingBottom);
|
|
|
|
g.drawRect((int)_startPosX, (int)_startPosY + 70, 160, 26);
|
2022-10-28 21:18:49 +04:00
|
|
|
|
|
|
|
drawingEngines.draw(g, (int)_startPosX, (int)_startPosY);
|
2022-10-28 15:45:35 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
public void ChangeBorders(int width, int height)
|
|
|
|
{
|
|
|
|
_pictureWidth = width;
|
|
|
|
_pictureHeight = height;
|
|
|
|
if (_pictureWidth <= _airFighterWidth || _pictureHeight <= _airFighterHeight)
|
|
|
|
{
|
|
|
|
_pictureWidth = -1;
|
|
|
|
_pictureHeight = -1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (_startPosX + _airFighterWidth > _pictureWidth)
|
|
|
|
{
|
|
|
|
_startPosX = _pictureWidth - _airFighterWidth;
|
|
|
|
}
|
|
|
|
if (_startPosY + _airFighterHeight > _pictureHeight)
|
|
|
|
{
|
|
|
|
_startPosY = _pictureHeight - _airFighterHeight;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-11-10 16:44:45 +04:00
|
|
|
public Point getLeftTop() {
|
|
|
|
return new Point((int)_startPosX, (int)_startPosY);
|
|
|
|
}
|
|
|
|
|
|
|
|
public Point getRightBottom() {
|
|
|
|
return new Point((int)_startPosX + _airFighterWidth, (int)_startPosY + _airFighterHeight);
|
|
|
|
}
|
2022-10-28 15:45:35 +04:00
|
|
|
}
|
|
|
|
|