diff --git a/composeApp/src/commonMain/composeResources/drawable/ic_cancel_24dp.xml b/composeApp/src/commonMain/composeResources/drawable/ic_cancel_24dp.xml
new file mode 100644
index 0000000..282a9a5
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/drawable/ic_cancel_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml
index 352544a..533e975 100644
--- a/composeApp/src/commonMain/composeResources/values/strings.xml
+++ b/composeApp/src/commonMain/composeResources/values/strings.xml
@@ -1,5 +1,9 @@
+
+ La feuille de personnage est introuvable
+ Ok
+
La table de Lwa
Confirmer
@@ -82,6 +86,7 @@
Supprimer
Compétence d'occupation
+ niv : %1$d
État diminué
Modifier
Supprimer
@@ -153,6 +158,7 @@
Aucun
Vous êtes connecté au serveur
Vous êtes déconnecté du serveur
+ Ok
Historique des lancers
lance
@@ -178,4 +184,9 @@
Défilement automatique
Défilement automatique du chat vers le dernier message reçu lors de la réception de ce dernier.
+ Montée de niveau
+ Level Up !
+ Passage du niveau %1$d au niveau supérieur : %2$d
+ niv : %1$d -
+
\ No newline at end of file
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/App.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/App.kt
index 7b34129..1fa5ce5 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/App.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/App.kt
@@ -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 {
error("Local application scope is not yet ready")
}
+val LocalRollHostState = compositionLocalOf {
+ error("Local Roll Host State is not yet ready")
+}
+
+val LocalBlurController = compositionLocalOf {
+ 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() }
+ 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,
)
}
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/Module.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/Module.kt
index 23e5558..c4b528d 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/Module.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/Module.kt
@@ -16,6 +16,7 @@ import com.pixelized.desktop.lwa.repository.settings.SettingsStore
import com.pixelized.desktop.lwa.ui.composable.character.characteristic.CharacterDetailCharacteristicDialogViewModel
import com.pixelized.desktop.lwa.ui.composable.character.characteristic.CharacterSheetCharacteristicDialogFactory
import com.pixelized.desktop.lwa.ui.screen.campaign.CampaignViewModel
+import com.pixelized.desktop.lwa.ui.screen.levelup.LevelUpViewModel
import com.pixelized.desktop.lwa.ui.screen.campaign.chat.CampaignChatViewModel
import com.pixelized.desktop.lwa.ui.screen.campaign.chat.TextMessageFactory
import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDetailFactory
@@ -28,10 +29,11 @@ import com.pixelized.desktop.lwa.ui.screen.characterSheet.detail.CharacterSheetV
import com.pixelized.desktop.lwa.ui.screen.characterSheet.edit.CharacterSheetEditFactory
import com.pixelized.desktop.lwa.ui.screen.characterSheet.edit.CharacterSheetEditViewModel
import com.pixelized.desktop.lwa.ui.screen.characterSheet.edit.common.SkillFieldFactory
+import com.pixelized.desktop.lwa.ui.screen.levelup.LevelUpFactory
import com.pixelized.desktop.lwa.ui.screen.main.MainPageViewModel
import com.pixelized.desktop.lwa.ui.screen.network.NetworkFactory
import com.pixelized.desktop.lwa.ui.screen.network.NetworkViewModel
-import com.pixelized.desktop.lwa.ui.screen.roll.RollViewModel
+import com.pixelized.desktop.lwa.ui.overlay.roll.RollViewModel
import com.pixelized.desktop.lwa.ui.screen.rollhistory.RollHistoryViewModel
import com.pixelized.desktop.lwa.ui.screen.settings.SettingsViewModel
import com.pixelized.desktop.lwa.usecase.SettingsUseCase
@@ -109,6 +111,7 @@ val factoryDependencies
factoryOf(::CharacterDetailFactory)
factoryOf(::CharacterSheetCharacteristicDialogFactory)
factoryOf(::TextMessageFactory)
+ factoryOf(::LevelUpFactory)
}
val viewModelDependencies
@@ -126,6 +129,7 @@ val viewModelDependencies
viewModelOf(::CharacterDetailCharacteristicDialogViewModel)
viewModelOf(::CampaignChatViewModel)
viewModelOf(::SettingsViewModel)
+ viewModelOf(::LevelUpViewModel)
}
val useCaseDependencies
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/network/LwaClientImpl.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/network/LwaClientImpl.kt
index 8b0d08d..bb0373c 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/network/LwaClientImpl.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/network/LwaClientImpl.kt
@@ -13,7 +13,6 @@ import io.ktor.client.request.put
import io.ktor.client.request.setBody
import io.ktor.http.ContentType
import io.ktor.http.contentType
-import io.ktor.http.path
class LwaClientImpl(
private val client: HttpClient,
@@ -30,12 +29,9 @@ class LwaClientImpl(
.body()
override suspend fun updateCharacter(sheet: CharacterSheetJson) = client
- .put {
- url {
- path("$host/character/update?id=")
- contentType(ContentType.Application.Json)
- setBody(sheet)
- }
+ .put("$root/character/update") {
+ contentType(ContentType.Application.Json)
+ setBody(sheet)
}
.body()
@@ -92,10 +88,8 @@ class LwaClientImpl(
alterationId: String,
) = client
.put("$root/alterations/active/toggle?characterSheetId=$characterSheetId&instanceId=$instanceId") {
- url {
- contentType(ContentType.Application.Json)
- setBody(alterationId)
- }
+ contentType(ContentType.Application.Json)
+ setBody(alterationId)
}
.body()
}
\ No newline at end of file
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/repository/alteration/AlterationRepository.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/repository/alteration/AlterationRepository.kt
index 84336ed..26e685e 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/repository/alteration/AlterationRepository.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/repository/alteration/AlterationRepository.kt
@@ -38,9 +38,9 @@ class AlterationRepository(
)
fun alterationsFlow(
- characterId: CharacterInstance.Id,
+ characterInstanceId: CharacterInstance.Id,
): Flow