Change the UI of the spell level chooser botton sheet, cleanup some code related to icons.
This commit is contained in:
parent
251e2a972f
commit
e0fde383c8
48 changed files with 170 additions and 186 deletions
|
|
@ -3,6 +3,7 @@ package com.pixelized.rplexicon.data.model
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.pixelized.rplexicon.data.model.roll.Throw
|
import com.pixelized.rplexicon.data.model.roll.Throw
|
||||||
import com.pixelized.rplexicon.script.Script
|
import com.pixelized.rplexicon.script.Script
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.string.attackIcon
|
||||||
|
|
||||||
data class Attack(
|
data class Attack(
|
||||||
val title: String,
|
val title: String,
|
||||||
|
|
@ -11,8 +12,10 @@ data class Attack(
|
||||||
val hit: Throw?,
|
val hit: Throw?,
|
||||||
val damage: Throw?,
|
val damage: Throw?,
|
||||||
val script: Script?,
|
val script: Script?,
|
||||||
val icon: Uri?,
|
private val iconUri: Uri?,
|
||||||
) {
|
) {
|
||||||
|
val icon: Uri? get() = this.iconUri ?: title.attackIcon()
|
||||||
|
|
||||||
enum class Type(val key: String) {
|
enum class Type(val key: String) {
|
||||||
PHYSICAL_MELEE_ATTACK("Mêlée"),
|
PHYSICAL_MELEE_ATTACK("Mêlée"),
|
||||||
PHYSICAL_RANGE_ATTACK("Distance");
|
PHYSICAL_RANGE_ATTACK("Distance");
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,13 @@ package com.pixelized.rplexicon.data.model
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.pixelized.rplexicon.data.model.roll.Throw
|
import com.pixelized.rplexicon.data.model.roll.Throw
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.string.objectIcon
|
||||||
|
|
||||||
data class ObjectAction(
|
data class ObjectAction(
|
||||||
val prefix: String?,
|
val prefix: String?,
|
||||||
val icon: Uri?,
|
|
||||||
val name: String,
|
val name: String,
|
||||||
val effect: Throw?,
|
val effect: Throw?,
|
||||||
)
|
private val iconUri: Uri?,
|
||||||
|
) {
|
||||||
|
val icon: Uri? get() = iconUri ?: "${prefix ?: ""}${name}".objectIcon()
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@ package com.pixelized.rplexicon.data.model
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.pixelized.rplexicon.data.model.roll.Throw
|
import com.pixelized.rplexicon.data.model.roll.Throw
|
||||||
import com.pixelized.rplexicon.script.Script
|
import com.pixelized.rplexicon.script.Script
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.string.skillIcon
|
||||||
|
|
||||||
data class Skill(
|
data class Skill(
|
||||||
val name: String,
|
val name: String,
|
||||||
|
|
@ -12,5 +13,7 @@ data class Skill(
|
||||||
val effect: Throw?,
|
val effect: Throw?,
|
||||||
val passive: Boolean,
|
val passive: Boolean,
|
||||||
val script: Script?,
|
val script: Script?,
|
||||||
val icon: Uri?,
|
private val iconUri: Uri?,
|
||||||
)
|
) {
|
||||||
|
val icon: Uri? get() = iconUri ?: name.skillIcon()
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package com.pixelized.rplexicon.data.model
|
package com.pixelized.rplexicon.data.model
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.string.spellIcon
|
||||||
|
|
||||||
data class Spell(
|
data class Spell(
|
||||||
val icon: Uri?,
|
|
||||||
val name: String,
|
val name: String,
|
||||||
val school: School,
|
val school: School,
|
||||||
val level: Int,
|
val level: Int,
|
||||||
|
|
@ -12,7 +12,10 @@ data class Spell(
|
||||||
val requirement: String,
|
val requirement: String,
|
||||||
val duration: String,
|
val duration: String,
|
||||||
val ritual: Boolean,
|
val ritual: Boolean,
|
||||||
|
private val iconUri: Uri?,
|
||||||
) {
|
) {
|
||||||
|
val icon: Uri? get() = iconUri ?: name.spellIcon()
|
||||||
|
|
||||||
enum class School(val key: String) {
|
enum class School(val key: String) {
|
||||||
ABJURATION("Abjuration"),
|
ABJURATION("Abjuration"),
|
||||||
DIVINATION("Divination"),
|
DIVINATION("Divination"),
|
||||||
|
|
|
||||||
|
|
@ -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.Dice
|
||||||
import com.pixelized.rplexicon.data.model.roll.Flat
|
import com.pixelized.rplexicon.data.model.roll.Flat
|
||||||
import com.pixelized.rplexicon.script.Script
|
import com.pixelized.rplexicon.script.Script
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.string.alterationIcon
|
||||||
|
|
||||||
data class Alteration(
|
data class Alteration(
|
||||||
val name: String,
|
val name: String,
|
||||||
val source: String,
|
val source: String,
|
||||||
val target: String,
|
val target: String,
|
||||||
val script: Script?,
|
val script: Script?,
|
||||||
val icon: Uri?,
|
|
||||||
val status: Map<Property, Status>,
|
val status: Map<Property, Status>,
|
||||||
|
private val iconUri: Uri?,
|
||||||
) {
|
) {
|
||||||
|
val icon: Uri? get() = iconUri ?: name.alterationIcon()
|
||||||
|
|
||||||
data class Status(
|
data class Status(
|
||||||
val name: String,
|
val name: String,
|
||||||
val advantage: Boolean = false,
|
val advantage: Boolean = false,
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ class AttackParser @Inject constructor(
|
||||||
val title = row.parse(column = NAME)
|
val title = row.parse(column = NAME)
|
||||||
if (characterSheet != null && title != null) {
|
if (characterSheet != null && title != null) {
|
||||||
val attack = Attack(
|
val attack = Attack(
|
||||||
icon = row.parseUri(column = ICON),
|
iconUri = row.parseUri(column = ICON),
|
||||||
title = title,
|
title = title,
|
||||||
type = parseType(value = row.parse(column = TYPE)),
|
type = parseType(value = row.parse(column = TYPE)),
|
||||||
range = row.parse(column = RANGE),
|
range = row.parse(column = RANGE),
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ class ObjectActionParser @Inject constructor(
|
||||||
objects.getOrPut(character) { mutableListOf() }.add(
|
objects.getOrPut(character) { mutableListOf() }.add(
|
||||||
ObjectAction(
|
ObjectAction(
|
||||||
prefix = row.parse(column = PREFIX),
|
prefix = row.parse(column = PREFIX),
|
||||||
icon = row.parseUri(column = ICON),
|
iconUri = row.parseUri(column = ICON),
|
||||||
name = name,
|
name = name,
|
||||||
effect = throwParser.parse(value = row.parse(column = EFFECT)),
|
effect = throwParser.parse(value = row.parse(column = EFFECT)),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,13 @@ class SkillParser @Inject constructor(
|
||||||
val name = row.parse(column = NAME)
|
val name = row.parse(column = NAME)
|
||||||
if (characterSheet != null && name != null) {
|
if (characterSheet != null && name != null) {
|
||||||
val skill = Skill(
|
val skill = Skill(
|
||||||
icon = row.parseUri(column = ICON),
|
|
||||||
name = name,
|
name = name,
|
||||||
amount = row.parseInt(column = AMOUNT),
|
amount = row.parseInt(column = AMOUNT),
|
||||||
rest = row.parse(column = REST),
|
rest = row.parse(column = REST),
|
||||||
cost = row.parse(column = COST),
|
cost = row.parse(column = COST),
|
||||||
effect = throwParser.parse(row.parse(column = EFFECT)),
|
effect = throwParser.parse(row.parse(column = EFFECT)),
|
||||||
passive = row.parseBool(column = PASSIVE) ?: false,
|
passive = row.parseBool(column = PASSIVE) ?: false,
|
||||||
|
iconUri = row.parseUri(column = ICON),
|
||||||
script = row.parse(column = SCRIPT)?.let { scriptParser.parse(it) },
|
script = row.parse(column = SCRIPT)?.let { scriptParser.parse(it) },
|
||||||
)
|
)
|
||||||
skills.getOrPut(characterSheet.name) { mutableListOf() }.add(skill)
|
skills.getOrPut(characterSheet.name) { mutableListOf() }.add(skill)
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class AlterationParser @Inject constructor(
|
||||||
val target = row.parse(column = TARGET)
|
val target = row.parse(column = TARGET)
|
||||||
if (name != null && source != null && target != null) {
|
if (name != null && source != null && target != null) {
|
||||||
val alteration = Alteration(
|
val alteration = Alteration(
|
||||||
icon = row.parseUri(column = ICON),
|
iconUri = row.parseUri(column = ICON),
|
||||||
name = name,
|
name = name,
|
||||||
source = source,
|
source = source,
|
||||||
target = target,
|
target = target,
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ class SpellBookParser @Inject constructor() {
|
||||||
&& duration != null
|
&& duration != null
|
||||||
) {
|
) {
|
||||||
val spell = Spell(
|
val spell = Spell(
|
||||||
icon = icon,
|
|
||||||
name = name,
|
name = name,
|
||||||
level = level,
|
level = level,
|
||||||
school = school,
|
school = school,
|
||||||
|
|
@ -46,6 +45,7 @@ class SpellBookParser @Inject constructor() {
|
||||||
requirement = requirement,
|
requirement = requirement,
|
||||||
duration = duration,
|
duration = duration,
|
||||||
ritual = row.parseBool(column = RITUAL) ?: false,
|
ritual = row.parseBool(column = RITUAL) ?: false,
|
||||||
|
iconUri = icon,
|
||||||
)
|
)
|
||||||
spells.add(spell)
|
spells.add(spell)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
@ -32,7 +32,6 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import com.pixelized.rplexicon.R
|
import com.pixelized.rplexicon.R
|
||||||
import com.pixelized.rplexicon.ui.composable.NumberPicker
|
|
||||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
|
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
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.lexicon
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
|
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import com.pixelized.rplexicon.R
|
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.lexicon
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
|
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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_NO
|
||||||
import android.content.res.Configuration.UI_MODE_NIGHT_YES
|
import android.content.res.Configuration.UI_MODE_NIGHT_YES
|
||||||
|
|
@ -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.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
|
|
@ -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.Image
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
|
|
@ -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_NO
|
||||||
import android.content.res.Configuration.UI_MODE_NIGHT_YES
|
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.Box
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material.IconButton
|
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Close
|
import androidx.compose.material.icons.filled.Close
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.State
|
import androidx.compose.runtime.State
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
|
@ -58,6 +58,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.pixelized.rplexicon.LocalRollOverlay
|
import com.pixelized.rplexicon.LocalRollOverlay
|
||||||
import com.pixelized.rplexicon.NO_WINDOW_INSETS
|
import com.pixelized.rplexicon.NO_WINDOW_INSETS
|
||||||
import com.pixelized.rplexicon.R
|
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.KeepOnScreen
|
||||||
import com.pixelized.rplexicon.ui.composable.Loader
|
import com.pixelized.rplexicon.ui.composable.Loader
|
||||||
import com.pixelized.rplexicon.ui.composable.edit.HandleHitPointEditDialog
|
import com.pixelized.rplexicon.ui.composable.edit.HandleHitPointEditDialog
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import androidx.compose.ui.unit.dp
|
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.ui.theme.LexiconTheme
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import com.pixelized.rplexicon.R
|
import com.pixelized.rplexicon.R
|
||||||
import com.pixelized.rplexicon.data.model.Attack
|
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.DiceButton
|
||||||
import com.pixelized.rplexicon.ui.screens.character.composable.common.FlatValue
|
import com.pixelized.rplexicon.ui.screens.character.composable.common.FlatValue
|
||||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.LayoutDirection
|
import androidx.compose.ui.unit.LayoutDirection
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.pixelized.rplexicon.R
|
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.rememberBackgroundGradient
|
import com.pixelized.rplexicon.ui.composable.images.rememberBackgroundGradient
|
||||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.uri
|
import com.pixelized.rplexicon.utilitary.extentions.uri
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ import com.pixelized.rplexicon.R
|
||||||
import com.pixelized.rplexicon.data.model.roll.Dice
|
import com.pixelized.rplexicon.data.model.roll.Dice
|
||||||
import com.pixelized.rplexicon.data.model.roll.Flat
|
import com.pixelized.rplexicon.data.model.roll.Flat
|
||||||
import com.pixelized.rplexicon.data.model.roll.Throw
|
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
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.pixelized.rplexicon.R
|
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.CounterButton
|
||||||
import com.pixelized.rplexicon.ui.screens.character.composable.common.DiceButton
|
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.screens.character.composable.common.FlatValue
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import com.pixelized.rplexicon.R
|
import com.pixelized.rplexicon.R
|
||||||
import com.pixelized.rplexicon.data.model.Spell
|
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.DiceButton
|
||||||
import com.pixelized.rplexicon.ui.screens.character.composable.common.FlatValue
|
import com.pixelized.rplexicon.ui.screens.character.composable.common.FlatValue
|
||||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
|
|
|
||||||
|
|
@ -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_NO
|
||||||
import android.content.res.Configuration.UI_MODE_NIGHT_YES
|
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.padding
|
||||||
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.itemsIndexed
|
import androidx.compose.foundation.lazy.itemsIndexed
|
||||||
import androidx.compose.material3.HorizontalDivider
|
import androidx.compose.material3.HorizontalDivider
|
||||||
|
|
@ -12,49 +20,97 @@ import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.Stable
|
import androidx.compose.runtime.Stable
|
||||||
import androidx.compose.runtime.State
|
import androidx.compose.runtime.State
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
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.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
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.SpellLevelItem
|
||||||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellLevelUio
|
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.screens.character.composable.preview.rememberSpellLevelChooserState
|
||||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
|
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
|
||||||
|
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
data class SpellChooserUio(
|
data class SpellChooserUio(
|
||||||
val name: String,
|
val name: String,
|
||||||
|
val original: String?,
|
||||||
|
val icon: Uri?,
|
||||||
val spells: List<SpellLevelUio>,
|
val spells: List<SpellLevelUio>,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SpellLevelChooser(
|
fun SpellLevelChooser(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
paddingValues: PaddingValues = PaddingValues(all = 16.dp),
|
||||||
spells: State<SpellChooserUio?>,
|
spells: State<SpellChooserUio?>,
|
||||||
onLevel: (spell: String, level: Int) -> Unit,
|
onLevel: (spell: String, level: Int) -> Unit,
|
||||||
) {
|
) {
|
||||||
LazyColumn(
|
val layoutDirection = LocalLayoutDirection.current
|
||||||
modifier = modifier,
|
Box {
|
||||||
) {
|
spells.value?.icon?.let { uri ->
|
||||||
item {
|
BackgroundImage(
|
||||||
Text(
|
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(top = 16.dp)
|
.size(size = 144.dp)
|
||||||
.padding(horizontal = 16.dp),
|
.align(alignment = Alignment.TopEnd),
|
||||||
style = MaterialTheme.typography.titleLarge,
|
model = uri,
|
||||||
text = spells.value?.name ?: ""
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
itemsIndexed(
|
Column(
|
||||||
items = spells.value?.spells ?: emptyList(),
|
modifier = Modifier
|
||||||
) { index, item ->
|
.padding(
|
||||||
SpellLevelItem(
|
top = paddingValues.calculateTopPadding(),
|
||||||
spell = item,
|
bottom = paddingValues.calculateBottomPadding()
|
||||||
onSpellCast = onLevel,
|
|
||||||
)
|
|
||||||
if (index < (spells.value?.spells?.lastIndex ?: 0)) {
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
)
|
)
|
||||||
|
.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),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import com.pixelized.rplexicon.R
|
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.ui.theme.LexiconTheme
|
||||||
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
|
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
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.ui.theme.LexiconTheme
|
||||||
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
|
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import com.pixelized.rplexicon.R
|
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.ui.theme.LexiconTheme
|
||||||
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
|
import com.pixelized.rplexicon.utilitary.annotateWithDropCap
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,9 @@ import com.pixelized.rplexicon.ui.screens.character.composable.chooser.SpellChoo
|
||||||
fun rememberSpellLevelChooserState() = remember {
|
fun rememberSpellLevelChooserState() = remember {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
SpellChooserUio(
|
SpellChooserUio(
|
||||||
name = "Cure wounds",
|
name = "Soin",
|
||||||
|
original = "Cure wounds",
|
||||||
|
icon = null,
|
||||||
spells = listOf(
|
spells = listOf(
|
||||||
SpellLevelUio(
|
SpellLevelUio(
|
||||||
spell = "",
|
spell = "",
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ class AttackUioFactory @Inject constructor() {
|
||||||
|
|
||||||
return AttackUio(
|
return AttackUio(
|
||||||
id = attack,
|
id = attack,
|
||||||
icon = attack.icon ?: attack.title.attackIcon(),
|
icon = attack.icon,
|
||||||
name = attack.title,
|
name = attack.title,
|
||||||
type = when (attack.type) {
|
type = when (attack.type) {
|
||||||
Attack.Type.PHYSICAL_MELEE_ATTACK -> R.string.attack_type_melee
|
Attack.Type.PHYSICAL_MELEE_ATTACK -> R.string.attack_type_melee
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ class SkillFactoryUioFactory @Inject constructor(
|
||||||
val modifier = effectModifier + effectFlat
|
val modifier = effectModifier + effectFlat
|
||||||
|
|
||||||
SkillItemUio(
|
SkillItemUio(
|
||||||
icon = skill.icon ?: skill.name.skillIcon(),
|
icon = skill.icon,
|
||||||
label = skill.name,
|
label = skill.name,
|
||||||
translate = description?.original,
|
translate = description?.original,
|
||||||
rest = skill.rest,
|
rest = skill.rest,
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ class SpellUioFactory @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return SpellUio(
|
return SpellUio(
|
||||||
icon = assignedSpell.spell.icon ?: assignedSpell.spell.name.spellIcon(),
|
icon = assignedSpell.spell.icon,
|
||||||
school = assignedSpell.spell.school,
|
school = assignedSpell.spell.school,
|
||||||
name = assignedSpell.spell.name,
|
name = assignedSpell.spell.name,
|
||||||
translated = descriptionRepository.getDescription(name = assignedSpell.spell.name)?.original,
|
translated = descriptionRepository.getDescription(name = assignedSpell.spell.name)?.original,
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ fun ActionPage(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onObject = {
|
onObject = {
|
||||||
objectsViewModel.showObjectDetailDialog(item = it.name)
|
objectsViewModel.showObjectDetailDialog(name = it.name)
|
||||||
},
|
},
|
||||||
onUseObject = {
|
onUseObject = {
|
||||||
objectsViewModel.onUse(it.name)?.let { throws ->
|
objectsViewModel.onUse(it.name)?.let { throws ->
|
||||||
|
|
|
||||||
|
|
@ -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.navigation.screens.characterSheetArgument
|
||||||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.ObjectItemUio
|
import com.pixelized.rplexicon.ui.screens.character.composable.actions.ObjectItemUio
|
||||||
import com.pixelized.rplexicon.ui.screens.character.composable.dialogs.SkillDialogDetailUio
|
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 dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
@ -38,7 +37,7 @@ class ObjectsViewModel @Inject constructor(
|
||||||
val data = objects[character]?.map {
|
val data = objects[character]?.map {
|
||||||
ObjectItemUio(
|
ObjectItemUio(
|
||||||
prefix = it.prefix,
|
prefix = it.prefix,
|
||||||
icon = it.icon ?: "${it.prefix ?: ""}${it.name}".objectIcon(),
|
icon = it.icon,
|
||||||
name = it.name,
|
name = it.name,
|
||||||
original = descriptionRepository.getDescription(name = it.name)?.original,
|
original = descriptionRepository.getDescription(name = it.name)?.original,
|
||||||
effect = it.effect,
|
effect = it.effect,
|
||||||
|
|
@ -62,12 +61,12 @@ class ObjectsViewModel @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showObjectDetailDialog(item: String) {
|
fun showObjectDetailDialog(name: String) {
|
||||||
val description = descriptionRepository.getDescription(name = item)
|
val description = descriptionRepository.getDescription(name = name)
|
||||||
val item = objectsRepository.find(character = character, item = item)
|
val item = objectsRepository.find(character = character, item = name)
|
||||||
if (item != null && description != null) {
|
if (item != null && description != null) {
|
||||||
_objectDetailDialog.value = SkillDialogDetailUio(
|
_objectDetailDialog.value = SkillDialogDetailUio(
|
||||||
icon = item.icon ?: item.name.objectIcon(),
|
icon = item.icon,
|
||||||
name = item.name,
|
name = item.name,
|
||||||
original = description.original,
|
original = description.original,
|
||||||
description = description.description
|
description = description.description
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ class SkillsViewModel @Inject constructor(
|
||||||
val skill = skillRepository.find(character = character, skill = item)
|
val skill = skillRepository.find(character = character, skill = item)
|
||||||
if (skill != null && description != null) {
|
if (skill != null && description != null) {
|
||||||
_skillDetailDialog.value = SkillDialogDetailUio(
|
_skillDetailDialog.value = SkillDialogDetailUio(
|
||||||
icon = skill.icon ?: skill.name.skillIcon(),
|
icon = skill.icon,
|
||||||
name = skill.name,
|
name = skill.name,
|
||||||
original = description.original,
|
original = description.original,
|
||||||
description = description.description
|
description = description.description
|
||||||
|
|
|
||||||
|
|
@ -111,11 +111,16 @@ class SpellsViewModel @Inject constructor(
|
||||||
character = characterName,
|
character = characterName,
|
||||||
spell = name,
|
spell = name,
|
||||||
)
|
)
|
||||||
|
val description = descriptionRepository.getDescription(
|
||||||
|
name = assignedSpell?.spell?.name,
|
||||||
|
)
|
||||||
if (assignedSpell != null && character != null && characterFire != null) {
|
if (assignedSpell != null && character != null && characterFire != null) {
|
||||||
val icon = assignedSpell.effect?.dice?.icon ?: R.drawable.ic_d20_24
|
val icon = assignedSpell.effect?.dice?.icon ?: R.drawable.ic_d20_24
|
||||||
val base = assignedSpell.effect?.toString(character = character, level = 1) ?: ""
|
val base = assignedSpell.effect?.toString(character = character, level = 1) ?: ""
|
||||||
_preparedSpellLevel.value = SpellChooserUio(
|
_preparedSpellLevel.value = SpellChooserUio(
|
||||||
name = name,
|
name = name,
|
||||||
|
original = description?.original,
|
||||||
|
icon = assignedSpell.spell.icon,
|
||||||
spells = List(
|
spells = List(
|
||||||
size = max(0, character.highestSpellLevel() + 1 - assignedSpell.spell.level)
|
size = max(0, character.highestSpellLevel() + 1 - assignedSpell.spell.level)
|
||||||
) { index ->
|
) { index ->
|
||||||
|
|
@ -188,7 +193,7 @@ class SpellsViewModel @Inject constructor(
|
||||||
val spell = spellRepository.findSpell(name = item)
|
val spell = spellRepository.findSpell(name = item)
|
||||||
if (spell != null && description != null) {
|
if (spell != null && description != null) {
|
||||||
_spellDetailDialog.value = SpellDialogDetailUio(
|
_spellDetailDialog.value = SpellDialogDetailUio(
|
||||||
icon = spell.icon ?: spell.name.spellIcon(),
|
icon = spell.icon,
|
||||||
name = spell.name,
|
name = spell.name,
|
||||||
translated = description.original,
|
translated = description.original,
|
||||||
level = "${spell.level}",
|
level = "${spell.level}",
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ class AlterationViewModel @Inject constructor(
|
||||||
name = alteration.name,
|
name = alteration.name,
|
||||||
)
|
)
|
||||||
_alterationDetailDialog.value = AlterationDialogDetailUio(
|
_alterationDetailDialog.value = AlterationDialogDetailUio(
|
||||||
icon = alteration.icon ?: alteration.name.alterationIcon(),
|
icon = alteration.icon,
|
||||||
name = id,
|
name = id,
|
||||||
original = description?.original,
|
original = description?.original,
|
||||||
source = alteration.source,
|
source = alteration.source,
|
||||||
|
|
|
||||||
|
|
@ -159,7 +159,7 @@ class ProficiencyViewModel @Inject constructor(
|
||||||
val skill = skillRepository.find(character = character, skill = item)
|
val skill = skillRepository.find(character = character, skill = item)
|
||||||
if (skill != null && description != null) {
|
if (skill != null && description != null) {
|
||||||
_skillDetailDialog.value = SkillDialogDetailUio(
|
_skillDetailDialog.value = SkillDialogDetailUio(
|
||||||
icon = skill.icon ?: skill.name.skillIcon(),
|
icon = skill.icon,
|
||||||
name = skill.name,
|
name = skill.name,
|
||||||
original = description.original,
|
original = description.original,
|
||||||
description = description.description
|
description = description.description
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.pixelized.rplexicon.R
|
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.LocalScreenNavHost
|
||||||
import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet
|
import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet
|
||||||
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexicon
|
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexicon
|
||||||
|
|
|
||||||
|
|
@ -51,10 +51,10 @@ import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.pixelized.rplexicon.R
|
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.composable.BackgroundImage
|
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
|
||||||
import com.pixelized.rplexicon.ui.composable.FullScreenImageHandler
|
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageHandler
|
||||||
import com.pixelized.rplexicon.ui.composable.FullScreenImageViewModel
|
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageViewModel
|
||||||
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
|
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
|
||||||
import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet
|
import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet
|
||||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.layout.onSizeChanged
|
import androidx.compose.ui.layout.onSizeChanged
|
||||||
import androidx.compose.ui.unit.IntSize
|
import androidx.compose.ui.unit.IntSize
|
||||||
import androidx.compose.ui.unit.dp
|
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.ui.theme.LexiconTheme
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,11 +76,11 @@ import androidx.compose.ui.unit.min
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.pixelized.rplexicon.LocalSnack
|
import com.pixelized.rplexicon.LocalSnack
|
||||||
import com.pixelized.rplexicon.R
|
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.composable.BackgroundImage
|
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
|
||||||
import com.pixelized.rplexicon.ui.composable.FullScreenImageHandler
|
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageHandler
|
||||||
import com.pixelized.rplexicon.ui.composable.FullScreenImageViewModel
|
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageViewModel
|
||||||
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.LocalScreenNavHost
|
||||||
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLocationDetail
|
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLocationDetail
|
||||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
|
|
|
||||||
|
|
@ -53,10 +53,10 @@ import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.pixelized.rplexicon.R
|
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.composable.BackgroundImage
|
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
|
||||||
import com.pixelized.rplexicon.ui.composable.FullScreenImageHandler
|
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageHandler
|
||||||
import com.pixelized.rplexicon.ui.composable.FullScreenImageViewModel
|
import com.pixelized.rplexicon.ui.composable.images.FullScreenImageViewModel
|
||||||
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
|
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
|
||||||
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexiconDetail
|
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexiconDetail
|
||||||
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLocationDetail
|
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLocationDetail
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ class RollOverlayViewModel @Inject constructor(
|
||||||
)
|
)
|
||||||
if (alteration != null) {
|
if (alteration != null) {
|
||||||
_alterationDetailDialog.value = AlterationDialogDetailUio(
|
_alterationDetailDialog.value = AlterationDialogDetailUio(
|
||||||
icon = alteration.icon ?: alteration.name.alterationIcon(),
|
icon = alteration.icon,
|
||||||
name = id,
|
name = id,
|
||||||
original = description?.original,
|
original = description?.original,
|
||||||
source = alteration.source,
|
source = alteration.source,
|
||||||
|
|
|
||||||
|
|
@ -24,13 +24,13 @@ class AlterationFactory @Inject constructor(
|
||||||
actives: Map<String, Boolean>,
|
actives: Map<String, Boolean>,
|
||||||
description: Map<String, Description>,
|
description: Map<String, Description>,
|
||||||
): List<AlterationItemUio> {
|
): List<AlterationItemUio> {
|
||||||
return alterations.map {
|
return alterations.map { alteration ->
|
||||||
AlterationItemUio(
|
AlterationItemUio(
|
||||||
icon = it.icon ?: it.name.alterationIcon(),
|
icon = alteration.icon,
|
||||||
label = it.name,
|
label = alteration.name,
|
||||||
source = it.source,
|
source = alteration.source,
|
||||||
subLabel = description[it.name]?.original,
|
subLabel = description[alteration.name]?.original,
|
||||||
checked = actives[it.name] ?: false,
|
checked = actives[alteration.name] ?: false,
|
||||||
override = false,
|
override = false,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -145,14 +145,14 @@ class AlterationFactory @Inject constructor(
|
||||||
return alterationRepository
|
return alterationRepository
|
||||||
.getAssignedAlterations(character = diceThrow.character, *properties.toTypedArray())
|
.getAssignedAlterations(character = diceThrow.character, *properties.toTypedArray())
|
||||||
.firstOrNull()
|
.firstOrNull()
|
||||||
?.map { alt ->
|
?.map { alteration ->
|
||||||
AlterationItemUio(
|
AlterationItemUio(
|
||||||
icon = alt.icon,
|
icon = alteration.icon,
|
||||||
label = alt.name,
|
label = alteration.name,
|
||||||
subLabel = description[alt.name]?.original,
|
subLabel = description[alteration.name]?.original,
|
||||||
source = alt.source,
|
source = alteration.source,
|
||||||
checked = override[alt.name] ?: checked[alt.name] ?: false,
|
checked = override[alteration.name] ?: checked[alteration.name] ?: false,
|
||||||
override = override[alt.name]?.let { it != checked[alt.name] } ?: false,
|
override = override[alteration.name]?.let { it != checked[alteration.name] } ?: false,
|
||||||
)
|
)
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.pixelized.rplexicon.R
|
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.composable.error.HandleFetchError
|
||||||
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
|
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
|
||||||
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ class StatisticViewModel @Inject constructor(
|
||||||
|
|
||||||
if (alteration != null) {
|
if (alteration != null) {
|
||||||
_alterationDetailDialog.value = AlterationDialogDetailUio(
|
_alterationDetailDialog.value = AlterationDialogDetailUio(
|
||||||
icon = alteration.icon ?: alteration.name.alterationIcon(),
|
icon = alteration.icon,
|
||||||
name = name,
|
name = name,
|
||||||
original = description?.original,
|
original = description?.original,
|
||||||
source = alteration.source,
|
source = alteration.source,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue