Skip to content

Commit 4e512e7

Browse files
committed
add movement input switching ui and logic
1 parent b331ee8 commit 4e512e7

File tree

5 files changed

+40
-33
lines changed

5 files changed

+40
-33
lines changed

app/src/main/java/com/example/racingcar/ui/Navigation.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.example.racingcar.ui
22

3+
import android.util.Log
34
import androidx.compose.foundation.layout.fillMaxSize
45
import androidx.compose.foundation.shape.RoundedCornerShape
56
import androidx.compose.runtime.Composable
@@ -16,7 +17,7 @@ import androidx.navigation.compose.NavHost
1617
import androidx.navigation.compose.composable
1718
import androidx.navigation.compose.rememberNavController
1819
import com.example.racingcar.ui.game.RacingGameScreen
19-
import com.example.racingcar.ui.settings.settings
20+
import com.example.racingcar.ui.settings.SettingsBottomSheet
2021
import com.example.racingcar.ui.viewmodel.MainViewModel
2122
import com.example.racingcar.utils.vibrateError
2223
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
@@ -39,28 +40,27 @@ fun RacingCarGameNavHost() {
3940
bottomSheetNavigator = bottomSheetNavigator,
4041
sheetShape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp)
4142
) {
43+
val viewModel = hiltViewModel<MainViewModel>()
4244
NavHost(navController, Destinations.Game.route) {
43-
gameScreen(navController)
44-
settingsScreen()
45+
gameScreen(navController = navController, viewModel = viewModel)
46+
settingsScreen(viewModel = viewModel)
4547
}
4648
}
4749
}
4850

4951
@OptIn(ExperimentalMaterialNavigationApi::class)
50-
private fun NavGraphBuilder.settingsScreen() {
52+
private fun NavGraphBuilder.settingsScreen(viewModel: MainViewModel) {
5153
bottomSheet(Destinations.Settings.route) {
52-
val viewModel = hiltViewModel<MainViewModel>()
5354
val movementInput by viewModel.movementInput.collectAsState()
54-
settings(
55+
SettingsBottomSheet(
5556
movementInput = movementInput,
5657
onMovementInputChange = { viewModel.setMovementInput(it) }
5758
)
5859
}
5960
}
6061

61-
private fun NavGraphBuilder.gameScreen(navController: NavHostController) {
62+
private fun NavGraphBuilder.gameScreen(navController: NavHostController, viewModel: MainViewModel) {
6263
composable(Destinations.Game.route) {
63-
val viewModel = hiltViewModel<MainViewModel>()
6464

6565
val context = LocalContext.current
6666
LaunchedEffect(context) {
@@ -74,6 +74,7 @@ private fun NavGraphBuilder.gameScreen(navController: NavHostController) {
7474
val acceleration by viewModel.acceleration.collectAsState()
7575
val movementInput by viewModel.movementInput.collectAsState()
7676

77+
Log.d("mamad", "navigation: $movementInput")
7778
RacingGameScreen(
7879
isDevMode = { true },
7980
onSettingsClick = {

app/src/main/java/com/example/racingcar/ui/game/RacingGameCanvas.kt renamed to app/src/main/java/com/example/racingcar/ui/game/GameCanvas.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.racingcar.ui.game
22

3-
import android.util.Log
43
import androidx.compose.foundation.Canvas
54
import androidx.compose.runtime.Composable
65
import androidx.compose.ui.Modifier
@@ -13,7 +12,7 @@ import com.example.racingcar.ui.game.state.GameState
1312

1413

1514
@Composable
16-
fun RacingGameCanvas(
15+
fun GameCanvas(
1716
gameState: GameState,
1817
backgroundState: BackgroundState,
1918
backgroundSpeed: Int,
@@ -25,7 +24,6 @@ fun RacingGameCanvas(
2524
modifier: Modifier = Modifier,
2625
) {
2726
Canvas(modifier = modifier) {
28-
Log.d("mamad", "size: $size")
2927
drawBackground(
3028
gameState = gameState,
3129
backgroundState = backgroundState,

app/src/main/java/com/example/racingcar/ui/game/RacingGameScreen.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.example.racingcar.ui.game
22

3+
import android.util.Log
34
import androidx.compose.animation.core.LinearEasing
45
import androidx.compose.animation.core.animateFloat
56
import androidx.compose.animation.core.animateFloatAsState
@@ -106,7 +107,8 @@ fun RacingGameScreen(
106107
modifier = Modifier
107108
.fillMaxSize()
108109
.then(
109-
if (gameState.isRunning())
110+
if (gameState.isRunning()) {
111+
Log.d("mamad", "screen: ${movementInput()}")
110112
when (movementInput()) {
111113
TapGestures ->
112114
Modifier.detectCarPositionByPointerInput(maxWidth = maxWidth.value.toInt()) { position ->
@@ -119,11 +121,11 @@ fun RacingGameScreen(
119121

120122
Accelerometer -> Modifier
121123
}
122-
else
124+
} else
123125
Modifier
124126
)
125127
) {
126-
RacingGameCanvas(
128+
GameCanvas(
127129
gameState = gameState,
128130
backgroundState = backgroundState,
129131
backgroundSpeed = backgroundSpeed,
Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.example.racingcar.ui.settings
22

3+
import android.util.Log
34
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Column
46
import androidx.compose.foundation.layout.Row
57
import androidx.compose.foundation.layout.fillMaxWidth
6-
import androidx.compose.material3.Switch
8+
import androidx.compose.material3.RadioButton
79
import androidx.compose.material3.Text
810
import androidx.compose.runtime.Composable
911
import androidx.compose.ui.Alignment
@@ -24,25 +26,29 @@ fun MovementInputRow(
2426
verticalAlignment = Alignment.CenterVertically,
2527
horizontalArrangement = Arrangement.SpaceBetween
2628
) {
27-
Text(text = buildAnnotatedString {
28-
withStyle(style = SpanStyle(color = Color.Black)) {
29-
append("Movement Input: ")
30-
}
31-
withStyle(style = SpanStyle(color = Color.Red)) {
32-
append(movementInput.name)
33-
}
29+
Text(
30+
text = buildAnnotatedString {
31+
withStyle(style = SpanStyle(color = Color.Black)) {
32+
append("Movement Input: ")
33+
}
34+
withStyle(style = SpanStyle(color = Color.Red)) {
35+
append(movementInput.name)
36+
}
3437

35-
}, color = Color.Black)
36-
Switch(
37-
checked = movementInput == MovementInput.Accelerometer,
38-
onCheckedChange = { isAccelerometer ->
39-
onMovementInputChange(
40-
if (isAccelerometer)
41-
MovementInput.Accelerometer
42-
else
43-
MovementInput.TapGestures
44-
)
4538
},
39+
color = Color.Black
4640
)
41+
Column {
42+
Log.d("mamad", "settings: $movementInput")
43+
MovementInput.values().forEach { input ->
44+
Row {
45+
RadioButton(
46+
selected = movementInput == input,
47+
onClick = { onMovementInputChange(input) }
48+
)
49+
Text(text = input.name, color = Color.Black)
50+
}
51+
}
52+
}
4753
}
4854
}

app/src/main/java/com/example/racingcar/ui/settings/settings.kt renamed to app/src/main/java/com/example/racingcar/ui/settings/SettingsBottomSheet.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import androidx.compose.ui.unit.dp
1010
import com.example.racingcar.models.MovementInput
1111

1212
@Composable
13-
fun settings(
13+
fun SettingsBottomSheet(
1414
movementInput: MovementInput,
1515
onMovementInputChange: (MovementInput) -> Unit
1616
) {

0 commit comments

Comments
 (0)