Change the UI of the spell level chooser botton sheet, cleanup some code related to icons.

This commit is contained in:
Andres Gomez, Thomas (ITDV RL) 2024-06-13 11:45:41 +02:00
parent 251e2a972f
commit e0fde383c8
48 changed files with 170 additions and 186 deletions

View file

@ -3,6 +3,7 @@ package com.pixelized.rplexicon.data.model
import android.net.Uri
import com.pixelized.rplexicon.data.model.roll.Throw
import com.pixelized.rplexicon.script.Script
import com.pixelized.rplexicon.utilitary.extentions.string.attackIcon
data class Attack(
val title: String,
@ -11,8 +12,10 @@ data class Attack(
val hit: Throw?,
val damage: Throw?,
val script: Script?,
val icon: Uri?,
private val iconUri: Uri?,
) {
val icon: Uri? get() = this.iconUri ?: title.attackIcon()
enum class Type(val key: String) {
PHYSICAL_MELEE_ATTACK("Mêlée"),
PHYSICAL_RANGE_ATTACK("Distance");

View file

@ -2,10 +2,13 @@ package com.pixelized.rplexicon.data.model
import android.net.Uri
import com.pixelized.rplexicon.data.model.roll.Throw
import com.pixelized.rplexicon.utilitary.extentions.string.objectIcon
data class ObjectAction(
val prefix: String?,
val icon: Uri?,
val name: String,
val effect: Throw?,
)
private val iconUri: Uri?,
) {
val icon: Uri? get() = iconUri ?: "${prefix ?: ""}${name}".objectIcon()
}

View file

@ -3,6 +3,7 @@ package com.pixelized.rplexicon.data.model
import android.net.Uri
import com.pixelized.rplexicon.data.model.roll.Throw
import com.pixelized.rplexicon.script.Script
import com.pixelized.rplexicon.utilitary.extentions.string.skillIcon
data class Skill(
val name: String,
@ -12,5 +13,7 @@ data class Skill(
val effect: Throw?,
val passive: Boolean,
val script: Script?,
val icon: Uri?,
)
private val iconUri: Uri?,
) {
val icon: Uri? get() = iconUri ?: name.skillIcon()
}

View file

@ -1,9 +1,9 @@
package com.pixelized.rplexicon.data.model
import android.net.Uri
import com.pixelized.rplexicon.utilitary.extentions.string.spellIcon
data class Spell(
val icon: Uri?,
val name: String,
val school: School,
val level: Int,
@ -12,7 +12,10 @@ data class Spell(
val requirement: String,
val duration: String,
val ritual: Boolean,
private val iconUri: Uri?,
) {
val icon: Uri? get() = iconUri ?: name.spellIcon()
enum class School(val key: String) {
ABJURATION("Abjuration"),
DIVINATION("Divination"),

View file

@ -5,15 +5,18 @@ import com.pixelized.rplexicon.data.model.Property
import com.pixelized.rplexicon.data.model.roll.Dice
import com.pixelized.rplexicon.data.model.roll.Flat
import com.pixelized.rplexicon.script.Script
import com.pixelized.rplexicon.utilitary.extentions.string.alterationIcon
data class Alteration(
val name: String,
val source: String,
val target: String,
val script: Script?,
val icon: Uri?,
val status: Map<Property, Status>,
private val iconUri: Uri?,
) {
val icon: Uri? get() = iconUri ?: name.alterationIcon()
data class Status(
val name: String,
val advantage: Boolean = false,

View file

@ -31,7 +31,7 @@ class AttackParser @Inject constructor(
val title = row.parse(column = NAME)
if (characterSheet != null && title != null) {
val attack = Attack(
icon = row.parseUri(column = ICON),
iconUri = row.parseUri(column = ICON),
title = title,
type = parseType(value = row.parse(column = TYPE)),
range = row.parse(column = RANGE),

View file

@ -24,7 +24,7 @@ class ObjectActionParser @Inject constructor(
objects.getOrPut(character) { mutableListOf() }.add(
ObjectAction(
prefix = row.parse(column = PREFIX),
icon = row.parseUri(column = ICON),
iconUri = row.parseUri(column = ICON),
name = name,
effect = throwParser.parse(value = row.parse(column = EFFECT)),
)

View file

@ -28,13 +28,13 @@ class SkillParser @Inject constructor(
val name = row.parse(column = NAME)
if (characterSheet != null && name != null) {
val skill = Skill(
icon = row.parseUri(column = ICON),
name = name,
amount = row.parseInt(column = AMOUNT),
rest = row.parse(column = REST),
cost = row.parse(column = COST),
effect = throwParser.parse(row.parse(column = EFFECT)),
passive = row.parseBool(column = PASSIVE) ?: false,
iconUri = row.parseUri(column = ICON),
script = row.parse(column = SCRIPT)?.let { scriptParser.parse(it) },
)
skills.getOrPut(characterSheet.name) { mutableListOf() }.add(skill)

View file

@ -35,7 +35,7 @@ class AlterationParser @Inject constructor(
val target = row.parse(column = TARGET)
if (name != null && source != null && target != null) {
val alteration = Alteration(
icon = row.parseUri(column = ICON),
iconUri = row.parseUri(column = ICON),
name = name,
source = source,
target = target,

View file

@ -37,7 +37,6 @@ class SpellBookParser @Inject constructor() {
&& duration != null
) {
val spell = Spell(
icon = icon,
name = name,
level = level,
school = school,
@ -46,6 +45,7 @@ class SpellBookParser @Inject constructor() {
requirement = requirement,
duration = duration,
ritual = row.parseBool(column = RITUAL) ?: false,
iconUri = icon,
)
spells.add(spell)
}

View file

@ -1,91 +0,0 @@
package com.pixelized.rplexicon.ui.composable
import androidx.compose.animation.core.animateIntAsState
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.NestedScrollSource
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.layoutId
import androidx.compose.ui.unit.Velocity
private val List<Measurable>.grid: Measurable get() = first { it.layoutId == GRID_ID }
private val List<Measurable>.header: Measurable get() = first { it.layoutId == HEADER_ID }
private const val GRID_ID = "GRID_ID"
private const val HEADER_ID = "HEADER_ID"
@Composable
fun CollapsingHeader(
modifier: Modifier = Modifier,
header: @Composable () -> Unit,
content: @Composable () -> Unit
) {
val headerHeight = rememberSaveable { mutableStateOf(0) }
val headerScroll = rememberSaveable { mutableStateOf(0) }
val animatedHeaderScroll = animateIntAsState(
targetValue = headerScroll.value,
label = "HeaderSnapAnimation",
)
val nestedScrollConnection = remember {
object : NestedScrollConnection {
override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
val scroll = (headerScroll.value + available.y.toInt()).coerceIn(
minimumValue = -headerHeight.value,
maximumValue = 0,
)
return if (headerScroll.value != scroll) {
headerScroll.value = scroll
available
} else {
Offset.Zero
}
}
override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {
headerScroll.value = if (headerScroll.value < -headerHeight.value / 2) {
-headerHeight.value
} else {
0
}
return super.onPostFling(consumed, available)
}
}
}
Layout(
modifier = modifier.nestedScroll(nestedScrollConnection),
content = {
Box(
modifier = Modifier.layoutId(HEADER_ID),
content = { header() },
)
Box(
modifier = Modifier.layoutId(GRID_ID),
content = { content() },
)
},
measurePolicy = { measurables, constraints ->
val headerPlaceable = measurables.header.measure(constraints)
val gridPlaceable = measurables.grid.measure(constraints)
if (headerHeight.value == 0) {
headerHeight.value = headerPlaceable.height
}
layout(constraints.maxWidth, constraints.maxHeight) {
headerPlaceable.place(0, animatedHeaderScroll.value)
gridPlaceable.place(0, headerPlaceable.height + animatedHeaderScroll.value)
}
}
)
}

View file

@ -32,7 +32,6 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.NumberPicker
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder

View file

@ -24,7 +24,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.ui.composable.NumberPicker
import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder

View file

@ -25,7 +25,6 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.NumberPicker
import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder

View file

@ -1,4 +1,4 @@
package com.pixelized.rplexicon.ui.composable
package com.pixelized.rplexicon.ui.composable.edit
import android.content.res.Configuration.UI_MODE_NIGHT_NO
import android.content.res.Configuration.UI_MODE_NIGHT_YES

View file

@ -1,4 +1,4 @@
package com.pixelized.rplexicon.ui.composable
package com.pixelized.rplexicon.ui.composable.images
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment

View file

@ -1,4 +1,4 @@
package com.pixelized.rplexicon.ui.composable
package com.pixelized.rplexicon.ui.composable.images
import androidx.compose.foundation.Image
import androidx.compose.foundation.background

View file

@ -1,4 +1,4 @@
package com.pixelized.rplexicon.ui.composable
package com.pixelized.rplexicon.ui.composable.images
import android.content.res.Configuration.UI_MODE_NIGHT_NO
import android.content.res.Configuration.UI_MODE_NIGHT_YES
@ -6,10 +6,10 @@ import android.net.Uri
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.IconButton
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.getValue

View file

@ -58,6 +58,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
import com.pixelized.rplexicon.LocalRollOverlay
import com.pixelized.rplexicon.NO_WINDOW_INSETS
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.Handle
import com.pixelized.rplexicon.ui.composable.KeepOnScreen
import com.pixelized.rplexicon.ui.composable.Loader
import com.pixelized.rplexicon.ui.composable.edit.HandleHitPointEditDialog

View file

@ -35,7 +35,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.theme.LexiconTheme
@Stable

View file

@ -30,7 +30,7 @@ import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.data.model.Attack
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.screens.character.composable.common.DiceButton
import com.pixelized.rplexicon.ui.screens.character.composable.common.FlatValue
import com.pixelized.rplexicon.ui.theme.LexiconTheme

View file

@ -38,8 +38,8 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.BackgroundImage
import com.pixelized.rplexicon.ui.composable.rememberBackgroundGradient
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.rememberBackgroundGradient
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.uri

View file

@ -31,7 +31,7 @@ import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.data.model.roll.Dice
import com.pixelized.rplexicon.data.model.roll.Flat
import com.pixelized.rplexicon.data.model.roll.Throw
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.theme.LexiconTheme
@Stable

View file

@ -30,7 +30,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.screens.character.composable.common.CounterButton
import com.pixelized.rplexicon.ui.screens.character.composable.common.DiceButton
import com.pixelized.rplexicon.ui.screens.character.composable.common.FlatValue

View file

@ -35,7 +35,7 @@ import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.data.model.Spell
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.screens.character.composable.common.DiceButton
import com.pixelized.rplexicon.ui.screens.character.composable.common.FlatValue
import com.pixelized.rplexicon.ui.theme.LexiconTheme

View file

@ -2,7 +2,15 @@ package com.pixelized.rplexicon.ui.screens.character.composable.chooser
import android.content.res.Configuration.UI_MODE_NIGHT_NO
import android.content.res.Configuration.UI_MODE_NIGHT_YES
import android.net.Uri
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.HorizontalDivider
@ -12,49 +20,97 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.ui.composable.Handle
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellLevelItem
import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellLevelUio
import com.pixelized.rplexicon.ui.screens.character.composable.preview.rememberSpellLevelChooserState
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
import com.pixelized.rplexicon.utilitary.extentions.lexicon
@Stable
data class SpellChooserUio(
val name: String,
val original: String?,
val icon: Uri?,
val spells: List<SpellLevelUio>,
)
@Composable
fun SpellLevelChooser(
modifier: Modifier = Modifier,
paddingValues: PaddingValues = PaddingValues(all = 16.dp),
spells: State<SpellChooserUio?>,
onLevel: (spell: String, level: Int) -> Unit,
) {
LazyColumn(
modifier = modifier,
) {
item {
Text(
val layoutDirection = LocalLayoutDirection.current
Box {
spells.value?.icon?.let { uri ->
BackgroundImage(
modifier = Modifier
.padding(top = 16.dp)
.padding(horizontal = 16.dp),
style = MaterialTheme.typography.titleLarge,
text = spells.value?.name ?: ""
.size(size = 144.dp)
.align(alignment = Alignment.TopEnd),
model = uri,
)
}
itemsIndexed(
items = spells.value?.spells ?: emptyList(),
) { index, item ->
SpellLevelItem(
spell = item,
onSpellCast = onLevel,
)
if (index < (spells.value?.spells?.lastIndex ?: 0)) {
HorizontalDivider(
modifier = Modifier.padding(horizontal = 16.dp),
Column(
modifier = Modifier
.padding(
top = paddingValues.calculateTopPadding(),
bottom = paddingValues.calculateBottomPadding()
)
.then(other = modifier),
verticalArrangement = Arrangement.spacedBy(space = 16.dp),
) {
Handle(
modifier = Modifier.align(alignment = Alignment.CenterHorizontally)
)
LazyColumn {
item {
Column(
modifier = Modifier.padding(
start = paddingValues.calculateStartPadding(layoutDirection),
end = paddingValues.calculateEndPadding(layoutDirection)
)
) {
Text(
style = MaterialTheme.typography.titleMedium,
text = annotateWithDropCap(
text = spells.value?.name ?: "",
style = MaterialTheme.lexicon.typography.dropCap.titleMedium,
)
)
spells.value?.original?.let { original ->
Text(
style = MaterialTheme.typography.labelSmall,
fontWeight = FontWeight.Light,
fontStyle = FontStyle.Italic,
text = original,
)
}
}
}
itemsIndexed(
items = spells.value?.spells ?: emptyList(),
) { index, item ->
SpellLevelItem(
spell = item,
onSpellCast = onLevel,
)
if (index < (spells.value?.spells?.lastIndex ?: 0)) {
HorizontalDivider(
modifier = Modifier.padding(horizontal = 16.dp),
)
}
}
}
}
}

View file

@ -33,7 +33,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
import com.pixelized.rplexicon.utilitary.extentions.lexicon

View file

@ -30,7 +30,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.ui.composable.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
import com.pixelized.rplexicon.utilitary.extentions.lexicon

View file

@ -36,7 +36,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
import com.pixelized.rplexicon.utilitary.extentions.lexicon

View file

@ -13,7 +13,9 @@ import com.pixelized.rplexicon.ui.screens.character.composable.chooser.SpellChoo
fun rememberSpellLevelChooserState() = remember {
mutableStateOf(
SpellChooserUio(
name = "Cure wounds",
name = "Soin",
original = "Cure wounds",
icon = null,
spells = listOf(
SpellLevelUio(
spell = "",

View file

@ -75,7 +75,7 @@ class AttackUioFactory @Inject constructor() {
return AttackUio(
id = attack,
icon = attack.icon ?: attack.title.attackIcon(),
icon = attack.icon,
name = attack.title,
type = when (attack.type) {
Attack.Type.PHYSICAL_MELEE_ATTACK -> R.string.attack_type_melee

View file

@ -45,7 +45,7 @@ class SkillFactoryUioFactory @Inject constructor(
val modifier = effectModifier + effectFlat
SkillItemUio(
icon = skill.icon ?: skill.name.skillIcon(),
icon = skill.icon,
label = skill.name,
translate = description?.original,
rest = skill.rest,

View file

@ -96,7 +96,7 @@ class SpellUioFactory @Inject constructor(
}
}
return SpellUio(
icon = assignedSpell.spell.icon ?: assignedSpell.spell.name.spellIcon(),
icon = assignedSpell.spell.icon,
school = assignedSpell.spell.school,
name = assignedSpell.spell.name,
translated = descriptionRepository.getDescription(name = assignedSpell.spell.name)?.original,

View file

@ -82,7 +82,7 @@ fun ActionPage(
}
},
onObject = {
objectsViewModel.showObjectDetailDialog(item = it.name)
objectsViewModel.showObjectDetailDialog(name = it.name)
},
onUseObject = {
objectsViewModel.onUse(it.name)?.let { throws ->

View file

@ -11,7 +11,6 @@ import com.pixelized.rplexicon.data.repository.character.ObjectActionRepository
import com.pixelized.rplexicon.ui.navigation.screens.characterSheetArgument
import com.pixelized.rplexicon.ui.screens.character.composable.actions.ObjectItemUio
import com.pixelized.rplexicon.ui.screens.character.composable.dialogs.SkillDialogDetailUio
import com.pixelized.rplexicon.utilitary.extentions.string.objectIcon
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@ -38,7 +37,7 @@ class ObjectsViewModel @Inject constructor(
val data = objects[character]?.map {
ObjectItemUio(
prefix = it.prefix,
icon = it.icon ?: "${it.prefix ?: ""}${it.name}".objectIcon(),
icon = it.icon,
name = it.name,
original = descriptionRepository.getDescription(name = it.name)?.original,
effect = it.effect,
@ -62,12 +61,12 @@ class ObjectsViewModel @Inject constructor(
}
}
fun showObjectDetailDialog(item: String) {
val description = descriptionRepository.getDescription(name = item)
val item = objectsRepository.find(character = character, item = item)
fun showObjectDetailDialog(name: String) {
val description = descriptionRepository.getDescription(name = name)
val item = objectsRepository.find(character = character, item = name)
if (item != null && description != null) {
_objectDetailDialog.value = SkillDialogDetailUio(
icon = item.icon ?: item.name.objectIcon(),
icon = item.icon,
name = item.name,
original = description.original,
description = description.description

View file

@ -87,7 +87,7 @@ class SkillsViewModel @Inject constructor(
val skill = skillRepository.find(character = character, skill = item)
if (skill != null && description != null) {
_skillDetailDialog.value = SkillDialogDetailUio(
icon = skill.icon ?: skill.name.skillIcon(),
icon = skill.icon,
name = skill.name,
original = description.original,
description = description.description

View file

@ -111,11 +111,16 @@ class SpellsViewModel @Inject constructor(
character = characterName,
spell = name,
)
val description = descriptionRepository.getDescription(
name = assignedSpell?.spell?.name,
)
if (assignedSpell != null && character != null && characterFire != null) {
val icon = assignedSpell.effect?.dice?.icon ?: R.drawable.ic_d20_24
val base = assignedSpell.effect?.toString(character = character, level = 1) ?: ""
_preparedSpellLevel.value = SpellChooserUio(
name = name,
original = description?.original,
icon = assignedSpell.spell.icon,
spells = List(
size = max(0, character.highestSpellLevel() + 1 - assignedSpell.spell.level)
) { index ->
@ -188,7 +193,7 @@ class SpellsViewModel @Inject constructor(
val spell = spellRepository.findSpell(name = item)
if (spell != null && description != null) {
_spellDetailDialog.value = SpellDialogDetailUio(
icon = spell.icon ?: spell.name.spellIcon(),
icon = spell.icon,
name = spell.name,
translated = description.original,
level = "${spell.level}",

View file

@ -117,7 +117,7 @@ class AlterationViewModel @Inject constructor(
name = alteration.name,
)
_alterationDetailDialog.value = AlterationDialogDetailUio(
icon = alteration.icon ?: alteration.name.alterationIcon(),
icon = alteration.icon,
name = id,
original = description?.original,
source = alteration.source,

View file

@ -159,7 +159,7 @@ class ProficiencyViewModel @Inject constructor(
val skill = skillRepository.find(character = character, skill = item)
if (skill != null && description != null) {
_skillDetailDialog.value = SkillDialogDetailUio(
icon = skill.icon ?: skill.name.skillIcon(),
icon = skill.icon,
name = skill.name,
original = description.original,
description = description.description

View file

@ -49,7 +49,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.rememberBackgroundGradient
import com.pixelized.rplexicon.ui.composable.images.rememberBackgroundGradient
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexicon

View file

@ -51,10 +51,10 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.BackgroundImage
import com.pixelized.rplexicon.ui.composable.FullScreenImageHandler
import com.pixelized.rplexicon.ui.composable.FullScreenImageViewModel
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageHandler
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageViewModel
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet
import com.pixelized.rplexicon.ui.theme.LexiconTheme

View file

@ -31,7 +31,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.lexicon

View file

@ -76,11 +76,11 @@ import androidx.compose.ui.unit.min
import androidx.hilt.navigation.compose.hiltViewModel
import com.pixelized.rplexicon.LocalSnack
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.BackgroundImage
import com.pixelized.rplexicon.ui.composable.FullScreenImageHandler
import com.pixelized.rplexicon.ui.composable.FullScreenImageViewModel
import com.pixelized.rplexicon.ui.composable.rememberBackgroundGradient
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageHandler
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageViewModel
import com.pixelized.rplexicon.ui.composable.images.rememberBackgroundGradient
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLocationDetail
import com.pixelized.rplexicon.ui.theme.LexiconTheme

View file

@ -53,10 +53,10 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.AsyncImage
import com.pixelized.rplexicon.ui.composable.BackgroundImage
import com.pixelized.rplexicon.ui.composable.FullScreenImageHandler
import com.pixelized.rplexicon.ui.composable.FullScreenImageViewModel
import com.pixelized.rplexicon.ui.composable.images.AsyncImage
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageHandler
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageViewModel
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexiconDetail
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLocationDetail

View file

@ -192,7 +192,7 @@ class RollOverlayViewModel @Inject constructor(
)
if (alteration != null) {
_alterationDetailDialog.value = AlterationDialogDetailUio(
icon = alteration.icon ?: alteration.name.alterationIcon(),
icon = alteration.icon,
name = id,
original = description?.original,
source = alteration.source,

View file

@ -24,13 +24,13 @@ class AlterationFactory @Inject constructor(
actives: Map<String, Boolean>,
description: Map<String, Description>,
): List<AlterationItemUio> {
return alterations.map {
return alterations.map { alteration ->
AlterationItemUio(
icon = it.icon ?: it.name.alterationIcon(),
label = it.name,
source = it.source,
subLabel = description[it.name]?.original,
checked = actives[it.name] ?: false,
icon = alteration.icon,
label = alteration.name,
source = alteration.source,
subLabel = description[alteration.name]?.original,
checked = actives[alteration.name] ?: false,
override = false,
)
}
@ -145,14 +145,14 @@ class AlterationFactory @Inject constructor(
return alterationRepository
.getAssignedAlterations(character = diceThrow.character, *properties.toTypedArray())
.firstOrNull()
?.map { alt ->
?.map { alteration ->
AlterationItemUio(
icon = alt.icon,
label = alt.name,
subLabel = description[alt.name]?.original,
source = alt.source,
checked = override[alt.name] ?: checked[alt.name] ?: false,
override = override[alt.name]?.let { it != checked[alt.name] } ?: false,
icon = alteration.icon,
label = alteration.name,
subLabel = description[alteration.name]?.original,
source = alteration.source,
checked = override[alteration.name] ?: checked[alteration.name] ?: false,
override = override[alteration.name]?.let { it != checked[alteration.name] } ?: false,
)
} ?: emptyList()
}

View file

@ -43,7 +43,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.composable.error.HandleFetchError
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
import com.pixelized.rplexicon.ui.theme.LexiconTheme

View file

@ -72,7 +72,7 @@ class StatisticViewModel @Inject constructor(
if (alteration != null) {
_alterationDetailDialog.value = AlterationDialogDetailUio(
icon = alteration.icon ?: alteration.name.alterationIcon(),
icon = alteration.icon,
name = name,
original = description?.original,
source = alteration.source,