From 97e94c4a21eb6a06860a9a04a3bc067ff6f580c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz>
Date: Mon, 25 Sep 2023 10:11:26 +0200
Subject: [PATCH] Allow define position for dragons.

---
 src/main/java/lab/App.java            | 37 +++++++++++++++++++++++++--
 src/main/java/lab/GameController.java |  5 ++--
 src/main/java/lab/World.java          | 15 +++--------
 3 files changed, 42 insertions(+), 15 deletions(-)

diff --git a/src/main/java/lab/App.java b/src/main/java/lab/App.java
index 71244db..d5f6089 100644
--- a/src/main/java/lab/App.java
+++ b/src/main/java/lab/App.java
@@ -1,7 +1,10 @@
 package lab;
 
+import java.util.Random;
+
 import javafx.application.Application;
 import javafx.fxml.FXMLLoader;
+import javafx.geometry.Point2D;
 import javafx.scene.Scene;
 import javafx.scene.layout.BorderPane;
 import javafx.stage.Stage;
@@ -13,6 +16,7 @@ import javafx.stage.WindowEvent;
  */
 public class App extends Application {
 
+	private static final int DEFAULT_NUMBER_OF_DRAGONS = 2;
 	public static void main(String[] args) {
 		launch(args);
 	}
@@ -32,10 +36,11 @@ public class App extends Application {
 			
 			primaryStage.setScene(scene);
 			primaryStage.resizableProperty().set(false);
-			primaryStage.setTitle("Java 1 - 6th laboratory");
+			primaryStage.setTitle("Java 1");
 			primaryStage.show();
 			controller = loader.getController();
-			controller.startGame();
+			Point2D[][] dragonsInit = getDragonsInit(scene.getWidth(), scene.getHeight()); 
+			controller.startGame(dragonsInit);
 			//Exit program when main window is closed
 			primaryStage.setOnCloseRequest(this::exitProgram);
 		} catch (Exception e) {
@@ -45,6 +50,34 @@ public class App extends Application {
 	
 
 	
+	private Point2D[][] getDragonsInit(double width, double height) {
+		
+		//ask whether would like to enter dragons
+		
+		//return default
+		return getDefaultDragonsInit(width, height);
+		
+	}
+
+
+
+	private Point2D[][] getDefaultDragonsInit(double width, double height) {
+		Random rnd = new Random();
+		Point2D[][] result = new Point2D[DEFAULT_NUMBER_OF_DRAGONS][];
+		for (int i = 0; i < result.length; i++) {
+			int x = rnd.nextInt((int) width);
+			int y = rnd.nextInt((int) height);
+			int vel_x = (rnd.nextInt(10) - 5) * 10;
+			int vel_y = (rnd.nextInt(10) - 5) * 10;
+			result[i] = new Point2D[2];
+			result[i][0] = new Point2D(x, y);
+			result[i][1] = new Point2D(vel_x, vel_y);
+		}
+		return result;
+	}
+
+
+
 	private void exitProgram(WindowEvent evt) {
 		controller.stopGame();
 		System.exit(0);
diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java
index a13d519..4519477 100644
--- a/src/main/java/lab/GameController.java
+++ b/src/main/java/lab/GameController.java
@@ -3,6 +3,7 @@
 import javafx.animation.AnimationTimer;
 import javafx.beans.value.ObservableValue;
 import javafx.fxml.FXML;
+import javafx.geometry.Point2D;
 import javafx.scene.canvas.Canvas;
 import javafx.scene.control.Label;
 import javafx.scene.control.Slider;
@@ -31,8 +32,8 @@ public class GameController {
 	public GameController() {
 	}
 	
-	public void startGame() {
-		this.world = new World(canvas.getWidth(), canvas.getHeight());	
+	public void startGame(Point2D[][] dragonInit) {
+		this.world = new World(canvas.getWidth(), canvas.getHeight(), dragonInit);	
 		//Draw scene on a separate thread to avoid blocking UI.
 		animationTimer = new DrawingThread(canvas, world);
 		angleSlider.valueProperty().addListener(this::angleChanged);
diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java
index 817ed95..b233dcd 100644
--- a/src/main/java/lab/World.java
+++ b/src/main/java/lab/World.java
@@ -1,13 +1,10 @@
 package lab;
 
-import java.util.Random;
-
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
 public class World {
 	
-	private final static int NUMBER_OF_DRAGONS = 2;
 	
 	private double width;
 	private double height;
@@ -20,22 +17,18 @@ public class World {
 	
 	private DrawableSimulable []entities; 
 	
-	public World(double width, double height) {
+	public World(double width, double height, Point2D [][]dragonInit) {
 		super();
 		this.width = width;
 		this.height = height;
 		Cannon cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20));
-		entities = new DrawableSimulable[2 + NUMBER_OF_DRAGONS];
+		entities = new DrawableSimulable[2 + dragonInit.length];
 		entities[0] = cannon;
 		entities[1] = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40);
-		Random rnd = new Random();
 		
 		for (int i = 2; i < entities.length; i++) {
-			int x = rnd.nextInt((int) width);
-			int y = rnd.nextInt((int) height);
-			int vel_x = (rnd.nextInt(10) - 5) * 10;
-			int vel_y = (rnd.nextInt(10) - 5) * 10;
-			entities[i] = new Dragon(this, new Point2D(x, y), new Point2D(vel_x, vel_y));
+		
+			entities[i] = new Dragon(this, dragonInit[i - 2][0], dragonInit[i - 2][1]);
 		}
 	}
 
-- 
GitLab