feat: afficher le nom du joueur connecté sur l'accueil
This commit is contained in:
5 files changed
+37
-1
No files matched your search
@@ -25,6 +25,12 @@ class PlayGamesServices(
|
|||||||
}.getOrDefault(false)
|
}.getOrDefault(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun playerDisplayName(): String? = withContext(Dispatchers.IO) {
|
||||||
|
runCatching {
|
||||||
|
PlayGames.getPlayersClient(activity).currentPlayer.await().displayName
|
||||||
|
}.getOrNull()
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun submitScore(leaderboardId: String, score: Long): Boolean =
|
override suspend fun submitScore(leaderboardId: String, score: Long): Boolean =
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
runCatching {
|
runCatching {
|
||||||
|
|||||||
@@ -49,8 +49,12 @@ fun App(
|
|||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val history = remember { HistoryRepository("$filesDirPath/history.json".toPath()) }
|
val history = remember { HistoryRepository("$filesDirPath/history.json".toPath()) }
|
||||||
var screen by remember { mutableStateOf<Screen>(Screen.Home) }
|
var screen by remember { mutableStateOf<Screen>(Screen.Home) }
|
||||||
|
var playerName by remember { mutableStateOf<String?>(null) }
|
||||||
|
|
||||||
LaunchedEffect(gamesServices) { gamesServices.signIn() }
|
LaunchedEffect(gamesServices) {
|
||||||
|
gamesServices.signIn()
|
||||||
|
playerName = gamesServices.playerDisplayName()
|
||||||
|
}
|
||||||
|
|
||||||
val homePreview: @Composable () -> Unit = {
|
val homePreview: @Composable () -> Unit = {
|
||||||
HomeScreen(onPlay = {}, onHistory = {}, onLeaderboard = {})
|
HomeScreen(onPlay = {}, onHistory = {}, onLeaderboard = {})
|
||||||
@@ -65,9 +69,11 @@ fun App(
|
|||||||
Screen.Home -> HomeScreen(
|
Screen.Home -> HomeScreen(
|
||||||
onPlay = { config -> screen = Screen.Game(config) },
|
onPlay = { config -> screen = Screen.Game(config) },
|
||||||
onHistory = { screen = Screen.History },
|
onHistory = { screen = Screen.History },
|
||||||
|
playerName = playerName,
|
||||||
onLeaderboard = { config ->
|
onLeaderboard = { config ->
|
||||||
scope.launch {
|
scope.launch {
|
||||||
if (gamesServices.isSignedIn() || gamesServices.signIn()) {
|
if (gamesServices.isSignedIn() || gamesServices.signIn()) {
|
||||||
|
if (playerName == null) playerName = gamesServices.playerDisplayName()
|
||||||
gamesServices.showLeaderboard(config.leaderboardId())
|
gamesServices.showLeaderboard(config.leaderboardId())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.livrets.games
|
|||||||
interface GamesServices {
|
interface GamesServices {
|
||||||
suspend fun signIn(): Boolean
|
suspend fun signIn(): Boolean
|
||||||
suspend fun isSignedIn(): Boolean
|
suspend fun isSignedIn(): Boolean
|
||||||
|
suspend fun playerDisplayName(): String?
|
||||||
suspend fun submitScore(leaderboardId: String, score: Long): Boolean
|
suspend fun submitScore(leaderboardId: String, score: Long): Boolean
|
||||||
suspend fun showLeaderboard(leaderboardId: String)
|
suspend fun showLeaderboard(leaderboardId: String)
|
||||||
}
|
}
|
||||||
@@ -10,6 +11,7 @@ interface GamesServices {
|
|||||||
object NoopGamesServices : GamesServices {
|
object NoopGamesServices : GamesServices {
|
||||||
override suspend fun signIn(): Boolean = false
|
override suspend fun signIn(): Boolean = false
|
||||||
override suspend fun isSignedIn(): Boolean = false
|
override suspend fun isSignedIn(): Boolean = false
|
||||||
|
override suspend fun playerDisplayName(): String? = null
|
||||||
override suspend fun submitScore(leaderboardId: String, score: Long): Boolean = false
|
override suspend fun submitScore(leaderboardId: String, score: Long): Boolean = false
|
||||||
override suspend fun showLeaderboard(leaderboardId: String) {}
|
override suspend fun showLeaderboard(leaderboardId: String) {}
|
||||||
}
|
}
|
||||||
@@ -33,6 +33,7 @@ fun HomeScreen(
|
|||||||
onPlay: (GameConfig) -> Unit,
|
onPlay: (GameConfig) -> Unit,
|
||||||
onHistory: () -> Unit,
|
onHistory: () -> Unit,
|
||||||
onLeaderboard: (GameConfig) -> Unit,
|
onLeaderboard: (GameConfig) -> Unit,
|
||||||
|
playerName: String? = null,
|
||||||
) {
|
) {
|
||||||
var questionCount by remember { mutableStateOf(10) }
|
var questionCount by remember { mutableStateOf(10) }
|
||||||
var secondsPerQuestion by remember { mutableStateOf(5) }
|
var secondsPerQuestion by remember { mutableStateOf(5) }
|
||||||
@@ -64,6 +65,14 @@ fun HomeScreen(
|
|||||||
TextButton(
|
TextButton(
|
||||||
onClick = { onLeaderboard(GameConfig(questionCount, secondsPerQuestion, maxTable)) },
|
onClick = { onLeaderboard(GameConfig(questionCount, secondsPerQuestion, maxTable)) },
|
||||||
) { Text("Classement") }
|
) { Text("Classement") }
|
||||||
|
playerName?.let { name ->
|
||||||
|
Spacer(Modifier.height(8.dp))
|
||||||
|
Text(
|
||||||
|
text = "Connecté : $name",
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.livrets.games
|
||||||
|
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertNull
|
||||||
|
|
||||||
|
class GamesServicesTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `NoopGamesServices ne renvoie pas de nom de joueur`() = runTest {
|
||||||
|
assertNull(NoopGamesServices.playerDisplayName())
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user