From 8cd51e127363e747463dea303b9e27db3eacb812 Mon Sep 17 00:00:00 2001
From: Augier Yoann <yoann.augier@etu.univ-amu.fr>
Date: Mon, 13 Nov 2023 15:18:09 +0100
Subject: [PATCH] Correction du SoundEngine

---
 src/main/java/engine/Kernel.java              | 14 ++++----
 .../java/engine/graphic/GraphicEngine.java    |  5 +++
 .../java/engine/graphic/ScoreComponent.java   | 33 +++++++++++++++++++
 src/main/java/engine/physic/PhysicEngine.java |  6 ++--
 .../{Sound.java => sound/SoundEngine.java}    | 23 +++++++++++--
 src/main/java/pong/PongApp.java               |  3 --
 6 files changed, 69 insertions(+), 15 deletions(-)
 create mode 100644 src/main/java/engine/graphic/ScoreComponent.java
 rename src/main/java/engine/{Sound.java => sound/SoundEngine.java} (61%)

diff --git a/src/main/java/engine/Kernel.java b/src/main/java/engine/Kernel.java
index ce33826..14abde2 100644
--- a/src/main/java/engine/Kernel.java
+++ b/src/main/java/engine/Kernel.java
@@ -3,24 +3,24 @@ package engine;
 import engine.graphic.GraphicEngine;
 import engine.physic.Coordinates2D;
 import engine.physic.Entity;
-import engine.physic.Movable;
+import engine.sound.SoundEngine;
 import engine.physic.PhysicEngine;
-import pong.PongApp;
 import pong.PongObject;
