Refactor icon to Attacks

This commit is contained in:
Andres Gomez, Thomas (ITDV RL) 2024-05-30 10:57:15 +02:00
parent 73428d4341
commit 3b075a05e4
5 changed files with 27 additions and 17 deletions

View file

@ -1,6 +1,9 @@
package com.pixelized.rplexicon.data.model package com.pixelized.rplexicon.data.model
import android.net.Uri
data class Attack( data class Attack(
val icon: Uri?,
val title: String, val title: String,
val type: Type, val type: Type,
val range: String?, val range: String?,

View file

@ -29,6 +29,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),
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),
@ -62,6 +63,7 @@ class AttackParser @Inject constructor(
private val HIT = column("Touché") private val HIT = column("Touché")
private val DAMAGE = column("Dommage") private val DAMAGE = column("Dommage")
private val ALTERATION = column("Altérations") private val ALTERATION = column("Altérations")
private val COLUMNS get() = listOf(CHARACTER, NAME, TYPE, RANGE, HIT, DAMAGE, ALTERATION) private val ICON = column("Icone")
private val COLUMNS get() = listOf(CHARACTER, NAME, TYPE, RANGE, HIT, DAMAGE, ALTERATION, ICON)
} }
} }

View file

@ -2,6 +2,7 @@ package com.pixelized.rplexicon.ui.screens.character.composable.actions
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.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -10,8 +11,8 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.minimumInteractiveComponentSize import androidx.compose.material.minimumInteractiveComponentSize
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
@ -19,7 +20,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable import androidx.compose.runtime.Stable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
@ -27,15 +27,18 @@ 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 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.screens.character.composable.common.DiceButton import com.pixelized.rplexicon.ui.screens.character.composable.common.DiceButton
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.uri
@Stable @Stable
data class AttackUio( data class AttackUio(
val icon: Uri?,
val id: Attack? = null, val id: Attack? = null,
@DrawableRes val icon: Int,
val name: String, val name: String,
@StringRes val type: Int, @StringRes val type: Int,
val range: String?, val range: String?,
@ -62,13 +65,16 @@ fun Attack(
.padding(paddingValues = padding) .padding(paddingValues = padding)
.minimumInteractiveComponentSize() .minimumInteractiveComponentSize()
.then(other = modifier), .then(other = modifier),
horizontalArrangement = Arrangement.spacedBy(space = 16.dp), horizontalArrangement = Arrangement.spacedBy(space = 8.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( weapon.icon?.let { uri ->
painter = painterResource(id = weapon.icon), AsyncImage(
contentDescription = null, modifier = Modifier.size(size = 36.dp),
) model = uri,
contentDescription = null,
)
}
Column( Column(
modifier = Modifier.weight(weight = 1f), modifier = Modifier.weight(weight = 1f),
) { ) {
@ -140,7 +146,7 @@ private fun WeaponPreview(
private class WeaponPreviewProvider : PreviewParameterProvider<AttackUio> { private class WeaponPreviewProvider : PreviewParameterProvider<AttackUio> {
override val values: Sequence<AttackUio> = sequenceOf( override val values: Sequence<AttackUio> = sequenceOf(
AttackUio( AttackUio(
icon = R.drawable.ic_crossed_swords_24, icon = R.drawable.ic_crossed_swords_24.uri.toUri(),
name = "Dagger", name = "Dagger",
type = R.string.attack_type_melee, type = R.string.attack_type_melee,
range = "5 ft reach", range = "5 ft reach",
@ -148,7 +154,7 @@ private class WeaponPreviewProvider : PreviewParameterProvider<AttackUio> {
damage = AttackUio.Dice(icon = R.drawable.ic_d8_24, label = "1d8"), damage = AttackUio.Dice(icon = R.drawable.ic_d8_24, label = "1d8"),
), ),
AttackUio( AttackUio(
icon = R.drawable.ic_pocket_bow_24, icon = R.drawable.ic_pocket_bow_24.uri.toUri(),
name = "Long bow", name = "Long bow",
type = R.string.attack_type_range, type = R.string.attack_type_range,
range = "30 ft reach", range = "30 ft reach",

View file

@ -5,8 +5,10 @@ import androidx.compose.runtime.Stable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.core.net.toUri
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.screens.character.composable.actions.AttackUio import com.pixelized.rplexicon.ui.screens.character.composable.actions.AttackUio
import com.pixelized.rplexicon.utilitary.extentions.uri
@Stable @Stable
@Composable @Composable
@ -14,7 +16,7 @@ fun rememberAttackListStatePreview(): State<List<AttackUio>> = remember {
mutableStateOf( mutableStateOf(
listOf( listOf(
AttackUio( AttackUio(
icon = R.drawable.ic_crossed_swords_24, icon = R.drawable.ic_crossed_swords_24.uri.toUri(),
name = "Dagger", name = "Dagger",
type = R.string.attack_type_melee, type = R.string.attack_type_melee,
range = "5 ft reach", range = "5 ft reach",
@ -28,7 +30,7 @@ fun rememberAttackListStatePreview(): State<List<AttackUio>> = remember {
), ),
), ),
AttackUio( AttackUio(
icon = R.drawable.ic_pocket_bow_24, icon = R.drawable.ic_pocket_bow_24.uri.toUri(),
name = "Long bow", name = "Long bow",
type = R.string.attack_type_range, type = R.string.attack_type_range,
range = "30 ft reach", range = "30 ft reach",

View file

@ -67,10 +67,7 @@ class AttackUioFactory @Inject constructor() {
return AttackUio( return AttackUio(
id = attack, id = attack,
icon = when (attack.type) { icon = attack.icon,
Attack.Type.PHYSICAL_MELEE_ATTACK -> R.drawable.ic_crossed_swords_24
Attack.Type.PHYSICAL_RANGE_ATTACK -> R.drawable.ic_pocket_bow_24
},
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