From 69c192ccf41163c55b73ea52ccaa50b3b43b3458 Mon Sep 17 00:00:00 2001
From: koz01 <koz01@PCFEIB207-060.msad.vsb.cz>
Date: Wed, 2 Nov 2022 08:37:29 +0100
Subject: [PATCH] solution

---
 src/main/java/lab/GameController.java | 23 +++++++++++++++++++++++
 src/main/java/lab/HitListener.java    |  1 +
 src/main/java/lab/World.java          | 20 ++++++++++++++++++--
 3 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java
index a13d519..8931134 100644
--- a/src/main/java/lab/GameController.java
+++ b/src/main/java/lab/GameController.java
@@ -32,6 +32,7 @@ public class GameController {
 	}
 	
 	public void startGame() {
+		
 		this.world = new World(canvas.getWidth(), canvas.getHeight());	
 		//Draw scene on a separate thread to avoid blocking UI.
 		animationTimer = new DrawingThread(canvas, world);
@@ -40,6 +41,14 @@ public class GameController {
 		
 		strengthSlider.valueProperty().addListener(this::strenghtChanged);
 		world.setCannonStrength(strengthSlider.getValue());
+		world.setGameListener(new EmptyGameListener() {
+			@Override
+			public void stateChanged(int shoots, int hits) {
+				GameController.this.setShoots(shoots);
+				GameController.this.setHits(hits);
+
+			}
+		});
 		animationTimer.start();
 	}
 
@@ -63,4 +72,18 @@ public class GameController {
 			, Number oldValue, Number newValue) {
 		world.setCannonStrength(newValue.doubleValue());
 	}
+
+	
+	
+	
+	
+	private void setHits(int hits) {
+		this.hits.setText(""+hits);
+	}
+
+	private void setShoots(int shoots) {
+		this.shoots.setText(""+shoots);
+	}
+	
+	
 }
diff --git a/src/main/java/lab/HitListener.java b/src/main/java/lab/HitListener.java
index 51cc8dd..d1b4b89 100644
--- a/src/main/java/lab/HitListener.java
+++ b/src/main/java/lab/HitListener.java
@@ -1,5 +1,6 @@
 package lab;
 
+@FunctionalInterface
 public interface HitListener {
 	void hit();
 }
diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java
index 817ed95..d357add 100644
--- a/src/main/java/lab/World.java
+++ b/src/main/java/lab/World.java
@@ -21,13 +21,24 @@ public class World {
 	private DrawableSimulable []entities; 
 	
 	public World(double width, double height) {
-		super();
+		
 		this.width = width;
 		this.height = height;
 		Cannon cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20));
+		BulletAnimated bullet;
 		entities = new DrawableSimulable[2 + NUMBER_OF_DRAGONS];
 		entities[0] = cannon;
-		entities[1] = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40);
+		entities[1] = bullet = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40);
+		bullet.setHitListener(this::hits);
+				
+				/*new HitListener() {
+			@Override
+			public void hit() {
+				hits++;
+				gameListener.stateChanged(shoots, hits);
+			}
+			
+		});*/
 		Random rnd = new Random();
 		
 		for (int i = 2; i < entities.length; i++) {
@@ -39,6 +50,11 @@ public class World {
 		}
 	}
 
+	private void hits() {
+		hits++;
+		gameListener.stateChanged(shoots, hits);
+	}
+
 	public Point2D getCanvasPoint(Point2D worldPoint) {
 		return new Point2D(worldPoint.getX(), height - worldPoint.getY());
 	}
-- 
GitLab