diff --git a/code/app/src/main/java/projet/iut/jeu_de_la_vie/model/boucleDeJeu/observer/ObservableBDJ.java b/code/app/src/main/java/projet/iut/jeu_de_la_vie/model/boucleDeJeu/observer/ObservableBDJ.java index 335c90d..f947af0 100644 --- a/code/app/src/main/java/projet/iut/jeu_de_la_vie/model/boucleDeJeu/observer/ObservableBDJ.java +++ b/code/app/src/main/java/projet/iut/jeu_de_la_vie/model/boucleDeJeu/observer/ObservableBDJ.java @@ -49,5 +49,8 @@ public abstract class ObservableBDJ { Platform.runLater(()->observeur.update()); } */ + for (ObserverBDJ observeur : observeurs) { + observeur.update(); + } } } \ No newline at end of file diff --git a/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/PlateauView.java b/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/PlateauView.java index 963fea6..25b9869 100644 --- a/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/PlateauView.java +++ b/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/PlateauView.java @@ -113,6 +113,9 @@ public class PlateauView extends View implements ObserverCV { public void addPosCell(Cellule cellule){ colors.put(cellule.getPosition(), cellule.getActiveColor()); } + public void delPosCell(Cellule cellule){ + colors.remove(cellule.getPosition()); + } public void setColones(int value) throws IllegalArgumentException{ if(value < 0){ diff --git a/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/fragment/FragmentPlateau.java b/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/fragment/FragmentPlateau.java index ea6765b..41f3ca8 100644 --- a/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/fragment/FragmentPlateau.java +++ b/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/fragment/FragmentPlateau.java @@ -6,6 +6,7 @@ import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; +import android.widget.Button; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -13,24 +14,17 @@ import androidx.fragment.app.Fragment; import projet.iut.jeu_de_la_vie.R; import projet.iut.jeu_de_la_vie.model.Manager; +import projet.iut.jeu_de_la_vie.model.cellule.Cellule; +import projet.iut.jeu_de_la_vie.model.cellulesVivantes.observer.ObserverCV; import projet.iut.jeu_de_la_vie.view.PlateauView; -public class FragmentPlateau extends Fragment { -/* - private Plateau plateau; +public class FragmentPlateau extends Fragment implements ObserverCV { - public Plateau getPlateau() { - return plateau; - } - - public void setPlateau(Plateau plateau) { - this.plateau = plateau; - } -*/ private Manager manager; public FragmentPlateau(){ super(R.layout.fragment_plateau); //<-- lui passer la future vue du jeu manager = new Manager(); + manager.getActualiseurCellule().getArbitre().getPlateau().getCellulesVivantes().attacher(this); } @Override @@ -47,24 +41,61 @@ public class FragmentPlateau extends Fragment { PlateauView plateauView = view.findViewById(R.id.plateauView); plateauView.setLignes(manager.getNumberOfLines()); plateauView.setColones(manager.getNomberOfColumns()); - plateauView.setOnTouchListener((view1, motionEvent) -> { - int x = (int) (( (float) manager.getNomberOfColumns() / view1.getWidth()) * motionEvent.getX()-5/100); - int y = (int) (( (float) manager.getNomberOfColumns() / view1.getWidth()) * motionEvent.getY()-5/100); - Log.d("D", "x=" + x); - Log.d("D", "y=" + y); - try { - manager.updateOnCellBeforeStart(x, y); - ((PlateauView) view1).addPosCell(manager.getCell(x, y)); - view1.postInvalidate(); - }catch (IllegalArgumentException e){ - Log.w("WARNING", e.getMessage()); + plateauView.setOnTouchListener(this::loadRect); + Button button = view.findViewById(R.id.startnstopButton); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(manager.isJeuLance()) + { + ((Button) view).setText("Start"); + manager.stoperJeu(); + }else { + ((Button) view).setText("Stop"); + manager.lancerJeu(); + } } - return false; }); } + private boolean loadRect(View view1, MotionEvent motionEvent){ + int x = (int) (( (float) manager.getNomberOfColumns() / view1.getWidth()) * motionEvent.getX()-5/100); + int y = (int) (( (float) manager.getNomberOfColumns() / view1.getWidth()) * motionEvent.getY()-5/100); + return loadRect(view1, x, y); + } + private boolean loadRect(View view, int x, int y){ + Log.d("D", "x=" + x); + Log.d("D", "y=" + y); + try { + manager.updateOnCellBeforeStart(x, y); + Cellule cellule = manager.getCell(x, y); + if(cellule.isAlive()) { + ((PlateauView) view).addPosCell(cellule); + }else { + ((PlateauView) view).delPosCell(cellule); + } + view.postInvalidate(); + }catch (IllegalArgumentException e){ + Log.w("WARNING", e.getMessage()); + } + return false; + } + @Override public void onInflate(@NonNull Context context, @NonNull AttributeSet attrs, @Nullable Bundle savedInstanceState) { super.onInflate(context, attrs, savedInstanceState); } + + @Override + public void update(Cellule changingCell) { + View plateauView = getView().findViewById(R.id.plateauView); + if(plateauView != null) { + plateauView.post(new Runnable() { + @Override + public void run() { + loadRect(plateauView, changingCell.getPosition().getX(), changingCell.getPosition().getY()); + } + }); + } + } } diff --git a/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/fragment/MenuFragment.java b/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/fragment/MenuFragment.java index 31fcc4a..86a9328 100644 --- a/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/fragment/MenuFragment.java +++ b/code/app/src/main/java/projet/iut/jeu_de_la_vie/view/fragment/MenuFragment.java @@ -1,7 +1,6 @@ package projet.iut.jeu_de_la_vie.view.fragment; import android.os.Bundle; -import android.text.Editable; import android.util.Log; import android.view.View; import android.widget.EditText; diff --git a/code/app/src/main/res/layout/fragment_plateau.xml b/code/app/src/main/res/layout/fragment_plateau.xml index 21b33cc..2a21514 100644 --- a/code/app/src/main/res/layout/fragment_plateau.xml +++ b/code/app/src/main/res/layout/fragment_plateau.xml @@ -1,10 +1,31 @@ - + android:layout_height="match_parent" + android:id="@+id/containerPlateauView"> + + + +