Skip to content
Snippets Groups Projects
Commit ce62b7d8 authored by SCHILLING Juliette's avatar SCHILLING Juliette
Browse files

yesssssss on peut se promener !!!!

parent 51717c27
No related branches found
No related tags found
No related merge requests found
...@@ -286,8 +286,11 @@ public class CreationOuvertureActivity extends AppCompatActivity{ ...@@ -286,8 +286,11 @@ public class CreationOuvertureActivity extends AppCompatActivity{
public void confirmer(View view) { public void confirmer(View view) {
Ouverture ouverture = new Ouverture(pieceDepart.getMurOrientation(orientationPieceDepart), pieceArrivee.getMurOrientation(orientationPieceArrivee), rectDepart, rectArrivee); Ouverture ouverture = new Ouverture(pieceDepart.getMurOrientation(orientationPieceDepart), pieceArrivee.getMurOrientation(orientationPieceArrivee), rectDepart, rectArrivee);
habitat.addOuverture(ouverture); 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(); enregistrement();
Log.i("testOuverture", String.valueOf(habitat.toJSON()));
} }
public void enregistrement(){ public void enregistrement(){
......
...@@ -2,39 +2,41 @@ package com.example.myhabitat; ...@@ -2,39 +2,41 @@ package com.example.myhabitat;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.*;
import android.graphics.BitmapFactory;
import android.hardware.Sensor; import android.hardware.Sensor;
import android.hardware.SensorEvent; import android.hardware.SensorEvent;
import android.hardware.SensorEventListener; import android.hardware.SensorEventListener;
import android.hardware.SensorManager; import android.hardware.SensorManager;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.*;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.RotateAnimation; import android.view.animation.RotateAnimation;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle; import android.os.Bundle;
import habitat.Habitat; import habitat.*;
import habitat.Mur;
import habitat.Orientation;
import habitat.Piece;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.time.Duration; import java.util.ArrayList;
import java.util.HashMap;
public class ModeImmersionActivity extends AppCompatActivity implements SensorEventListener { public class ModeImmersionActivity extends AppCompatActivity implements SensorEventListener {
Habitat habitat; Habitat habitat;
Mur murEnCours; Mur murEnCours;
Piece pieceEnCours; Piece pieceEnCours;
TextView textViewPiece;
private SensorManager sensorManager; private SensorManager sensorManager;
private ImageView imageViewBoussole; private ImageView imageViewBoussole;
private float debut = 0; private float debut = 0;
private ImageView imageViewMur; private ImageView imageViewMur;
private SurfaceView surfaceView;
private Paint myPaint;
private Canvas canvas;
private ArrayList<Rect> rectangles;
private HashMap<Rect, Piece> pieceArriveeRect;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -52,6 +54,9 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv ...@@ -52,6 +54,9 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
setContentView(R.layout.activity_mode_immersion); setContentView(R.layout.activity_mode_immersion);
rectangles = new ArrayList<Rect>();
pieceArriveeRect = new HashMap<Rect, Piece>();
pieceEnCours = habitat.getPieces().get(0); pieceEnCours = habitat.getPieces().get(0);
affichePiece(pieceEnCours); affichePiece(pieceEnCours);
imageViewBoussole = findViewById(R.id.imageViewBoussole); imageViewBoussole = findViewById(R.id.imageViewBoussole);
...@@ -59,7 +64,40 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv ...@@ -59,7 +64,40 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 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) { public boolean onCreateOptionsMenu(Menu menu) {
...@@ -85,9 +123,15 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv ...@@ -85,9 +123,15 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
public void affichePiece(Piece piece){ public void affichePiece(Piece piece){
pieceEnCours = piece; pieceEnCours = piece;
ImageView imageViewMur = findViewById(R.id.imageViewMur); imageViewMur = findViewById(R.id.imageViewMur);
murEnCours = piece.getMurs().get(0); 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 //On récupère la photo
FileInputStream fis = null; FileInputStream fis = null;
try { try {
...@@ -99,25 +143,60 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv ...@@ -99,25 +143,60 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
Bitmap bm = BitmapFactory.decodeStream(fis); Bitmap bm = BitmapFactory.decodeStream(fis);
imageViewMur.setImageBitmap(bm); imageViewMur.setImageBitmap(bm);
}else{ }else{
Log.i("testDrawable", "pas de photo"); //Log.i("testDrawable", "pas de photo");
imageViewMur.setImageDrawable(getDrawable(R.drawable.imagemur)); imageViewMur.setImageDrawable(getDrawable(R.drawable.imagemur));
} }
afficheOuvertures();
} }
public void afficheMur(){ public void afficheOuvertures(){
//On récupère la photo ArrayList<Ouverture> ouvertures = habitat.getOuvertureDeMur(murEnCours);
FileInputStream fis = null; Log.i("testOuvertures", ouvertures+"");
try { rectangles.clear();
fis = openFileInput(murEnCours.getId()+".data"); pieceArriveeRect.clear();
} catch (FileNotFoundException e) {
//throw new RuntimeException(e); if(ouvertures.isEmpty()){
} //Il n'y a pas d'ouvertures à afficher
if (fis != null) { try {
Bitmap bm = BitmapFactory.decodeStream(fis); canvas = surfaceView.getHolder().lockCanvas();
imageViewMur.setImageBitmap(bm); synchronized (surfaceView.getHolder()) {
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (canvas != null) {
surfaceView.getHolder().unlockCanvasAndPost(canvas);
}
}
}else{ }else{
Log.i("testDrawable", "pas de photo"); for(Ouverture ouverture : ouvertures) {
imageViewMur.setImageDrawable(getDrawable(R.drawable.imagemur)); //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 ...@@ -140,16 +219,20 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv
imageViewBoussole.startAnimation(rotateAnimation); imageViewBoussole.startAnimation(rotateAnimation);
Mur newMur = null;
if(angle<(-45) && angle>=(-135)){ if(angle<(-45) && angle>=(-135)){
murEnCours = pieceEnCours.getMurOrientation(Orientation.EST); newMur = pieceEnCours.getMurOrientation(Orientation.EST);
} else if (angle<(-135) && angle>=(-225)) { } else if (angle<(-135) && angle>=(-225)) {
murEnCours = pieceEnCours.getMurOrientation(Orientation.SUD); newMur = pieceEnCours.getMurOrientation(Orientation.SUD);
} else if (angle<(-225) && angle>=(-315)) { } else if (angle<(-225) && angle>=(-315)) {
murEnCours = pieceEnCours.getMurOrientation(Orientation.OUEST); newMur = pieceEnCours.getMurOrientation(Orientation.OUEST);
}else{ }else{
murEnCours = pieceEnCours.getMurOrientation(Orientation.NORD); newMur = pieceEnCours.getMurOrientation(Orientation.NORD);
}
if(newMur != murEnCours){
murEnCours = newMur;
afficheMur();
} }
afficheMur();
//Maj de l'angle de depart //Maj de l'angle de depart
......
package habitat; package habitat;
import android.graphics.Rect;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import org.json.JSONArray; import org.json.JSONArray;
...@@ -93,6 +94,16 @@ public class Habitat implements Parcelable { ...@@ -93,6 +94,16 @@ public class Habitat implements Parcelable {
public void addOuverture(Ouverture ouverture){ public void addOuverture(Ouverture ouverture){
ouvertures.add(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){ public void removeOuverture(Ouverture ouverture){
...@@ -101,6 +112,15 @@ public class Habitat implements Parcelable { ...@@ -101,6 +112,15 @@ public class Habitat implements Parcelable {
public void removePiece(Piece piece){ public void removePiece(Piece piece){
pieces.remove(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(){ public JSONObject toJSON(){
...@@ -137,4 +157,26 @@ public class Habitat implements Parcelable { ...@@ -137,4 +157,26 @@ public class Habitat implements Parcelable {
public int hashCode() { public int hashCode() {
return Objects.hash(pieces, ouvertures); 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;
}
} }
...@@ -15,12 +15,6 @@ public class Mur implements Parcelable { ...@@ -15,12 +15,6 @@ public class Mur implements Parcelable {
private Orientation orientation; private Orientation orientation;
private int id; //Utile pour stocker la photo associée au mur 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) { public Mur(Piece piece, Orientation orientation) {
this.piece = piece; this.piece = piece;
this.orientation = orientation; this.orientation = orientation;
...@@ -56,6 +50,7 @@ public class Mur implements Parcelable { ...@@ -56,6 +50,7 @@ public class Mur implements Parcelable {
protected Mur(Parcel in) { protected Mur(Parcel in) {
orientation = (Orientation) in.readSerializable(); orientation = (Orientation) in.readSerializable();
id = in.readInt(); id = in.readInt();
piece = new Piece("");
} }
public static final Creator<Mur> CREATOR = new Creator<Mur>() { public static final Creator<Mur> CREATOR = new Creator<Mur>() {
...@@ -100,6 +95,7 @@ public class Mur implements Parcelable { ...@@ -100,6 +95,7 @@ public class Mur implements Parcelable {
sb.append("Mur{id=").append(id).append(";"); sb.append("Mur{id=").append(id).append(";");
sb.append("orientation="); sb.append("orientation=");
sb.append(orientation); sb.append(orientation);
sb.append(";piece=").append(piece.getNom());
sb.append("}"); sb.append("}");
return sb.toString(); return sb.toString();
} }
...@@ -120,6 +116,7 @@ public class Mur implements Parcelable { ...@@ -120,6 +116,7 @@ public class Mur implements Parcelable {
try { try {
jsonObject.put("Orientation", orientation); jsonObject.put("Orientation", orientation);
jsonObject.put("Id", id); jsonObject.put("Id", id);
} catch (JSONException e) { } catch (JSONException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
......
...@@ -2,6 +2,7 @@ package habitat; ...@@ -2,6 +2,7 @@ package habitat;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.util.Log;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -33,6 +34,7 @@ public class Piece implements Parcelable { ...@@ -33,6 +34,7 @@ public class Piece implements Parcelable {
for(int j=0; j<4; j++){ for(int j=0; j<4; j++){
JSONObject Jmur = Jmurs.getJSONObject(j); JSONObject Jmur = Jmurs.getJSONObject(j);
Mur mur = new Mur(Jmur); Mur mur = new Mur(Jmur);
mur.setPiece(this);
addMur(mur); addMur(mur);
} }
} catch (JSONException e) { } catch (JSONException e) {
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
tools:context=".ModeImmersionActivity"> tools:context=".ModeImmersionActivity">
<ImageView <ImageView
android:layout_width="308dp" android:layout_width="414dp"
android:layout_height="305dp" android:layout_height="355dp"
app:srcCompat="@drawable/imagemur" app:srcCompat="@drawable/imagemur"
android:id="@+id/imageViewMur" android:id="@+id/imageViewMur"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
...@@ -30,4 +30,24 @@ ...@@ -30,4 +30,24 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
android:layout_marginBottom="117dp" android:layout_marginBottom="117dp"
app:layout_constraintBottom_toTopOf="@+id/imageViewMur"/> 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> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment