Skip to content

Commit 6e10bd7

Browse files
committed
update version
1 parent 927583a commit 6e10bd7

File tree

7 files changed

+195
-96
lines changed

7 files changed

+195
-96
lines changed

composeApp/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ android {
6060
minSdk = libs.versions.android.minSdk.get().toInt()
6161
targetSdk = libs.versions.android.targetSdk.get().toInt()
6262
versionCode = 1
63-
versionName = "1.0"
63+
versionName = "1.1"
6464
}
6565
packaging {
6666
resources {

composeApp/src/commonMain/kotlin/screens/HouseRulesScreen.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ import androidx.compose.runtime.remember
2424
import androidx.compose.ui.Alignment
2525
import androidx.compose.ui.Modifier
2626
import components.HouseRule
27-
import scripts.data.exclusiveRules
28-
import scripts.data.officialRules
29-
import scripts.data.unofficialRules
27+
import scripts.data.houseRules
3028

3129
@Composable
3230
fun HouseRulesScreen() {
@@ -40,14 +38,14 @@ fun HouseRulesScreen() {
4038
if (expanded) Icons.Outlined.KeyboardArrowUp else Icons.Outlined.KeyboardArrowDown
4139

4240
// static
43-
val values = listOf("oficiales", "exclusivas", "no officiales")
41+
val options = listOf("oficiales", "exclusivas", "no oficiales")
4442

4543
// val rulesSection = if (ruleTitle == "oficiales") officialRules else unofficialRules
46-
val rulesSection = when(ruleTitle) {
44+
/* val rulesSection = when(ruleTitle) {
4745
"oficiales" -> officialRules
4846
"exclusivas" -> exclusiveRules
4947
else -> unofficialRules
50-
}
48+
} */
5149

5250
// styles
5351
val dropdownStyles = Modifier
@@ -66,7 +64,7 @@ fun HouseRulesScreen() {
6664
onDismissRequest = { expanded = false },
6765
modifier = Modifier.fillMaxWidth()
6866
) {
69-
values.forEachIndexed { i, it ->
67+
options.forEachIndexed { i, it ->
7068
DropdownMenuItem(
7169
leadingIcon = { Text("${i + 1})") },
7270
text = { Text(it) },
@@ -80,7 +78,9 @@ fun HouseRulesScreen() {
8078
}
8179

8280
LazyColumn(state = state) {
83-
items(rulesSection) { (title, desc) ->
81+
val rules = houseRules[ruleTitle]!!.toList()
82+
83+
items(rules) { (title, desc) ->
8484
HouseRule(title, desc)
8585
}
8686
}
Lines changed: 88 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,37 @@
11
package screens
22

3-
import androidx.compose.foundation.layout.RowScope
3+
import androidx.compose.foundation.layout.Spacer
44
import androidx.compose.foundation.layout.fillMaxHeight
5+
import androidx.compose.foundation.layout.height
56
import androidx.compose.foundation.layout.padding
7+
import androidx.compose.material.icons.Icons
8+
import androidx.compose.material.icons.outlined.Menu
9+
import androidx.compose.material3.DrawerValue
610
import androidx.compose.material3.ExperimentalMaterial3Api
711
import androidx.compose.material3.Icon
8-
import androidx.compose.material3.MaterialTheme
9-
import androidx.compose.material3.NavigationBar
10-
import androidx.compose.material3.NavigationBarItem
11-
import androidx.compose.material3.NavigationBarItemDefaults
12+
import androidx.compose.material3.IconButton
13+
import androidx.compose.material3.ModalDrawerSheet
14+
import androidx.compose.material3.ModalNavigationDrawer
15+
import androidx.compose.material3.NavigationDrawerItem
1216
import androidx.compose.material3.Scaffold
1317
import androidx.compose.material3.Text
1418
import androidx.compose.material3.TopAppBar
19+
import androidx.compose.material3.rememberDrawerState
1520
import androidx.compose.runtime.Composable
1621
import androidx.compose.runtime.getValue
1722
import androidx.compose.runtime.mutableStateOf
1823
import androidx.compose.runtime.remember
24+
import androidx.compose.runtime.rememberCoroutineScope
1925
import androidx.compose.runtime.setValue
2026
import androidx.compose.ui.Modifier
21-
import androidx.compose.ui.graphics.Color
22-
import androidx.compose.ui.graphics.toArgb
23-
import androidx.navigation.NavDestination
27+
import androidx.compose.ui.unit.dp
2428
import androidx.navigation.NavDestination.Companion.hierarchy
2529
import androidx.navigation.NavHostController
2630
import androidx.navigation.compose.NavHost
2731
import androidx.navigation.compose.composable
2832
import androidx.navigation.compose.currentBackStackEntryAsState
2933
import androidx.navigation.compose.rememberNavController
34+
import kotlinx.coroutines.launch
3035
import org.jetbrains.compose.resources.DrawableResource
3136
import org.jetbrains.compose.resources.painterResource
3237
import unodocs.composeapp.generated.resources.Res.drawable
@@ -38,84 +43,52 @@ import unodocs.composeapp.generated.resources.ic_house_rules
3843
import unodocs.composeapp.generated.resources.ic_unique
3944
import unodocs.composeapp.generated.resources.ic_wild
4045

41-
sealed class BottomBarScreen(
46+
sealed class NavigationScreen(
4247
val title: String,
4348
val route: String,
44-
val icon: DrawableResource
49+
val icon: DrawableResource,
4550
) {
46-
data object Home: BottomBarScreen("reglas comunes", "home", drawable.ic_common)
51+
data object Home : NavigationScreen("reglas comunes", "home", drawable.ic_common)
4752

48-
data object Colorblind: BottomBarScreen("guia para daltonicos", "colorblind", drawable.ic_colorblind)
53+
data object Colorblind :
54+
NavigationScreen("guia para daltonicos", "colorblind", drawable.ic_colorblind)
4955

50-
data object ActionCards: BottomBarScreen("cartas de acciòn", "action_cards", drawable.ic_action_cards)
56+
data object ActionCards :
57+
NavigationScreen("cartas de acciòn", "action_cards", drawable.ic_action_cards)
5158

52-
data object WildCards: BottomBarScreen("comodines", "wild_cards", drawable.ic_wild)
59+
data object WildCards : NavigationScreen("comodines", "wild_cards", drawable.ic_wild)
5360

54-
data object StyleWildCards: BottomBarScreen("comodines de estilo", "style_wild_cards", drawable.ic_unique)
61+
data object StyleWildCards :
62+
NavigationScreen("comodines de estilo", "style_wild_cards", drawable.ic_unique)
5563

56-
data object HouseRules: BottomBarScreen("reglas de la casa", "house_rules", drawable.ic_house_rules)
64+
data object HouseRules :
65+
NavigationScreen("reglas de la casa", "house_rules", drawable.ic_house_rules)
5766
}
5867

5968
@Composable
60-
fun BottomNavGraph(navController: NavHostController, modifier: Modifier) {
69+
fun NavGraph(navController: NavHostController, modifier: Modifier) {
6170
NavHost(
62-
navController, BottomBarScreen.Home.route,
71+
navController, NavigationScreen.Home.route,
6372
modifier = modifier
6473
) {
65-
composable(BottomBarScreen.Home.route) { CommonRulesScreen() }
66-
composable(BottomBarScreen.Colorblind.route) { ColorblindScreen() }
67-
composable(BottomBarScreen.ActionCards.route) { ActionCardsScreen() }
68-
composable(BottomBarScreen.WildCards.route) { WildCardsScreen() }
69-
composable(BottomBarScreen.StyleWildCards.route) { WildStyleCardsScreen() }
70-
composable(BottomBarScreen.HouseRules.route) { HouseRulesScreen() }
74+
composable(NavigationScreen.Home.route) { CommonRulesScreen() }
75+
composable(NavigationScreen.Colorblind.route) { ColorblindScreen() }
76+
composable(NavigationScreen.ActionCards.route) { ActionCardsScreen() }
77+
composable(NavigationScreen.WildCards.route) { WildCardsScreen() }
78+
composable(NavigationScreen.StyleWildCards.route) { WildStyleCardsScreen() }
79+
composable(NavigationScreen.HouseRules.route) { HouseRulesScreen() }
7180
}
7281
}
7382

7483
val screens = listOf(
75-
BottomBarScreen.Home,
76-
BottomBarScreen.Colorblind,
77-
BottomBarScreen.ActionCards,
78-
BottomBarScreen.WildCards,
79-
BottomBarScreen.StyleWildCards,
80-
BottomBarScreen.HouseRules,
84+
NavigationScreen.Home,
85+
NavigationScreen.Colorblind,
86+
NavigationScreen.ActionCards,
87+
NavigationScreen.WildCards,
88+
NavigationScreen.StyleWildCards,
89+
NavigationScreen.HouseRules,
8190
)
8291

83-
@Composable
84-
fun BottomBar(navController: NavHostController) {
85-
val navBackStackEntry by navController.currentBackStackEntryAsState()
86-
87-
val currentDestination = navBackStackEntry?.destination
88-
89-
NavigationBar {
90-
screens.forEach { screen ->
91-
AddItem(screen, currentDestination, navController)
92-
}
93-
}
94-
}
95-
96-
@Composable
97-
fun RowScope.AddItem(
98-
screen: BottomBarScreen,
99-
currentDestination: NavDestination?,
100-
navController: NavHostController
101-
) {
102-
val colors = NavigationBarItemDefaults.colors(
103-
unselectedIconColor = Color(MaterialTheme.colorScheme.onBackground.toArgb()),
104-
selectedIconColor = Color(MaterialTheme.colorScheme.secondary.toArgb())
105-
)
106-
107-
NavigationBarItem(
108-
icon = { Icon(painterResource(screen.icon), "navigation icon") },
109-
selected = currentDestination?.hierarchy?.any { it.route == screen.route } == true,
110-
colors = colors,
111-
onClick = {
112-
navController.navigate(screen.route) {
113-
launchSingleTop = true
114-
}
115-
}
116-
)
117-
}
118-
11992
@OptIn(ExperimentalMaterial3Api::class)
12093
@Composable
12194
fun MainScreen() {
@@ -125,20 +98,58 @@ fun MainScreen() {
12598
val navBackStackEntry by navController.currentBackStackEntryAsState()
12699
val currentDestination = navBackStackEntry?.destination
127100

128-
screens.forEach {screen ->
101+
screens.forEach { screen ->
129102
val route = currentDestination?.route
130-
if(route == screen.route) screenTitle = screen.title
103+
if (route == screen.route) screenTitle = screen.title
131104
}
132105

133-
Scaffold(
134-
modifier = Modifier.fillMaxHeight(),
135-
topBar = { TopAppBar(
136-
title = { Text(screenTitle) }
137-
) },
138-
bottomBar = { BottomBar(navController) }
139-
) { innerPadding ->
140-
val navStyles = Modifier.padding(innerPadding)
106+
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
107+
val scope = rememberCoroutineScope()
108+
109+
ModalNavigationDrawer(
110+
drawerState = drawerState,
111+
drawerContent = {
112+
ModalDrawerSheet {
113+
Spacer(modifier = Modifier.height(16.dp))
114+
screens.forEach { screen ->
115+
NavigationDrawerItem(
116+
label = { Text(screen.title) },
117+
selected = currentDestination?.hierarchy?.any { it.route == screen.route } == true,
118+
icon = { Icon(painterResource(screen.icon),null) },
119+
onClick = {
120+
navController.navigate(screen.route) {
121+
launchSingleTop = true
122+
}
123+
scope.launch {
124+
drawerState.close()
125+
}
126+
}
127+
)
128+
}
129+
}
130+
},
131+
gesturesEnabled = true
132+
) {
141133

142-
BottomNavGraph(navController, navStyles)
134+
Scaffold(
135+
modifier = Modifier.fillMaxHeight(),
136+
topBar = {
137+
TopAppBar(
138+
title = { Text(screenTitle) },
139+
navigationIcon = {
140+
IconButton(onClick = {
141+
scope.launch {
142+
drawerState.apply { if (isClosed) open() else close() }
143+
}
144+
}) { Icon(Icons.Outlined.Menu, null) }
145+
}
146+
)
147+
},
148+
149+
) { innerPadding ->
150+
val navStyles = Modifier.padding(innerPadding)
151+
152+
NavGraph(navController, navStyles)
153+
}
143154
}
144155
}

composeApp/src/commonMain/kotlin/scripts/data/houseRules.kt

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,94 @@ data class Rule(
55
val desc: String,
66
)
77

8+
val houseRules = mapOf<String,List<Rule>> (
9+
"oficiales" to listOf(
10+
Rule(
11+
title = "7 - 0",
12+
desc = """
13+
esta regla consite en el cambio de cartas:
14+
si lanzas la carta 0 todo se intercambia su mano en la dirreciòn actual.
15+
si lanza la carta 7 intercambias con cualquier persona que tu eligas
16+
"esta reglas es canonica en el uno no mercy"
17+
""".trimIndent()
18+
),
19+
Rule(
20+
title = "acumulacion",
21+
desc = """
22+
esta regla se trata acumular las cartas de igual o mayor valor.
23+
ejemplo:
24+
si lanzas un toma 2 debes lanzar otro toma2 o superior.
25+
si lanza un toma 4 no puedes tirar un toma2 debido no aplicar el castigo.
26+
si no tienes otra para lanzar debes tomar la cantidad total de cartas y pierdes tu turno.
27+
en el uno no mercy esta reglas es canonica.
28+
en hispano america esta regla es usada de una forma mal ejecutada usando la condiciòn de igual, menor o mayor valor.
29+
""".trimIndent()
30+
),
31+
Rule(
32+
title = "robar hasta jugar",
33+
desc = """
34+
esta regla consiste en robar cartas hasta que le salga:
35+
si el jugador tirò un 4 azul.
36+
el siguiente debe robar cartas hasta que le salga un nùmero 4 azul, color azul o un nùmero 4 azul de otro color.
37+
"los comodines son validos."
38+
"en el uno no mercy esta regla es canonica"
39+
""".trimIndent()
40+
),
41+
Rule(
42+
title = "intersección",
43+
desc = """
44+
esta regla se ejecuta de la siguiente forma:
45+
si un jugador lanzo un 8 rojo cualquier jugador puede tirar un carta identica.
46+
"en el uno party esta regla es canonica"
47+
""".trimIndent()
48+
),
49+
),
50+
"exclusivas" to listOf(
51+
Rule(
52+
title = "piedad",
53+
desc = """
54+
esta regla es exclusiva de uno no mercy:
55+
consiste que el jugador tiene una cantidad mayor o igual a 25 cartas estas eliminado.
56+
""".trimIndent()
57+
),
58+
Rule(
59+
title = "carta de poder",
60+
desc = """
61+
esta regla es exclusiva de flex:
62+
antes de la partida cada jugador tiene su carta de poder debe empezar con el lado verde.
63+
se debe usar bajo las siguientess condiciones:
64+
1) si tienes una carta numerada con el lado flex se puede usar
65+
2) cartas numerada que tiene un simbolo de voltear.
66+
3) cartas de acciòn u comodìn con lados flex u comodìn todos voltean.
67+
"recuerda si tiraste tu carta con el lado flex debe voltean su carta de poder a rojo."
68+
""".trimIndent()
69+
)
70+
),
71+
"no oficiales" to listOf(
72+
Rule(
73+
title = "espejo",
74+
desc = """
75+
esta reglas te permite tira todas tu cartas de mismo valor numerico sin importar el color.
76+
en el uno no mercy es una regla innecesaria a favor de la carta tira un color.
77+
"excepto en uno spin que es canonica"
78+
""".trimIndent()
79+
),
80+
Rule(
81+
title = "no ganar con cartas de acciòn u comodìn",
82+
desc = """
83+
esta regla es usada en hispano america.
84+
se trata de prohibir la victoria por medio de cartas de acciòn u comodìn no se aplica en:
85+
1. torneos.
86+
2. jugadores experimentales.
87+
3. uno all wild: debido que todas las cartas son comodines.
88+
4. uno express y junior por su sencilla dificultad.
89+
5. algunos juegos de uno que son de caracter belico.
90+
"esta regla es innecesaria"
91+
""".trimIndent()
92+
)
93+
)
94+
)
95+
896
val officialRules = listOf(
997
Rule(
1098
title = "7 - 0",

0 commit comments

Comments
 (0)