Closed paolo-chiappini closed 1 year ago
Ciao a tutti! Ho fatto degli aggiornamenti alla grafica della CLI, quindi ve li propongo direttamente in questa pull senza aprirne un'altra... I cambiamenti principali sono:
DefaultLayout
(come quello su discord); DefaultCliGraphics
).Nel caso si volesse fare qualcosa di diverso per la fine della partita, posso pensare ad una "schermata" di vittoria, nel caso abbiate altre idee, fatemi sapere.
Di seguito vi lascio un esempio di uso della view: (i dati rappresentati come variabili deriveranno dal virtual model o dai JSON che arrivano al controller)
DefaultCliGraphics cliView = new DefaultCliGraphics();
// add players
for (int i = 0; i < players.length; i++) {
boolean isClient = (players[i].equals(clientUsername));
cliView.addPlayer(players[i], scores[i], isClient);
cliView.updateBookshelf(players[i], bookshelves[i]);
}
cliView.updateBoard(board);
cliView.updatePlayerConnectionStatus(players[1], isPlayer2Disconnected);
cliView.updatePlayerScore(players[0], player0Score);
cliView.updateCommonGoalPoints(commonGoal2Id, commonGoal2Points);
cliView.updateGameStatus(isGameOver);
cliView.setCommonGoal(commonGoal1Id, commonGoal1Points);
cliView.setCommonGoal(commonGoal2Id, commonGoal2Points);
cliView.setPersonalGoal(personalGoalId);
cliView.setCurrentTurn(currentTurn);
cliView.addMessage(
newChatMessage,
chatMessageSender,
chatMessageRecipient.equals(clientUsername) // verify if it's a whisper
);
System.out.println(cliView.getGraphics().render(new SimpleColorRenderer()));
Ciao a tutti, questa è la libreria per la grafica... in breve:
Element
(es.BoardElement
,BookshelfElement
,ChatElement
...);CliTextElement
, ciascuna composta da una tupla(carattere, colore testo, colore sfondo)
;CliTextElement
in modi diversi (es. renderer a colori vs renderer solo testuale);Probabilmente molte cose sono un po' overkill, quindi nel caso si possono tagliare prima del merge. Un'altra cosa... nell'implementazione ho fatto alcune scelte su cui vorrei delle opinioni:
CliGraphicsManager
(a parte il fatto che è un muro di testo), forse potrebbe essere pensata meglio e ci sono alcuni metodi che potrebbero risultare non tanto intuitivi da usare.Esempio di uso: