diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..f77873e --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/src/main/java/kvr/missilecruiser_hard/ControllerMissileCruiser.java b/src/main/java/kvr/missilecruiser_hard/ControllerMissileCruiser.java index 0a56714..3a5ae2f 100644 --- a/src/main/java/kvr/missilecruiser_hard/ControllerMissileCruiser.java +++ b/src/main/java/kvr/missilecruiser_hard/ControllerMissileCruiser.java @@ -1,16 +1,65 @@ package kvr.missilecruiser_hard; +import javafx.event.ActionEvent; import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.paint.Color; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; + +import java.util.Random; public class ControllerMissileCruiser { + private DrawingMissileCruiser drawingMissileCruiser; + private GraphicsContext graphicsContext; + private Random random; + + @FXML + private Canvas mainCanvas; + + @FXML + private void initialize() { + drawingMissileCruiser = new DrawingMissileCruiser(); + graphicsContext = mainCanvas.getGraphicsContext2D(); + + random = new Random(); + } + + private void DrawOnCanvas(){ + drawingMissileCruiser.DrawTransport(graphicsContext); + } + @FXML protected void buttonCreate_Click() { + drawingMissileCruiser.Init( + random.nextInt(100, 300), random.nextInt(1000, 3000), + Color.rgb(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)), + Color.rgb(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)), + random.nextBoolean(), random.nextBoolean(), random.nextBoolean() + ); + drawingMissileCruiser.SetPictureSize((int) mainCanvas.getWidth(), (int) mainCanvas.getHeight()); + drawingMissileCruiser.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100)); + + DrawOnCanvas(); } @FXML - protected void buttonsMove_Click() { - //System.out.println(System.getProperty("java.class.path")); + protected void buttonsMove_Click(ActionEvent event) { + String name = ((Button) event.getSource()).getId(); + + boolean result = switch (name) { + case "buttonUp" -> drawingMissileCruiser.MoveTransport(DirectionType.Up); + case "buttonDown" -> drawingMissileCruiser.MoveTransport(DirectionType.Down); + case "buttonLeft" -> drawingMissileCruiser.MoveTransport(DirectionType.Left); + case "buttonRight" -> drawingMissileCruiser.MoveTransport(DirectionType.Right); + default -> false; + }; + + if (result) + { + DrawOnCanvas(); + } } } \ No newline at end of file diff --git a/src/main/java/kvr/missilecruiser_hard/DrawingMissileCruiser.java b/src/main/java/kvr/missilecruiser_hard/DrawingMissileCruiser.java index 945f9ac..18f0859 100644 --- a/src/main/java/kvr/missilecruiser_hard/DrawingMissileCruiser.java +++ b/src/main/java/kvr/missilecruiser_hard/DrawingMissileCruiser.java @@ -4,6 +4,8 @@ import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; import javafx.scene.paint.Color; +import java.util.Objects; + public class DrawingMissileCruiser { /// Класс-сущность private EntityMissileCruiser entityMissileCruiser; @@ -139,10 +141,10 @@ public class DrawingMissileCruiser { } } - private final Image cruiserContourImg = new Image("images/cruiser_contour.png"); - private final Image vlsSideImg = new Image("images/cruiser_vls_sides.png"); - private final Image vlsCenterImg = new Image("images/cruiser_vls_center.png"); - private final Image helipadImg = new Image("images/cruiser_helipad.png"); + public Image cruiserContourImg = new Image(Objects.requireNonNull(getClass().getResource("images/cruiser_contour.png")).toExternalForm()); + public Image vlsSideImg = new Image(Objects.requireNonNull(getClass().getResource("images/cruiser_vls_sides.png")).toExternalForm()); + public Image vlsCenterImg = new Image(Objects.requireNonNull(getClass().getResource("images/cruiser_vls_center.png")).toExternalForm()); + public Image helipadImg = new Image(Objects.requireNonNull(getClass().getResource("images/cruiser_helipad.png")).toExternalForm()); /// /// Прорисовка объекта @@ -155,20 +157,18 @@ public class DrawingMissileCruiser { return; } - double[][] contourPolygon = new double[][] { - {posX + 11, posY}, - {posX + 116, posY}, - {posX + 149, posY + 17}, - {posX + 116, posY + 34}, - {posX + 10, posY + 34}, - {posX, posY + 29}, - {posX, posY + 5} + // Fuck JavaFX, I had to use SUBPIXEL offsets to not see antialiasing artifacts + double[] contourPolygonX = new double[] { + posX + 10.75, posX + 116.25, posX + 150, posX + 116.25, posX + 10.75, posX + 0.5, posX + 0.5 + }; + double[] contourPolygonY = new double[] { + posY + 0.5, posY + 0.5, posY + 17.5, posY + 34.5, posY + 34.5, posY + 29.5, posY + 5.5 }; gc.clearRect(0, 0, pictureWidth, pictureHeight); gc.setFill(entityMissileCruiser.getPrimaryColor()); - gc.fillPolygon(contourPolygon[0], contourPolygon[1], contourPolygon.length); + gc.fillPolygon(contourPolygonX, contourPolygonY, contourPolygonX.length); if (entityMissileCruiser.getVLS_Sides()) { @@ -186,7 +186,7 @@ public class DrawingMissileCruiser { if (entityMissileCruiser.getHelipad()) { gc.setFill(entityMissileCruiser.getSecondaryColor()); - gc.fillOval(posX + 2, posY + 9, 16, 16); + gc.fillOval(posX + 2.5, posY + 9.5, 16, 16); gc.drawImage(helipadImg, posX, posY, entityWidth, entityHeight); } diff --git a/src/main/resources/kvr/missilecruiser_hard/ViewMissileCruiser.fxml b/src/main/resources/kvr/missilecruiser_hard/ViewMissileCruiser.fxml index b460049..48f5cea 100644 --- a/src/main/resources/kvr/missilecruiser_hard/ViewMissileCruiser.fxml +++ b/src/main/resources/kvr/missilecruiser_hard/ViewMissileCruiser.fxml @@ -1,13 +1,15 @@ + +