Add icone to spells
This commit is contained in:
		
							parent
							
								
									1c3d1a1036
								
							
						
					
					
						commit
						78701b5d6a
					
				
					 5 changed files with 50 additions and 15 deletions
				
			
		| 
						 | 
					@ -1,6 +1,9 @@
 | 
				
			||||||
package com.pixelized.rplexicon.data.model
 | 
					package com.pixelized.rplexicon.data.model
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.net.Uri
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,14 @@
 | 
				
			||||||
package com.pixelized.rplexicon.data.parser.spell
 | 
					package com.pixelized.rplexicon.data.parser.spell
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.util.Log
 | 
					import android.util.Log
 | 
				
			||||||
 | 
					import androidx.core.net.toUri
 | 
				
			||||||
import com.google.api.services.sheets.v4.model.ValueRange
 | 
					import com.google.api.services.sheets.v4.model.ValueRange
 | 
				
			||||||
import com.pixelized.rplexicon.data.model.Spell
 | 
					import com.pixelized.rplexicon.data.model.Spell
 | 
				
			||||||
import com.pixelized.rplexicon.data.parser.column
 | 
					import com.pixelized.rplexicon.data.parser.column
 | 
				
			||||||
import com.pixelized.rplexicon.data.parser.parserScope
 | 
					import com.pixelized.rplexicon.data.parser.parserScope
 | 
				
			||||||
import com.pixelized.rplexicon.utilitary.exceptions.IncompatibleSheetStructure
 | 
					import com.pixelized.rplexicon.utilitary.exceptions.IncompatibleSheetStructure
 | 
				
			||||||
 | 
					import com.pixelized.rplexicon.utilitary.extentions.local.icon
 | 
				
			||||||
 | 
					import com.pixelized.rplexicon.utilitary.extentions.uri
 | 
				
			||||||