-import pong.PongRacket;
 
 import javax.swing.*;
 import java.awt.event.ActionEvent;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Random;
 
 public class Kernel {
 
     ArrayList<Engine> engines = new ArrayList<Engine>();
     PhysicEngine physicEngine;
     GraphicEngine graphicEngine;
+    SoundEngine soundEngine =new SoundEngine();
+    public static boolean isCollision = false;
+
 
     //public HashMap<PongObject, ImageComponent> pongObjectImageComponentHashMap = new HashMap<>();
 
@@ -39,10 +39,12 @@ public class Kernel {
         engines.add(this.graphicEngine);//
         this.physicEngine = new PhysicEngine();
         engines.add(physicEngine);
+        engines.add(soundEngine);
         pongObjectEntityHashMap = physicEngine.pongObjectEntityHashMap;
 
         this.update();
         this.setKeysAndKeyReleasedListeners((JPanel) this.graphicEngine.getContentPane());
+        soundEngine = new SoundEngine();
     }
 
     /**
@@ -74,9 +76,7 @@ public class Kernel {
              ) {
             engine.update();
         }
-        // Repainting the grid
-        graphicEngine.repaint();
-        graphicEngine.revalidate();
+
     }
 
     /**
diff --git a/src/main/java/engine/graphic/GraphicEngine.java b/src/main/java/engine/graphic/GraphicEngine.java
index 551b88c..8fef044 100644
--- a/src/main/java/engine/graphic/GraphicEngine.java
+++ b/src/main/java/engine/graphic/GraphicEngine.java
@@ -2,6 +2,7 @@ package engine.graphic;
 
 import engine.Engine;
 import engine.Kernel;
+import engine.physic.Coordinates2D;
 import pong.PongApp;
 import pong.PongObject;
 
@@ -48,6 +49,7 @@ public class GraphicEngine extends JFrame implements Engine {
                 throw new RuntimeException(e);
             }
         }
+        getContentPane().add(new ScoreComponent(new Coordinates2D(100, 100), new Coordinates2D(670, 100), PongApp.score1, PongApp.score2));
         repaint();
         revalidate();
     }
@@ -63,5 +65,8 @@ public class GraphicEngine extends JFrame implements Engine {
         this.getContentPane().add(new RectangleComponent(100, 100, PongApp.rectWidth, PongApp.rectHeight));
     }
 
+    public void drawScore(int score1, int score2){
+        this.getContentPane().add(new ScoreComponent(new Coordinates2D(100, 100), new Coordinates2D(500, 100), score1, score2));
+    }
 
 }
diff --git a/src/main/java/engine/graphic/ScoreComponent.java b/src/main/java/engine/graphic/ScoreComponent.java
new file mode 100644
index 0000000..bbde00a
--- /dev/null
+++ b/src/main/java/engine/graphic/ScoreComponent.java
@@ -0,0 +1,33 @@
+package engine.graphic;
+
+import engine.physic.Coordinates2D;
+import pong.PongApp;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class ScoreComponent extends JComponent {
+    private int score1;
+    private int score2;
+    Coordinates2D position1;
+    Coordinates2D position2;
+
+    public ScoreComponent(Coordinates2D position1, Coordinates2D position2, int score1, int score2) {
+        this.score1 = score1;
+        this.score2 = score2;
+        this.position1 = position1;
+        this.position2 = position2;
+        this.setSize(PongApp.width, PongApp.height);
+        this.setVisible(true);
+        this.setLayout(null);
+    }
+
+    @Override
+    public void paintComponent(Graphics g) {
+        super.paintComponent(g);
+        g.setColor(Color.WHITE);
+        g.setFont(new Font("Anton", Font.PLAIN, 50));
+        g.drawString(String.valueOf(score1), position1.getX(), position1.getY());
+        g.drawString(String.valueOf(score2), position2.getX(), position2.getY());
+    }
+}
diff --git a/src/main/java/engine/physic/PhysicEngine.java b/src/main/java/engine/physic/PhysicEngine.java
index cb371dc..f56f2e8 100644
--- a/src/main/java/engine/physic/PhysicEngine.java
+++ b/src/main/java/engine/physic/PhysicEngine.java
@@ -2,7 +2,6 @@ package engine.physic;
 
 import engine.Engine;
 import engine.Kernel;
-import engine.Sound;
 import pong.PongObject;
 
 import java.util.HashMap;
@@ -37,8 +36,9 @@ public class PhysicEngine implements Engine {
                     if(!po2.getName().equals("Ball")){
                         if(checkCollision(pongObjectEntityHashMap.get(pongObject), pongObjectEntityHashMap.get(po2))){
                             i++;
-                            String collisionPath = "src/main/resources/Sound/collision.wav";
-                            Sound.playMusic(collisionPath);
+                            //String collisionPath = "src/main/resources/Sound/collision.wav";
+                            //Sound.playMusic(collisionPath);
+                            Kernel.isCollision = true;
                             System.out.println("Collision " + i);
                             pongObjectEntityHashMap.get(pongObject).setPosition(previousPosition);
                             if(i % 2 == 0){
diff --git a/src/main/java/engine/Sound.java b/src/main/java/engine/sound/SoundEngine.java
similarity index 61%
rename from src/main/java/engine/Sound.java
rename to src/main/java/engine/sound/SoundEngine.java
index c3ddf0b..edb2954 100644
--- a/src/main/java/engine/Sound.java
+++ b/src/main/java/engine/sound/SoundEngine.java
@@ -1,11 +1,16 @@
-package engine;
+package engine.sound;
+
+import engine.Engine;
+import engine.Kernel;
 
 import java.io.File;
 import javax.sound.sampled.AudioInputStream;
 import javax.sound.sampled.AudioSystem;
 import javax.sound.sampled.Clip;
 
-public class Sound {
+public class SoundEngine implements Engine {
+
+    public SoundEngine(){}
     public static void playMusic(String location){
         try {
             File musicPath = new File(location);
@@ -23,5 +28,19 @@ public class Sound {
             System.out.println(e);
         }
     }
+
+    @Override
+    public void update() {
+        if (Kernel.isCollision){
+            String collisionPath = "src/main/resources/Sound/collision.wav";
+            SoundEngine.playMusic(collisionPath);
+            Kernel.isCollision = false;
+        }
+    }
+
+    @Override
+    public void restart() {
+
+    }
 }
 
diff --git a/src/main/java/pong/PongApp.java b/src/main/java/pong/PongApp.java
index 85645fa..51b1521 100644
--- a/src/main/java/pong/PongApp.java
+++ b/src/main/java/pong/PongApp.java
@@ -1,6 +1,5 @@
 package pong;
 
-import engine.Sound;
 import engine.physic.Coordinates2D;
 import engine.Kernel;
 
@@ -36,8 +35,6 @@ public class PongApp {
 
         int ballWidth = 32;
 
-        String son = "src/main/resources/Sound/minecraft_butdrill.wav";
-        Sound.playMusic(son);
         PongRacket leftRacket = new PongRacket("Left racket", "src/main/resources/pong/raquette.png", new Coordinates2D(widthDiff + 5, height/2 - racketHeight/2), racketWidth, racketHeight);
         components.add(leftRacket);
 
-- 
GitLab