LevelUp feature.

This commit is contained in:
Thomas Andres Gomez 2025-03-07 15:49:36 +01:00
parent 84515e6d57
commit 16b2b49f03
75 changed files with 2532 additions and 777 deletions

View file

@ -37,6 +37,9 @@ import coil3.compose.setSingletonImageLoaderFactory
import coil3.request.crossfade
import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.desktop.lwa.repository.network.NetworkRepository.Status
import com.pixelized.desktop.lwa.ui.composable.blur.BlurContent
import com.pixelized.desktop.lwa.ui.composable.blur.BlurContentController
import com.pixelized.desktop.lwa.ui.composable.blur.rememberBlurContentController
import com.pixelized.desktop.lwa.ui.composable.key.KeyEventHandler
import com.pixelized.desktop.lwa.ui.composable.key.LocalKeyEventHandlers
import com.pixelized.desktop.lwa.ui.navigation.screen.MainNavHost
@ -56,6 +59,8 @@ import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.PlayerRibbon
import com.pixelized.desktop.lwa.ui.screen.characterSheet.CharacterSheetMainNavHost
import com.pixelized.desktop.lwa.ui.screen.network.NetworkPage
import com.pixelized.desktop.lwa.ui.screen.network.NetworkViewModel
import com.pixelized.desktop.lwa.ui.overlay.roll.RollHostState
import com.pixelized.desktop.lwa.ui.overlay.roll.RollOverlay
import com.pixelized.desktop.lwa.ui.screen.rollhistory.RollHistoryPage
import com.pixelized.desktop.lwa.ui.screen.rollhistory.RollHistoryViewModel
import com.pixelized.desktop.lwa.ui.theme.LwaTheme
@ -65,6 +70,7 @@ import lwacharactersheet.composeapp.generated.resources.Res
import lwacharactersheet.composeapp.generated.resources.app_name
import lwacharactersheet.composeapp.generated.resources.network__connect__message
import lwacharactersheet.composeapp.generated.resources.network__disconnect__message
import lwacharactersheet.composeapp.generated.resources.network__message__action
import org.jetbrains.compose.resources.getString
import org.jetbrains.compose.ui.tooling.preview.Preview
import org.koin.compose.koinInject
@ -86,6 +92,14 @@ val LocalApplicationScope = compositionLocalOf<ApplicationScope> {
error("Local application scope is not yet ready")
}
val LocalRollHostState = compositionLocalOf<RollHostState> {
error("Local Roll Host State is not yet ready")
}
val LocalBlurController = compositionLocalOf<BlurContentController> {
error("Local Blur Controller is not yet ready")
}
@Composable
@Preview
fun ApplicationScope.App() {
@ -94,6 +108,8 @@ fun ApplicationScope.App() {
val errorSnackHostState = remember { SnackbarHostState() }
val windowController = remember { WindowController(maxWindowHeight) }
val keyEventHandlers = remember { mutableStateListOf<KeyEventHandler>() }
val rollHostState = remember { RollHostState() }
val blurController = rememberBlurContentController()
val windowsState = rememberWindowState(
size = DpSize(
width = 800.dp,
@ -117,6 +133,8 @@ fun ApplicationScope.App() {
LocalErrorSnackHost provides errorSnackHostState,
LocalWindowController provides windowController,
LocalKeyEventHandlers provides keyEventHandlers,
LocalRollHostState provides rollHostState,
LocalBlurController provides blurController,
LocalWindowState provides windowsState,
) {
Window(
@ -147,6 +165,8 @@ private fun MainWindowScreen(
val snackHostState = LocalSnackHost.current
val errorSnackHostState = LocalErrorSnackHost.current
val windowController = LocalWindowController.current
val rollHostState = LocalRollHostState.current
val blurController = LocalBlurController.current
LwaTheme {
Surface(
@ -163,6 +183,9 @@ private fun MainWindowScreen(
snackbar = {
Snackbar(
snackbarData = it,
backgroundColor = MaterialTheme.colors.surface,
contentColor = MaterialTheme.colors.onSurface,
actionColor = MaterialTheme.colors.onSurface,
)
}
)
@ -180,10 +203,18 @@ private fun MainWindowScreen(
}
},
content = {
MainNavHost(
campaignViewModel = campaignViewModel,
networkViewModel = networkViewModel,
campaignChatViewModel = campaignChatViewModel,
BlurContent(
modifier = Modifier.fillMaxSize(),
controller = blurController
) {
MainNavHost(
campaignViewModel = campaignViewModel,
networkViewModel = networkViewModel,
campaignChatViewModel = campaignChatViewModel,
)
}
RollOverlay(
hostState = rollHostState,
)
}
)
@ -209,7 +240,7 @@ private fun WindowsHandler(
when (window) {
is CharacterSheetWindow -> CharacterSheetMainNavHost(
startDestination = CharacterSheetDestination.navigationRoute(
id = window.characterId,
characterInstanceId = window.characterId,
),
)
@ -247,6 +278,7 @@ private fun NetworkSnackHandler(
}
snack.showSnackbar(
message = message,
actionLabel = getString(Res.string.network__message__action),
duration = SnackbarDuration.Short,
)
}