diff --git a/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java b/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java
index 7f98e2711f12a62ca8eb7098dccb18dcbf50c918..7746846c35a21b81f6edbc2d8b720ea23bbde129 100644
--- a/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java
+++ b/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java
@@ -286,8 +286,11 @@ public class CreationOuvertureActivity extends AppCompatActivity{
     public void confirmer(View view) {
         Ouverture ouverture = new Ouverture(pieceDepart.getMurOrientation(orientationPieceDepart), pieceArrivee.getMurOrientation(orientationPieceArrivee), rectDepart, rectArrivee);
         habitat.addOuverture(ouverture);
+        //On re-set correctement les murs (pas besoin finalemnt...)
+        Log.i("testGetMur2", ouverture.getMurDepart().getPiece()+"");
+        Log.i("testGetMur2", ouverture.getMurArrivee().getPiece()+"");
+
         enregistrement();
-        Log.i("testOuverture", String.valueOf(habitat.toJSON()));
     }
 
     public void enregistrement(){
diff --git a/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java b/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java
index 6c696efbd132bed2115337dc8d6fef44d0d6b0ea..50b8a237433b4a94c8c6b5e0dee49cbb33698de1 100644
--- a/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java
+++ b/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java
@@ -2,39 +2,41 @@ package com.example.myhabitat;
 
 import android.content.Context;
 import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
+import android.graphics.*;
 import android.hardware.Sensor;
 import android.hardware.SensorEvent;
 import android.hardware.SensorEventListener;
 import android.hardware.SensorManager;
 import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
+import android.view.*;
 import android.view.animation.Animation;
 import android.view.animation.RotateAnimation;
 import android.widget.ImageView;
+import android.widget.TextView;
 import android.widget.Toast;
 import androidx.appcompat.app.AppCompatActivity;
 import android.os.Bundle;
-import habitat.Habitat;
-import habitat.Mur;
-import habitat.Orientation;
-import habitat.Piece;
+import habitat.*;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.time.Duration;
+import java.util.ArrayList;
+import java.util.HashMap;
 
 public class ModeImmersionActivity extends AppCompatActivity implements SensorEventListener {
     Habitat habitat;
     Mur murEnCours;
     Piece pieceEnCours;
+    TextView textViewPiece;
     private SensorManager sensorManager;
     private ImageView imageViewBoussole;
     private float debut = 0;
     private ImageView imageViewMur;
+    private SurfaceView surfaceView;
+    private Paint myPaint;
+    private Canvas canvas;
+    private ArrayList<Rect> rectangles;
+    private HashMap<Rect, Piece> pieceArriveeRect;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -52,6 +54,9 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
 
         setContentView(R.layout.activity_mode_immersion);
 
+        rectangles = new ArrayList<Rect>();
+        pieceArriveeRect = new HashMap<Rect, Piece>();
+
         pieceEnCours = habitat.getPieces().get(0);
         affichePiece(pieceEnCours);
         imageViewBoussole = findViewById(R.id.imageViewBoussole);
@@ -59,7 +64,40 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
 
         sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
 
+        surfaceView = findViewById(R.id.surfaceView);
+        surfaceView.setZOrderOnTop(true);
+        surfaceView.getHolder().setFormat(PixelFormat.TRANSPARENT);
+
+        canvas = surfaceView.getHolder().lockCanvas();
+
+        myPaint = new Paint();
+        myPaint.setStrokeWidth(5);
+        myPaint.setColor(Color.RED);
+        myPaint.setStyle(Paint.Style.STROKE);
 
+
+        imageViewMur.setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                boolean res = false;
+                Rect r = null;
+                int touchX = (int) event.getX();
+                int touchY = (int) event.getY();
+                for(Rect rect : rectangles){
+                    if(rect.contains(touchX,touchY)){
+                        res = true;
+                        r = rect;
+                    }
+                }
+                if(res && r!=null){
+                    Log.i("testTouchRect", "je touche rect="+r.toString());
+                    Log.i("testHM", pieceArriveeRect+"");
+                    pieceEnCours = pieceArriveeRect.get(r);
+                    afficheMur();
+                }
+                return true;
+            }
+        });
     }
 
     public boolean onCreateOptionsMenu(Menu menu) {
@@ -85,9 +123,15 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
 
     public void affichePiece(Piece piece){
         pieceEnCours = piece;
-        ImageView imageViewMur = findViewById(R.id.imageViewMur);
+        imageViewMur = findViewById(R.id.imageViewMur);
         murEnCours = piece.getMurs().get(0);
 
+        afficheMur();
+    }
+
+    public void afficheMur(){
+        textViewPiece = findViewById(R.id.textViewPiece);
+        textViewPiece.setText("piece="+pieceEnCours.getNom());
         //On récupère la photo
         FileInputStream fis = null;
         try {
@@ -99,25 +143,60 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
             Bitmap bm = BitmapFactory.decodeStream(fis);
             imageViewMur.setImageBitmap(bm);
         }else{
-            Log.i("testDrawable", "pas de photo");
+            //Log.i("testDrawable", "pas de photo");
             imageViewMur.setImageDrawable(getDrawable(R.drawable.imagemur));
         }
+        afficheOuvertures();
     }
 
-    public void afficheMur(){
-        //On récupère la photo
-        FileInputStream fis = null;
-        try {
-            fis = openFileInput(murEnCours.getId()+".data");
-        } catch (FileNotFoundException e) {
-            //throw new RuntimeException(e);
-        }
-        if (fis != null) {
-            Bitmap bm = BitmapFactory.decodeStream(fis);
-            imageViewMur.setImageBitmap(bm);
+    public void afficheOuvertures(){
+        ArrayList<Ouverture> ouvertures = habitat.getOuvertureDeMur(murEnCours);
+        Log.i("testOuvertures", ouvertures+"");
+        rectangles.clear();
+        pieceArriveeRect.clear();
+
+        if(ouvertures.isEmpty()){
+            //Il n'y a pas d'ouvertures à afficher
+            try {
+                canvas = surfaceView.getHolder().lockCanvas();
+                synchronized (surfaceView.getHolder()) {
+                    canvas.drawColor(0, PorterDuff.Mode.CLEAR);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                if (canvas != null) {
+                    surfaceView.getHolder().unlockCanvasAndPost(canvas);
+                }
+            }
         }else{
-            Log.i("testDrawable", "pas de photo");
-            imageViewMur.setImageDrawable(getDrawable(R.drawable.imagemur));
+            for(Ouverture ouverture : ouvertures) {
+                //Si mur de depart
+                if (murEnCours.getId() == ouverture.getMurDepart().getId()) {
+                    rectangles.add(ouverture.getRectDepart());
+                    Log.i("testGetPiece", ouverture.getMurArrivee()+"");
+                    pieceArriveeRect.put(ouverture.getRectDepart(), ouverture.getMurArrivee().getPiece());
+                } else {
+                    //Si mur d'arrivee
+                    rectangles.add(ouverture.getRectArrivee());
+                    pieceArriveeRect.put(ouverture.getRectArrivee(), ouverture.getMurDepart().getPiece());
+                }
+            }
+            try {
+                canvas = surfaceView.getHolder().lockCanvas();
+                synchronized (surfaceView.getHolder()) {
+                    for(Rect rect : rectangles){
+                        canvas.drawRect(rect, myPaint);
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                if (canvas != null) {
+                    surfaceView.getHolder().unlockCanvasAndPost(canvas);
+                }
+            }
+
         }
     }
 
@@ -140,16 +219,20 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
         imageViewBoussole.startAnimation(rotateAnimation);
 
 
+        Mur newMur = null;
         if(angle<(-45) && angle>=(-135)){
-            murEnCours = pieceEnCours.getMurOrientation(Orientation.EST);
+            newMur = pieceEnCours.getMurOrientation(Orientation.EST);
         } else if (angle<(-135) && angle>=(-225)) {
-            murEnCours = pieceEnCours.getMurOrientation(Orientation.SUD);
+            newMur = pieceEnCours.getMurOrientation(Orientation.SUD);
         } else if (angle<(-225) && angle>=(-315)) {
-            murEnCours = pieceEnCours.getMurOrientation(Orientation.OUEST);
+            newMur = pieceEnCours.getMurOrientation(Orientation.OUEST);
         }else{
-            murEnCours = pieceEnCours.getMurOrientation(Orientation.NORD);
+            newMur = pieceEnCours.getMurOrientation(Orientation.NORD);
+        }
+        if(newMur != murEnCours){
+            murEnCours = newMur;
+            afficheMur();
         }
-        afficheMur();
 
 
         //Maj de l'angle de depart
diff --git a/app/src/main/java/habitat/Habitat.java b/app/src/main/java/habitat/Habitat.java
index 84512537b39cf5f7d89923f6ea427b09bb4e552b..31574e6564821a6307ed6339ed3623565339b178 100644
--- a/app/src/main/java/habitat/Habitat.java
+++ b/app/src/main/java/habitat/Habitat.java
@@ -1,5 +1,6 @@
 package habitat;
 
+import android.graphics.Rect;
 import android.os.Parcel;
 import android.os.Parcelable;
 import org.json.JSONArray;
@@ -93,6 +94,16 @@ public class Habitat implements Parcelable {
 
     public void addOuverture(Ouverture ouverture){
         ouvertures.add(ouverture);
+        for(Piece piece : pieces){
+            for(Mur mur : piece.getMurs()){
+                if(ouverture.getMurDepart().getId() == mur.getId()){
+                    ouverture.setMurDepart(mur);
+                }
+                if(ouverture.getMurArrivee().getId() == mur.getId()){
+                    ouverture.setMurArrivee(mur);
+                }
+            }
+        }
     }
 
     public void removeOuverture(Ouverture ouverture){
@@ -101,6 +112,15 @@ public class Habitat implements Parcelable {
 
     public void removePiece(Piece piece){
         pieces.remove(piece);
+        //On vérifie qu'il n'existe pas d'ouvertures
+        for(Mur mur : piece.getMurs()){
+            ArrayList<Ouverture> ouvertureArrayList = getOuvertureDeMur(mur);
+            if(!ouvertureArrayList.isEmpty()){
+                for(Ouverture ouverture : ouvertureArrayList){
+                    removeOuverture(ouverture);
+                }
+            }
+        }
     }
 
     public JSONObject toJSON(){
@@ -137,4 +157,26 @@ public class Habitat implements Parcelable {
     public int hashCode() {
         return Objects.hash(pieces, ouvertures);
     }
+
+    public ArrayList<Ouverture> getOuvertureDeMur(Mur mur){
+        ArrayList<Ouverture> ouvertureArrayList = new ArrayList<Ouverture>();
+        for(Ouverture ouverture : ouvertures){
+            if(ouverture.getMurDepart().getId() == (mur.getId()) || ouverture.getMurArrivee().getId() == (mur.getId())){
+                ouvertureArrayList.add(ouverture);
+            }
+        }
+        for(Ouverture ouverture : ouvertureArrayList) {
+            for (Piece piece : pieces) {
+                for (Mur mur1 : piece.getMurs()) {
+                    if (ouverture.getMurDepart().getId() == mur1.getId()) {
+                        ouverture.setMurDepart(mur1);
+                    }
+                    if (ouverture.getMurArrivee().getId() == mur1.getId()) {
+                        ouverture.setMurArrivee(mur1);
+                    }
+                }
+            }
+        }
+        return ouvertureArrayList;
+    }
 }
diff --git a/app/src/main/java/habitat/Mur.java b/app/src/main/java/habitat/Mur.java
index af1909db99d6002c8b40f2f6e0554e35225c3d15..793646545979ffafd2c163bab5c5160a5874850c 100644
--- a/app/src/main/java/habitat/Mur.java
+++ b/app/src/main/java/habitat/Mur.java
@@ -15,12 +15,6 @@ public class Mur implements Parcelable {
     private Orientation orientation;
     private int id; //Utile pour stocker la photo associée au mur
 
-    public Mur(Piece piece) {
-        this.piece = piece;
-        this.orientation = Orientation.SUD;  //Par défaut
-        id = FabriqueId.getInstance().getId();
-    }
-
     public Mur(Piece piece, Orientation orientation) {
         this.piece = piece;
         this.orientation = orientation;
@@ -56,6 +50,7 @@ public class Mur implements Parcelable {
     protected Mur(Parcel in) {
         orientation = (Orientation) in.readSerializable();
         id = in.readInt();
+        piece = new Piece("");
     }
 
     public static final Creator<Mur> CREATOR = new Creator<Mur>() {
@@ -100,6 +95,7 @@ public class Mur implements Parcelable {
         sb.append("Mur{id=").append(id).append(";");
         sb.append("orientation=");
         sb.append(orientation);
+        sb.append(";piece=").append(piece.getNom());
         sb.append("}");
         return sb.toString();
     }
@@ -120,6 +116,7 @@ public class Mur implements Parcelable {
         try {
             jsonObject.put("Orientation", orientation);
             jsonObject.put("Id", id);
+
         } catch (JSONException e) {
             throw new RuntimeException(e);
         }
diff --git a/app/src/main/java/habitat/Piece.java b/app/src/main/java/habitat/Piece.java
index ecfd4f9a484c50395c6afba7972a16f8c35acf46..c9a5c8d9a8e5815cf0f071a276c708b7ee21f7dc 100644
--- a/app/src/main/java/habitat/Piece.java
+++ b/app/src/main/java/habitat/Piece.java
@@ -2,6 +2,7 @@ package habitat;
 
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.util.Log;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -33,6 +34,7 @@ public class Piece implements Parcelable {
             for(int j=0; j<4; j++){
                 JSONObject Jmur = Jmurs.getJSONObject(j);
                 Mur mur = new Mur(Jmur);
+                mur.setPiece(this);
                 addMur(mur);
             }
         } catch (JSONException e) {
diff --git a/app/src/main/res/layout/activity_mode_immersion.xml b/app/src/main/res/layout/activity_mode_immersion.xml
index c99fa40f689ec92a8c1d8764441ae559d1471a7f..fa8eabe31903f05e3ed2f524cd591458ea620728 100644
--- a/app/src/main/res/layout/activity_mode_immersion.xml
+++ b/app/src/main/res/layout/activity_mode_immersion.xml
@@ -8,8 +8,8 @@
         tools:context=".ModeImmersionActivity">
 
     <ImageView
-            android:layout_width="308dp"
-            android:layout_height="305dp"
+            android:layout_width="414dp"
+            android:layout_height="355dp"
             app:srcCompat="@drawable/imagemur"
             android:id="@+id/imageViewMur"
             app:layout_constraintTop_toTopOf="parent"
@@ -30,4 +30,24 @@
             app:layout_constraintStart_toStartOf="parent"
             android:layout_marginBottom="117dp"
             app:layout_constraintBottom_toTopOf="@+id/imageViewMur"/>
+
+    <SurfaceView
+            android:layout_width="414dp"
+            android:layout_height="355dp"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintHorizontal_bias="0.495"
+            app:layout_constraintVertical_bias="0.69"
+            android:id="@+id/surfaceView"/>
+
+    <TextView
+            android:text="TextView"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/textViewPiece"
+            tools:layout_editor_absoluteX="176dp"
+            app:layout_constraintTop_toBottomOf="@+id/imageViewMur"
+            app:layout_constraintBottom_toBottomOf="parent"/>
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file