package ge.edu.freeuni.sdp.snake.view.terminal;
import java.util.StringTokenizer;
import com.googlecode.lanterna.input.Key;
import com.googlecode.lanterna.input.Key.Kind;
import com.googlecode.lanterna.terminal.Terminal;
import ge.edu.freeuni.sdp.snake.presenter.HighScorePresenter;
import ge.edu.freeuni.sdp.snake.view.HighScoreView;
public class TerminalHighScoreView implements HighScoreView {
private Terminal _terminal;
private HighScorePresenter _presenter;
public TerminalHighScoreView(HighScorePresenter presenter, Terminal terminal) {
_presenter = presenter;
_terminal = terminal;
}
private void waitForResponse(int x,int y,int score){
boolean newHighScore = _presenter.checkNewScore(score);
if(newHighScore){
writeLine("Please enter your name:");
String name = "";
while (true) {
Key p = _terminal.readInput();
if (p == null) continue;
if (p.getKind() == Kind.Enter) break;
char ch = p.getCharacter();
_terminal.moveCursor(x, y);
name = name + ch;
writeLine(name);
}
_presenter.changeHighScoreInfo(name, score);
} else {
writeLine("To continue click anything...");
while (true) {
Key p = _terminal.readInput();
if (p != null) break;
}
}
}
@Override
public void show() {
_terminal.clearScreen();
int x = _terminal.getTerminalSize().getColumns() / 2 - 8;
int y = _terminal.getTerminalSize().getRows() / 2 - 8;
_terminal.moveCursor(x, y++);
int score = _presenter.getScore();
writeLine("Your score: " + score);
_terminal.moveCursor(x, y++);
writeLine("High scores:");
_terminal.moveCursor(x, y);
String fileContent = _presenter.getHighScoreInfo();
StringTokenizer st = new StringTokenizer(fileContent, "\n");
while (st.hasMoreElements()) {
writeLine(st.nextToken());
_terminal.moveCursor(x, ++y);
}
waitForResponse(x,++y,score);
}
private void writeLine(String print) {
char[] printToChar = print.toCharArray();
for (int i = 0; i < print.length(); i++) {
_terminal.putCharacter(printToChar[i]);
}
}
}