diff --git a/app/src/main/java/fr/iutfbleau/sae/GameController.java b/app/src/main/java/fr/iutfbleau/sae/GameController.java new file mode 100644 index 0000000..6a26aa6 --- /dev/null +++ b/app/src/main/java/fr/iutfbleau/sae/GameController.java @@ -0,0 +1,141 @@ +package fr.iutfbleau.sae; + +import android.app.Activity; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + + +public class GameController implements GameListener, View.OnClickListener { + + private final Activity activity; + + + private final GameView view; + + + private final GameModel model; + + + private final Button reset; + + + private final TextView score; + + + private final TextView moves; + + + private final View end; + + + private final TextView endScore; + + + private final Button back; + + + private final Button watch; + + + public GameController(Activity activity, GameView view, GameModel model) { + this.activity = activity; + this.view = view; + this.model = model; + + this.reset = (Button) this.activity.findViewById(R.id.reset); + this.score = (TextView) this.activity.findViewById(R.id.score); + this.moves = (TextView) this.activity.findViewById(R.id.moves); + + this.end = this.activity.findViewById(R.id.end); + this.endScore = (TextView) this.activity.findViewById(R.id.end_score); + this.back = (Button) this.activity.findViewById(R.id.back); + this.watch = (Button) this.activity.findViewById(R.id.watch); + + this.view.setListener(this); + + this.reset.setOnClickListener(this); + this.back.setOnClickListener(this); + this.watch.setOnClickListener(this); + + this.update(); + } + + + public void update() { + this.score.setText(this.activity.getString(R.string.score, this.model.getScore())); + this.moves.setText(this.activity.getString(R.string.moves, this.model.getValidLineCount())); + + if (this.model.isGameFinished()) { + this.end.setVisibility(View.VISIBLE); + this.endScore.setText(this.activity.getString(R.string.end_score, this.model.getScore())); + } + } + + + public void watch() { + this.end.setVisibility(View.INVISIBLE); + } + + + public void back() { + this.activity.finish(); + } + + + public void reset() { + this.view.setOffset(0, 0); + this.view.invalidate(); + } + + + @Override + public void onLineStarted(GameView view, Cell start) { + if (this.view != view) + return; + if (this.model.isGameFinished()) + return; + + this.model.startInputLine(start); + this.view.invalidate(); + } + + + @Override + public void onLineEndMoved(GameView view, Cell end) { + if (this.view != view) + return; + if (this.model.isGameFinished()) + return; + + if (this.model.moveInputLineEnd(end)) + this.view.invalidate(); + } + + + @Override + public void onLineEnded(GameView view, Cell end) { + if (this.view != view) + return; + if (this.model.isGameFinished()) + return; + + this.model.endInputLine(end); + this.view.invalidate(); + + this.update(); + } + + + @Override + public void onClick(View view) { + if (this.reset == view) + this.reset(); + else if (this.back == view) + this.back(); + else if (this.watch == view) + this.watch(); + else + throw new IllegalStateException("Unhandled click event source."); + } +} diff --git a/app/src/main/java/fr/iutfbleau/sae/GameListener.java b/app/src/main/java/fr/iutfbleau/sae/GameListener.java new file mode 100644 index 0000000..543e799 --- /dev/null +++ b/app/src/main/java/fr/iutfbleau/sae/GameListener.java @@ -0,0 +1,15 @@ +package fr.iutfbleau.sae; + +import android.graphics.Point; + + +public interface GameListener { + + void onLineStarted(GameView view, Cell start); + + + void onLineEndMoved(GameView view, Cell end); + + + void onLineEnded(GameView view, Cell end); +}