import javax.inject.Inject
 | 
					import javax.inject.Inject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SpellBookParser @Inject constructor() {
 | 
					class SpellBookParser @Inject constructor() {
 | 
				
			||||||
| 
						 | 
					@ -24,6 +27,7 @@ class SpellBookParser @Inject constructor() {
 | 
				
			||||||
                    val range = row.parse(column = RANGE)
 | 
					                    val range = row.parse(column = RANGE)
 | 
				
			||||||
                    val requirement = row.parse(column = REQUIREMENT)
 | 
					                    val requirement = row.parse(column = REQUIREMENT)
 | 
				
			||||||
                    val duration = row.parse(column = DURATION)
 | 
					                    val duration = row.parse(column = DURATION)
 | 
				
			||||||
 | 
					                    val icon = row.parseUri(column = ICON)
 | 
				
			||||||
                    if (name != null
 | 
					                    if (name != null
 | 
				
			||||||
                        && level != null
 | 
					                        && level != null
 | 
				
			||||||
                        && school != null
 | 
					                        && school != null
 | 
				
			||||||
| 
						 | 
					@ -33,6 +37,7 @@ 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,
 | 
				
			||||||
| 
						 | 
					@ -66,8 +71,19 @@ class SpellBookParser @Inject constructor() {
 | 
				
			||||||
        private val REQUIREMENT = column("Composantes")
 | 
					        private val REQUIREMENT = column("Composantes")
 | 
				
			||||||
        private val DURATION = column("Durée")
 | 
					        private val DURATION = column("Durée")
 | 
				
			||||||
        private val RITUAL = column("Rituel")
 | 
					        private val RITUAL = column("Rituel")
 | 
				
			||||||
 | 
					        private val ICON = column("Icone")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private val COLUMNS
 | 
					        private val COLUMNS
 | 
				
			||||||
            get() = listOf(NAME, LEVEL, SCHOOL, CASTING_TIME, RANGE, REQUIREMENT, DURATION, RITUAL)
 | 
					            get() = listOf(
 | 
				
			||||||
 | 
					                NAME,
 | 
				
			||||||
 | 
					                LEVEL,
 | 
				
			||||||
 | 
					                SCHOOL,
 | 
				
			||||||
 | 
					                CASTING_TIME,
 | 
				
			||||||
 | 
					                RANGE,
 | 
				
			||||||
 | 
					                REQUIREMENT,
 | 
				
			||||||
 | 
					                DURATION,
 | 
				
			||||||
 | 
					                RITUAL,
 | 
				
			||||||
 | 
					                ICON
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -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.compose.foundation.BorderStroke
 | 
					import androidx.compose.foundation.BorderStroke
 | 
				
			||||||
import androidx.compose.foundation.clickable
 | 
					import androidx.compose.foundation.clickable
 | 
				
			||||||
| 
						 | 
					@ -14,7 +15,6 @@ import androidx.compose.foundation.layout.Row
 | 
				
			||||||
import androidx.compose.foundation.layout.padding
 | 
					import androidx.compose.foundation.layout.padding
 | 
				
			||||||
import androidx.compose.foundation.layout.size
 | 
					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.OutlinedButton
 | 
					import androidx.compose.material3.OutlinedButton
 | 
				
			||||||
import androidx.compose.material3.Surface
 | 
					import androidx.compose.material3.Surface
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@ 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.graphics.ColorFilter
 | 
				
			||||||
import androidx.compose.ui.res.stringResource
 | 
					import androidx.compose.ui.res.stringResource
 | 
				
			||||||
import androidx.compose.ui.text.font.FontStyle
 | 
					import androidx.compose.ui.text.font.FontStyle
 | 
				
			||||||
import androidx.compose.ui.text.font.FontWeight
 | 
					import androidx.compose.ui.text.font.FontWeight
 | 
				
			||||||
| 
						 | 
					@ -32,15 +32,19 @@ 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.Spell
 | 
					import com.pixelized.rplexicon.data.model.Spell
 | 
				
			||||||
 | 
					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.local.icon
 | 
					import com.pixelized.rplexicon.utilitary.extentions.local.icon
 | 
				
			||||||
 | 
					import com.pixelized.rplexicon.utilitary.extentions.uri
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Stable
 | 
					@Stable
 | 
				
			||||||
data class SpellUio(
 | 
					data class SpellUio(
 | 
				
			||||||
    @DrawableRes val icon: Int,
 | 
					    val icon: Uri?,
 | 
				
			||||||
 | 
					    val school: Spell.School,
 | 
				
			||||||
    val name: String,
 | 
					    val name: String,
 | 
				
			||||||
    val translated: String?,
 | 
					    val translated: String?,
 | 
				
			||||||
    val castingTime: String,
 | 
					    val castingTime: String,
 | 
				
			||||||
| 
						 | 
					@ -74,12 +78,13 @@ fun Spell(
 | 
				
			||||||
            .minimumInteractiveComponentSize()
 | 
					            .minimumInteractiveComponentSize()
 | 
				
			||||||
            .padding(paddingValues = padding)
 | 
					            .padding(paddingValues = padding)
 | 
				
			||||||
            .then(other = modifier),
 | 
					            .then(other = modifier),
 | 
				
			||||||
        horizontalArrangement = Arrangement.spacedBy(space = 12.dp),
 | 
					        horizontalArrangement = Arrangement.spacedBy(space = 8.dp),
 | 
				
			||||||
        verticalAlignment = Alignment.CenterVertically,
 | 
					        verticalAlignment = Alignment.CenterVertically,
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
        Icon(
 | 
					        AsyncImage(
 | 
				
			||||||
            modifier = Modifier.size(size = 28.dp),
 | 
					            modifier = Modifier.size(size = 36.dp),
 | 
				
			||||||
            painter = painterResource(id = spell.icon),
 | 
					            model = spell.icon ?: spell.school.icon.uri.toUri(),
 | 
				
			||||||
 | 
					            colorFilter = if (spell.icon == null) ColorFilter.tint(MaterialTheme.colorScheme.onSurface) else null,
 | 
				
			||||||
            contentDescription = null,
 | 
					            contentDescription = null,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -223,7 +228,8 @@ private fun SpellPreview(
 | 
				
			||||||
private class SpellPreviewProvider : PreviewParameterProvider<SpellUio> {
 | 
					private class SpellPreviewProvider : PreviewParameterProvider<SpellUio> {
 | 
				
			||||||
    override val values: Sequence<SpellUio> = sequenceOf(
 | 
					    override val values: Sequence<SpellUio> = sequenceOf(
 | 
				
			||||||
        SpellUio(
 | 
					        SpellUio(
 | 
				
			||||||
            icon = Spell.School.EVOCATION.icon,
 | 
					            icon = null,
 | 
				
			||||||
 | 
					            school = Spell.School.EVOCATION,
 | 
				
			||||||
            name = "Trait de feu",
 | 
					            name = "Trait de feu",
 | 
				
			||||||
            translated = "Fire Bolt",
 | 
					            translated = "Fire Bolt",
 | 
				
			||||||
            castingTime = "1 action",
 | 
					            castingTime = "1 action",
 | 
				
			||||||
| 
						 | 
					@ -241,7 +247,8 @@ private class SpellPreviewProvider : PreviewParameterProvider<SpellUio> {
 | 
				
			||||||
            ritual = false,
 | 
					            ritual = false,
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        SpellUio(
 | 
					        SpellUio(
 | 
				
			||||||
            icon = Spell.School.ENCHANTMENT.icon,
 | 
					            icon = null,
 | 
				
			||||||
 | 
					            school = Spell.School.ENCHANTMENT,
 | 
				
			||||||
            name = "Moquerie cruelle",
 | 
					            name = "Moquerie cruelle",
 | 
				
			||||||
            translated = "Vicious Mockery",
 | 
					            translated = "Vicious Mockery",
 | 
				
			||||||
            castingTime = "1 action",
 | 
					            castingTime = "1 action",
 | 
				
			||||||
| 
						 | 
					@ -256,7 +263,8 @@ private class SpellPreviewProvider : PreviewParameterProvider<SpellUio> {
 | 
				
			||||||
            ritual = false,
 | 
					            ritual = false,
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        SpellUio(
 | 
					        SpellUio(
 | 
				
			||||||
            icon = Spell.School.EVOCATION.icon,
 | 
					            icon = null,
 | 
				
			||||||
 | 
					            school = Spell.School.EVOCATION,
 | 
				
			||||||
            name = "Soins",
 | 
					            name = "Soins",
 | 
				
			||||||
            translated = "Cure Wounds",
 | 
					            translated = "Cure Wounds",
 | 
				
			||||||
            castingTime = "1 action",
 | 
					            castingTime = "1 action",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,11 +5,13 @@ 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.data.model.Spell
 | 
					import com.pixelized.rplexicon.data.model.Spell
 | 
				
			||||||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellHeaderUio
 | 
					import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellHeaderUio
 | 
				
			||||||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellUio
 | 
					import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellUio
 | 
				
			||||||
import com.pixelized.rplexicon.utilitary.extentions.local.icon
 | 
					import com.pixelized.rplexicon.utilitary.extentions.local.icon
 | 
				
			||||||
 | 
					import com.pixelized.rplexicon.utilitary.extentions.uri
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Stable
 | 
					@Stable
 | 
				
			||||||
@Composable
 | 
					@Composable
 | 
				
			||||||
| 
						 | 
					@ -21,7 +23,8 @@ fun rememberSpellListStatePreview(): State<List<Pair<SpellHeaderUio, List<SpellU
 | 
				
			||||||
                count = null,
 | 
					                count = null,
 | 
				
			||||||
            ) to listOf(
 | 
					            ) to listOf(
 | 
				
			||||||
                SpellUio(
 | 
					                SpellUio(
 | 
				
			||||||
                    icon = Spell.School.EVOCATION.icon,
 | 
					                    icon = null,
 | 
				
			||||||
 | 
					                    school = Spell.School.EVOCATION,
 | 
				
			||||||
                    name = "Trait de feu",
 | 
					                    name = "Trait de feu",
 | 
				
			||||||
                    translated = "Fire Bolt",
 | 
					                    translated = "Fire Bolt",
 | 
				
			||||||
                    castingTime = "1 action",
 | 
					                    castingTime = "1 action",
 | 
				
			||||||
| 
						 | 
					@ -39,7 +42,8 @@ fun rememberSpellListStatePreview(): State<List<Pair<SpellHeaderUio, List<SpellU
 | 
				
			||||||
                    ritual = true,
 | 
					                    ritual = true,
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
                SpellUio(
 | 
					                SpellUio(
 | 
				
			||||||
                    icon = Spell.School.ENCHANTMENT.icon,
 | 
					                    icon = null,
 | 
				
			||||||
 | 
					                    school = Spell.School.ENCHANTMENT,
 | 
				
			||||||
                    name = "Moquerie cruelle",
 | 
					                    name = "Moquerie cruelle",
 | 
				
			||||||
                    translated = "Vicious Mockery",
 | 
					                    translated = "Vicious Mockery",
 | 
				
			||||||
                    castingTime = "1 action",
 | 
					                    castingTime = "1 action",
 | 
				
			||||||
| 
						 | 
					@ -59,7 +63,8 @@ fun rememberSpellListStatePreview(): State<List<Pair<SpellHeaderUio, List<SpellU
 | 
				
			||||||
                count = SpellHeaderUio.Count(value = 2, max = 3),
 | 
					                count = SpellHeaderUio.Count(value = 2, max = 3),
 | 
				
			||||||
            ) to listOf(
 | 
					            ) to listOf(
 | 
				
			||||||
                SpellUio(
 | 
					                SpellUio(
 | 
				
			||||||
                    icon = Spell.School.EVOCATION.icon,
 | 
					                    icon = null,
 | 
				
			||||||
 | 
					                    school = Spell.School.EVOCATION,
 | 
				
			||||||
                    name = "Soins",
 | 
					                    name = "Soins",
 | 
				
			||||||
                    translated = "Cure Wounds",
 | 
					                    translated = "Cure Wounds",
 | 
				
			||||||
                    castingTime = "1 action",
 | 
					                    castingTime = "1 action",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
package com.pixelized.rplexicon.ui.screens.character.factory
 | 
					package com.pixelized.rplexicon.ui.screens.character.factory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import androidx.core.net.toUri
 | 
				
			||||||
import com.pixelized.rplexicon.data.model.AssignedSpell
 | 
					import com.pixelized.rplexicon.data.model.AssignedSpell
 | 
				
			||||||
import com.pixelized.rplexicon.data.model.CharacterSheet
 | 
					import com.pixelized.rplexicon.data.model.CharacterSheet
 | 
				
			||||||
import com.pixelized.rplexicon.data.model.Property
 | 
					import com.pixelized.rplexicon.data.model.Property
 | 
				
			||||||
| 
						 | 
					@ -8,6 +9,7 @@ import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellUio
 | 
				
			||||||
import com.pixelized.rplexicon.utilitary.extentions.icon
 | 
					import com.pixelized.rplexicon.utilitary.extentions.icon
 | 
				
			||||||
import com.pixelized.rplexicon.utilitary.extentions.local.icon
 | 
					import com.pixelized.rplexicon.utilitary.extentions.local.icon
 | 
				
			||||||
import com.pixelized.rplexicon.utilitary.extentions.modifier
 | 
					import com.pixelized.rplexicon.utilitary.extentions.modifier
 | 
				
			||||||
 | 
					import com.pixelized.rplexicon.utilitary.extentions.uri
 | 
				
			||||||
import javax.inject.Inject
 | 
					import javax.inject.Inject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SpellUioFactory @Inject constructor(
 | 
					class SpellUioFactory @Inject constructor(
 | 
				
			||||||
| 
						 | 
					@ -49,7 +51,8 @@ class SpellUioFactory @Inject constructor(
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return SpellUio(
 | 
					        return SpellUio(
 | 
				
			||||||
            icon = assignedSpell.spell.school.icon,
 | 
					            icon = assignedSpell.spell.icon,
 | 
				
			||||||
 | 
					            school = assignedSpell.spell.school,
 | 
				
			||||||
            name = assignedSpell.spell.name,
 | 
					            name = assignedSpell.spell.name,
 | 
				
			||||||
            translated = descriptionRepository.find(name = assignedSpell.spell.name)?.original,
 | 
					            translated = descriptionRepository.find(name = assignedSpell.spell.name)?.original,
 | 
				
			||||||
            castingTime = assignedSpell.spell.castingTime,
 | 
					            castingTime = assignedSpell.spell.castingTime,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue