Refactor the AsyncImage to make it work in preview & clean some resources.

This commit is contained in:
Andres Gomez, Thomas (ITDV RL) 2024-07-04 11:24:05 +02:00
parent c23dba7669
commit 90bf11909f
43 changed files with 125 additions and 210 deletions

View file

@ -3,7 +3,8 @@ 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 import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.attackIcon
data class Attack( data class Attack(
val title: String, val title: String,
@ -14,7 +15,7 @@ data class Attack(
val script: Script?, val script: Script?,
private val iconUri: Uri?, private val iconUri: Uri?,
) { ) {
val icon: Uri? get() = this.iconUri ?: title.attackIcon() val icon: Any? get() = this.iconUri ?: attackIcon(name = title)
enum class Type(val key: String) { enum class Type(val key: String) {
PHYSICAL_MELEE_ATTACK("Mêlée"), PHYSICAL_MELEE_ATTACK("Mêlée"),

View file

@ -2,7 +2,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.utilitary.extentions.string.objectIcon import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.objectIcon
data class ObjectAction( data class ObjectAction(
val prefix: String?, val prefix: String?,
@ -10,5 +10,5 @@ data class ObjectAction(
val effect: Throw?, val effect: Throw?,
private val iconUri: Uri?, private val iconUri: Uri?,
) { ) {
val icon: Uri? get() = iconUri ?: "${prefix ?: ""}${name}".objectIcon() val icon: Any? get() = iconUri ?: objectIcon(name = "${prefix ?: ""}${name}")
} }

View file

@ -3,7 +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 import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.skillIcon
data class Skill( data class Skill(
val name: String, val name: String,
@ -15,5 +15,5 @@ data class Skill(
val script: Script?, val script: Script?,
private val iconUri: Uri?, private val iconUri: Uri?,
) { ) {
val icon: Uri? get() = iconUri ?: name.skillIcon() val icon: Any? get() = iconUri ?: skillIcon(name = name)
} }

View file

@ -1,7 +1,7 @@
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 import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.spellIcon
data class Spell( data class Spell(
val name: String, val name: String,
@ -14,7 +14,7 @@ data class Spell(
val ritual: Boolean, val ritual: Boolean,
private val iconUri: Uri?, private val iconUri: Uri?,
) { ) {
val icon: Uri? get() = iconUri ?: name.spellIcon() val icon: Any? get() = iconUri ?: spellIcon(name = name)
enum class School(val key: String) { enum class School(val key: String) {
ABJURATION("Abjuration"), ABJURATION("Abjuration"),

View file

@ -5,7 +5,7 @@ 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 import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.alterationIcon
data class Alteration( data class Alteration(
val name: String, val name: String,
@ -15,7 +15,7 @@ data class Alteration(
val status: Map<Property, Status>, val status: Map<Property, Status>,
private val iconUri: Uri?, private val iconUri: Uri?,
) { ) {
val icon: Uri? get() = iconUri ?: name.alterationIcon() val icon: Any? get() = iconUri ?: alterationIcon(name = name)
data class Status( data class Status(
val name: String, val name: String,

View file

@ -1,5 +1,6 @@
package com.pixelized.rplexicon.ui.composable.images package com.pixelized.rplexicon.ui.composable.images
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -8,31 +9,39 @@ import androidx.compose.ui.graphics.DefaultAlpha
import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.FilterQuality
import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import coil.compose.AsyncImagePainter import androidx.compose.ui.res.painterResource
@Composable @Composable
fun AsyncImage( fun AsyncImage(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
model: Any?, model: Any?,
contentDescription: String? = null, contentDescription: String? = null,
transform: (AsyncImagePainter.State) -> AsyncImagePainter.State = AsyncImagePainter.DefaultTransform,
onState: ((AsyncImagePainter.State) -> Unit)? = null,
alignment: Alignment = Alignment.Center, alignment: Alignment = Alignment.Center,
contentScale: ContentScale = ContentScale.Fit, contentScale: ContentScale = ContentScale.Fit,
alpha: Float = DefaultAlpha, alpha: Float = DefaultAlpha,
colorFilter: ColorFilter? = null, colorFilter: ColorFilter? = null,
filterQuality: FilterQuality = DrawScope.DefaultFilterQuality, filterQuality: FilterQuality = DrawScope.DefaultFilterQuality,
) { ) {
coil.compose.AsyncImage( when (model) {
modifier = modifier, is Int -> Image(
model = model, modifier = modifier,
contentDescription = contentDescription, painter = painterResource(id = model),
alignment = alignment, contentDescription = contentDescription,
contentScale = contentScale, alignment = alignment,
alpha = alpha, contentScale = contentScale,
colorFilter = colorFilter, alpha = alpha,
transform = transform, colorFilter = colorFilter,
onState = onState, )
filterQuality = filterQuality,
) else -> coil.compose.AsyncImage(
modifier = modifier,
model = model,
contentDescription = contentDescription,
alignment = alignment,
contentScale = contentScale,
alpha = alpha,
colorFilter = colorFilter,
filterQuality = filterQuality,
)
}
} }

View file

@ -2,7 +2,6 @@ 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
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
@ -13,6 +12,7 @@ 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
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -28,16 +28,15 @@ import androidx.lifecycle.ViewModel
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.modifier.zoomable import com.pixelized.rplexicon.utilitary.extentions.modifier.zoomable
import com.pixelized.rplexicon.utilitary.extentions.uri
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
class FullScreenImageViewModel @Inject constructor() : ViewModel() { class FullScreenImageViewModel @Inject constructor() : ViewModel() {
private val _url = mutableStateOf<Uri?>(null) private val _url = mutableStateOf<Any?>(null)
val url: State<Uri?> get() = _url val url: State<Any?> get() = _url
fun showDetail(url: Uri) { fun showDetail(url: Any) {
_url.value = url _url.value = url
} }
@ -58,7 +57,7 @@ fun FullScreenImageHandler(
@Composable @Composable
fun ImageDialog( fun ImageDialog(
url: State<Uri?>, url: State<Any?>,
onDismissRequest: () -> Unit, onDismissRequest: () -> Unit,
) { ) {
val uri by url val uri by url
@ -103,7 +102,7 @@ fun ImageDialog(
private fun ImageDialogPreview() { private fun ImageDialogPreview() {
LexiconTheme { LexiconTheme {
ImageDialog( ImageDialog(
url = remember { mutableStateOf(Uri.parse(R.drawable.im_brulkhai.uri)) }, url = remember { mutableIntStateOf(R.drawable.im_brulkhai) },
onDismissRequest = { }, onDismissRequest = { },
) )
} }

View file

@ -21,6 +21,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
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.R
import com.pixelized.rplexicon.ui.composable.images.BackgroundImage import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
import com.pixelized.rplexicon.ui.composable.images.rememberBackgroundGradient import com.pixelized.rplexicon.ui.composable.images.rememberBackgroundGradient
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
@ -30,7 +31,7 @@ import com.pixelized.rplexicon.utilitary.extentions.lexicon
@Stable @Stable
data class AdventureBookUio( data class AdventureBookUio(
val bookTitle: String, val bookTitle: String,
val bookIcon: Uri?, val bookIcon: Any?,
val documentId: String, val documentId: String,
val adventureTitle: String?, val adventureTitle: String?,
) )
@ -81,7 +82,7 @@ private fun AdventureItemPreview() {
Surface { Surface {
AdventureBook( AdventureBook(
item = AdventureBookUio( item = AdventureBookUio(
bookIcon = null, bookIcon = R.drawable.icbg_book_generic_c_unfaded,
bookTitle = "Les chroniques d'une orc", bookTitle = "Les chroniques d'une orc",
documentId = "", documentId = "",
adventureTitle = null, adventureTitle = null,

View file

@ -1,7 +1,6 @@
package com.pixelized.rplexicon.ui.screens.adventure.detail package com.pixelized.rplexicon.ui.screens.adventure.detail
import android.content.res.Configuration import android.content.res.Configuration
import android.net.Uri
import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -52,7 +51,6 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
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.images.BackgroundImage import com.pixelized.rplexicon.ui.composable.images.BackgroundImage
@ -64,7 +62,6 @@ import com.pixelized.rplexicon.ui.screens.adventure.detail.AdventureLineUio.Styl
import com.pixelized.rplexicon.ui.screens.adventure.detail.AdventureLineUio.Style.SUB_TITLE import com.pixelized.rplexicon.ui.screens.adventure.detail.AdventureLineUio.Style.SUB_TITLE
import com.pixelized.rplexicon.ui.screens.adventure.detail.AdventureLineUio.Style.TITLE import com.pixelized.rplexicon.ui.screens.adventure.detail.AdventureLineUio.Style.TITLE
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotateMajWithDropCap
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import kotlin.math.min import kotlin.math.min
@ -112,7 +109,7 @@ private fun AdventureDetailContent(
isLoading: State<Boolean>, isLoading: State<Boolean>,
title: State<String?>, title: State<String?>,
titleIndex: State<Int>, titleIndex: State<Int>,
background: State<Uri?>, background: State<Any?>,
adventures: State<List<AdventureLineUio>>, adventures: State<List<AdventureLineUio>>,
onBack: () -> Unit, onBack: () -> Unit,
onRefresh: () -> Unit, onRefresh: () -> Unit,
@ -286,9 +283,7 @@ private fun AdventureDetailPreview() {
mutableIntStateOf(0) mutableIntStateOf(0)
}, },
background = remember { background = remember {
mutableStateOf( mutableIntStateOf(R.drawable.im_brulkhai)
"https://img.freepik.com/premium-photo/painting-deer-forest-with-stream-water-generative-ai_955925-17321.jpg".toUri()
)
}, },
adventures = remember { adventures = remember {
mutableStateOf( mutableStateOf(

View file

@ -35,12 +35,13 @@ 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.R
import com.pixelized.rplexicon.ui.composable.images.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
data class AlterationItemUio( data class AlterationItemUio(
val icon: Uri?, val icon: Any?,
val label: String, val label: String,
val source: String, val source: String,
val subLabel: String?, val subLabel: String?,
@ -137,7 +138,7 @@ private fun RollAlterationPreview(
private class RollAlterationPreviewProvider : PreviewParameterProvider<AlterationItemUio> { private class RollAlterationPreviewProvider : PreviewParameterProvider<AlterationItemUio> {
override val values: Sequence<AlterationItemUio> = sequenceOf( override val values: Sequence<AlterationItemUio> = sequenceOf(
AlterationItemUio( AlterationItemUio(
icon = null, icon = R.drawable.icbg_bless,
label = "Bénédiction", label = "Bénédiction",
subLabel = "Bless", subLabel = "Bless",
source = "Clerc", source = "Clerc",
@ -145,7 +146,7 @@ private class RollAlterationPreviewProvider : PreviewParameterProvider<Alteratio
override = false, override = false,
), ),
AlterationItemUio( AlterationItemUio(
icon = null, icon = R.drawable.icbg_guidance,
label = "Assistance", label = "Assistance",
subLabel = "Guidance", subLabel = "Guidance",
source = "Clerc", source = "Clerc",

View file

@ -38,7 +38,7 @@ import com.pixelized.rplexicon.utilitary.extentions.uri
@Stable @Stable
data class AttackUio( data class AttackUio(
val icon: Uri?, val icon: Any?,
val id: Attack? = null, val id: Attack? = null,
val name: String, val name: String,
@StringRes val type: Int, @StringRes val type: Int,
@ -167,7 +167,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.uri.toUri(), icon = R.drawable.icbg_main_hand_attack,
name = "Sans arme", name = "Sans arme",
type = R.string.attack_type_melee, type = R.string.attack_type_melee,
range = "5 ft reach", range = "5 ft reach",
@ -175,7 +175,7 @@ private class WeaponPreviewProvider : PreviewParameterProvider<AttackUio> {
damage = AttackUio.Action.Flat(label = "1"), damage = AttackUio.Action.Flat(label = "1"),
), ),
AttackUio( AttackUio(
icon = R.drawable.ic_pocket_bow_24.uri.toUri(), icon = R.drawable.icbg_ranged_attack,
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

@ -45,7 +45,7 @@ import com.pixelized.rplexicon.utilitary.extentions.uri
@Stable @Stable
data class EquipmentItemUio( data class EquipmentItemUio(
val silhouette: String? = null, val silhouette: Any? = null,
val head: String? = null, val head: String? = null,
val face: String? = null, val face: String? = null,
val shoulder: String? = null, val shoulder: String? = null,
@ -286,7 +286,7 @@ private fun InventoryItemPreview() {
EquipmentItem( EquipmentItem(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
equipments = EquipmentItemUio( equipments = EquipmentItemUio(
silhouette = R.drawable.ic_woman_archer_256.uri, silhouette = R.drawable.ic_woman_archer_256,
shoulder = "Cloak of Protection", shoulder = "Cloak of Protection",
mainHand = "Battleaxe", mainHand = "Battleaxe",
offHand = "Shield", offHand = "Shield",

View file

@ -2,7 +2,6 @@ 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.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -36,7 +35,7 @@ import com.pixelized.rplexicon.ui.theme.LexiconTheme
@Stable @Stable
data class ObjectItemUio( data class ObjectItemUio(
val icon: Uri?, val icon: Any?,
val prefix: String?, val prefix: String?,
val name: String, val name: String,
val original: String?, val original: String?,
@ -114,7 +113,7 @@ private fun ObjectItemPreview() {
ObjectItem( ObjectItem(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
item = ObjectItemUio( item = ObjectItemUio(
icon = null, icon = R.drawable.icbg_scroll_of_bless_unfaded,
prefix = "Parchemin de ", prefix = "Parchemin de ",
name = "Bénédiction", name = "Bénédiction",
original = "Blessing", original = "Blessing",

View file

@ -38,7 +38,7 @@ import com.pixelized.rplexicon.ui.theme.LexiconTheme
@Stable @Stable
data class SkillItemUio( data class SkillItemUio(
val icon: Uri?, val icon: Any?,
val label: String, val label: String,
val translate: String?, val translate: String?,
val rest: String?, val rest: String?,
@ -193,7 +193,7 @@ fun rememberSkillsListStatePreview(): State<List<SkillItemUio>> = remember {
private class CounterItemPreviewProvider : PreviewParameterProvider<SkillItemUio> { private class CounterItemPreviewProvider : PreviewParameterProvider<SkillItemUio> {
override val values: Sequence<SkillItemUio> = sequenceOf( override val values: Sequence<SkillItemUio> = sequenceOf(
SkillItemUio( SkillItemUio(
icon = null, icon = R.drawable.icbg_relentless_endurance,
label = "Endurance Implacable", label = "Endurance Implacable",
translate = "Relentless Endurance", translate = "Relentless Endurance",
rest = "Récupération repos long", rest = "Récupération repos long",
@ -204,7 +204,7 @@ private class CounterItemPreviewProvider : PreviewParameterProvider<SkillItemUio
haveDetail = true, haveDetail = true,
), ),
SkillItemUio( SkillItemUio(
icon = null, icon = R.drawable.icbg_magic_initiate_bard,
label = "Apparence inspirante", label = "Apparence inspirante",
translate = "Mantle of Inspiration", translate = "Mantle of Inspiration",
rest = null, rest = null,
@ -215,7 +215,7 @@ private class CounterItemPreviewProvider : PreviewParameterProvider<SkillItemUio
haveDetail = true, haveDetail = true,
), ),
SkillItemUio( SkillItemUio(
icon = null, icon = R.drawable.icbg_turn_undead,
label = "Renvoi des morts-vivants", label = "Renvoi des morts-vivants",
translate = "Turn Undead", translate = "Turn Undead",
rest = "Récupération repos long", rest = "Récupération repos long",

View file

@ -2,7 +2,6 @@ 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
@ -44,7 +43,7 @@ import com.pixelized.rplexicon.utilitary.extentions.uri
@Stable @Stable
data class SpellUio( data class SpellUio(
val icon: Uri?, val icon: Any?,
val school: Spell.School, val school: Spell.School,
val name: String, val name: String,
val translated: String?, val translated: String?,
@ -269,7 +268,7 @@ 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 = null, icon = R.drawable.icbg_fireball,
school = Spell.School.EVOCATION, school = Spell.School.EVOCATION,
name = "Trait de feu", name = "Trait de feu",
translated = "Fire Bolt", translated = "Fire Bolt",
@ -289,7 +288,7 @@ private class SpellPreviewProvider : PreviewParameterProvider<SpellUio> {
ritual = false, ritual = false,
), ),
SpellUio( SpellUio(
icon = null, icon = R.drawable.icbg_vicious_mockery,
school = Spell.School.ENCHANTMENT, school = Spell.School.ENCHANTMENT,
name = "Moquerie cruelle", name = "Moquerie cruelle",
translated = "Vicious Mockery", translated = "Vicious Mockery",
@ -306,7 +305,7 @@ private class SpellPreviewProvider : PreviewParameterProvider<SpellUio> {
ritual = false, ritual = false,
), ),
SpellUio( SpellUio(
icon = null, icon = R.drawable.icbg_cure_wounds,
school = Spell.School.EVOCATION, school = Spell.School.EVOCATION,
name = "Soins", name = "Soins",
translated = "Cure Wounds", translated = "Cure Wounds",
@ -323,7 +322,7 @@ private class SpellPreviewProvider : PreviewParameterProvider<SpellUio> {
ritual = true, ritual = true,
), ),
SpellUio( SpellUio(
icon = null, icon = R.drawable.icbg_cure_wounds,
school = Spell.School.EVOCATION, school = Spell.School.EVOCATION,
name = "Soins", name = "Soins",
translated = "Cure Wounds", translated = "Cure Wounds",

View file

@ -40,7 +40,7 @@ import com.pixelized.rplexicon.utilitary.extentions.lexicon
data class SpellChooserUio( data class SpellChooserUio(
val name: String, val name: String,
val original: String?, val original: String?,
val icon: Uri?, val icon: Any?,
val spells: List<SpellLevelUio>, val spells: List<SpellLevelUio>,
) )

View file

@ -41,7 +41,7 @@ import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class AlterationDialogDetailUio( data class AlterationDialogDetailUio(
val icon: Uri?, val icon: Any?,
val name: String, val name: String,
val original: String?, val original: String?,
val source: String, val source: String,
@ -151,7 +151,7 @@ private fun AlterationDetailPreview() {
LexiconTheme { LexiconTheme {
AlterationDetailDialogContent( AlterationDetailDialogContent(
detail = AlterationDialogDetailUio( detail = AlterationDialogDetailUio(
icon = null, icon = R.drawable.icbg_rage_bear_heart,
name = "Rage", name = "Rage",
original = "Rage", original = "Rage",
source = "Barbare", source = "Barbare",

View file

@ -1,7 +1,6 @@
package com.pixelized.rplexicon.ui.screens.character.composable.dialogs package com.pixelized.rplexicon.ui.screens.character.composable.dialogs
import android.content.res.Configuration import android.content.res.Configuration
import android.net.Uri
import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
@ -30,16 +29,16 @@ 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.R
import com.pixelized.rplexicon.ui.composable.images.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
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.string.skillIcon
@Stable @Stable
data class SkillDialogDetailUio( data class SkillDialogDetailUio(
val icon: Uri?, val icon: Any?,
val name: String, val name: String,
val original: String?, val original: String?,
val description: String, val description: String,
@ -137,7 +136,7 @@ private fun AlterationDetailPreview() {
LexiconTheme { LexiconTheme {
SkillDetailDialogContent( SkillDetailDialogContent(
detail = SkillDialogDetailUio( detail = SkillDialogDetailUio(
icon = "Endurance implacable".skillIcon(), icon = R.drawable.icbg_relentless_endurance,
name = "Endurance implacable", name = "Endurance implacable",
original = "Relentless Endurance", original = "Relentless Endurance",
description = "Lorsque vous tombez à 0 point de vie, mais que vous n'êtes pas tué sur le coup, vous pouvez passer à 1 point de vie à la place. Vous devez terminer un repos long avant de pouvoir utiliser cette capacité de nouveau." description = "Lorsque vous tombez à 0 point de vie, mais que vous n'êtes pas tué sur le coup, vous pouvez passer à 1 point de vie à la place. Vous devez terminer un repos long avant de pouvoir utiliser cette capacité de nouveau."

View file

@ -44,7 +44,7 @@ import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class SpellDialogDetailUio( data class SpellDialogDetailUio(
val icon: Uri?, val icon: Any?,
val name: String, val name: String,
val translated: String, val translated: String,
val level: String, val level: String,
@ -254,7 +254,7 @@ private fun SpellDetailDialogPreview() {
LexiconTheme { LexiconTheme {
SpellDetailDialogContent( SpellDetailDialogContent(
detail = SpellDialogDetailUio( detail = SpellDialogDetailUio(
icon = null, icon = R.drawable.icbg_hellish_rebuke,
name = "Représailles infernales", name = "Représailles infernales",
translated = "Hellish Rebuke", translated = "Hellish Rebuke",
level = "1", level = "1",

View file

@ -16,7 +16,7 @@ fun rememberAttackListStatePreview(): State<List<AttackUio>> = remember {
mutableStateOf( mutableStateOf(
listOf( listOf(
AttackUio( AttackUio(
icon = R.drawable.ic_crossed_swords_24.uri.toUri(), icon = R.drawable.icbg_main_hand_attack,
name = "Unarmed attack", name = "Unarmed attack",
type = R.string.attack_type_melee, type = R.string.attack_type_melee,
range = "5 ft reach", range = "5 ft reach",
@ -29,7 +29,7 @@ fun rememberAttackListStatePreview(): State<List<AttackUio>> = remember {
), ),
), ),
AttackUio( AttackUio(
icon = R.drawable.ic_pocket_bow_24.uri.toUri(), icon = R.drawable.icbg_ranged_attack,
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

@ -15,7 +15,7 @@ fun rememberSpellLevelChooserState() = remember {
SpellChooserUio( SpellChooserUio(
name = "Soin", name = "Soin",
original = "Cure wounds", original = "Cure wounds",
icon = null, icon = R.drawable.icbg_cure_wounds,
spells = listOf( spells = listOf(
SpellLevelUio( SpellLevelUio(
spell = "", spell = "",

View file

@ -12,7 +12,6 @@ import com.pixelized.rplexicon.utilitary.extentions.local.primary
import com.pixelized.rplexicon.utilitary.extentions.local.secondary import com.pixelized.rplexicon.utilitary.extentions.local.secondary
import com.pixelized.rplexicon.utilitary.extentions.local.tertiary import com.pixelized.rplexicon.utilitary.extentions.local.tertiary
import com.pixelized.rplexicon.utilitary.extentions.modifier import com.pixelized.rplexicon.utilitary.extentions.modifier
import com.pixelized.rplexicon.utilitary.extentions.string.skillIcon
import com.pixelized.rplexicon.utilitary.extentions.toLabel import com.pixelized.rplexicon.utilitary.extentions.toLabel
import javax.inject.Inject import javax.inject.Inject

View file

@ -8,7 +8,6 @@ import com.pixelized.rplexicon.data.repository.character.DescriptionRepository
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.icon import com.pixelized.rplexicon.utilitary.extentions.icon
import com.pixelized.rplexicon.utilitary.extentions.modifier import com.pixelized.rplexicon.utilitary.extentions.modifier
import com.pixelized.rplexicon.utilitary.extentions.string.spellIcon
import com.pixelized.rplexicon.utilitary.extentions.toLabel import com.pixelized.rplexicon.utilitary.extentions.toLabel
import javax.inject.Inject import javax.inject.Inject
@ -91,7 +90,11 @@ class SpellUioFactory @Inject constructor(
SpellUio.Action.Dice( SpellUio.Action.Dice(
icon = diceThrow.dice?.icon ?: R.drawable.ic_d4_24, icon = diceThrow.dice?.icon ?: R.drawable.ic_d4_24,
label = "${diceThrow.dice?.toLabel()}${modifier.toLabel(true)}" + label = "${diceThrow.dice?.toLabel()}${modifier.toLabel(true)}" +
"+ ${level.dice?.count?.times(delta)}d${level.dice?.faces}${deltaModifier.toLabel(true)}", "+ ${level.dice?.count?.times(delta)}d${level.dice?.faces}${
deltaModifier.toLabel(
true
)
}",
) )
} }
} }

View file

@ -13,10 +13,10 @@ import com.pixelized.rplexicon.data.repository.character.InventoryRepository
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.EquipmentItemUio import com.pixelized.rplexicon.ui.screens.character.composable.actions.EquipmentItemUio
import com.pixelized.rplexicon.ui.screens.character.composable.actions.InventoryItemUio import com.pixelized.rplexicon.ui.screens.character.composable.actions.InventoryItemUio
import com.pixelized.rplexicon.ui.screens.character.factory.ItemUioFactory
import com.pixelized.rplexicon.ui.screens.character.composable.dialogs.SkillDialogDetailUio import com.pixelized.rplexicon.ui.screens.character.composable.dialogs.SkillDialogDetailUio
import com.pixelized.rplexicon.ui.screens.character.factory.ItemUioFactory
import com.pixelized.rplexicon.utilitary.extentions.context import com.pixelized.rplexicon.utilitary.extentions.context
import com.pixelized.rplexicon.utilitary.extentions.string.equipmentsIcon import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.equipmentsIcon
import com.pixelized.rplexicon.utilitary.extentions.uri import com.pixelized.rplexicon.utilitary.extentions.uri
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -92,7 +92,7 @@ class InventoryViewModel @Inject constructor(
val description = descriptionRepository.getDescription(name = item) val description = descriptionRepository.getDescription(name = item)
if (description != null) { if (description != null) {
_dialog.value = SkillDialogDetailUio( _dialog.value = SkillDialogDetailUio(
icon = item.equipmentsIcon(), icon = equipmentsIcon(name = item),
name = item, name = item,
original = description.original, original = description.original,
description = description.description description = description.description

View file

@ -2,7 +2,6 @@ package com.pixelized.rplexicon.ui.screens.lexicon.detail
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.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
@ -74,7 +73,7 @@ data class LexiconDetailUio(
val race: String?, val race: String?,
val status: String?, val status: String?,
val location: String?, val location: String?,
val portrait: List<Uri>, val portrait: List<Any>,
val description: String?, val description: String?,
val history: String?, val history: String?,
val tags: String?, val tags: String?,
@ -116,7 +115,7 @@ private fun LexiconDetailContent(
haveCharacterSheet: State<Boolean>, haveCharacterSheet: State<Boolean>,
onBack: () -> Unit, onBack: () -> Unit,
onCharacterSheet: (String) -> Unit, onCharacterSheet: (String) -> Unit,
onIllustration: (Uri) -> Unit, onIllustration: (Any) -> Unit,
) { ) {
val typography = MaterialTheme.lexicon.typography val typography = MaterialTheme.lexicon.typography
val highlightRegex = remember(highlight) { highlightRegex(terms = highlight.searchCriterion()) } val highlightRegex = remember(highlight) { highlightRegex(terms = highlight.searchCriterion()) }
@ -389,9 +388,7 @@ private fun LexiconDetailPreview() {
race = "Half-orc", race = "Half-orc",
status = "Vivante", status = "Vivante",
location = "Manoir Durst", location = "Manoir Durst",
portrait = listOf( portrait = listOf(R.drawable.im_brulkhai),
Uri.parse("https://cdnb.artstation.com/p/assets/images/images/003/024/889/large/bayard-wu-0716.jpg?1468642855"),
),
description = "Brulkhai, ou plus simplement Bru, est solidement bâti. Elle mesure 192 cm pour 110 kg de muscles lorsquelle est en bonne santé. Elle a les cheveux châtains, les yeux noisettes et la peau couleur gris-vert typique de son espèce. Dun tempérament taciturne, elle parle peu et de façon concise. Elle est parfois brutale, aussi bien physiquement que verbalement, Elle ne prend cependant aucun plaisir à malmener ceux quelle considère plus faibles quelle. Dune nature simple et honnête, elle ne mâche pas ses mots et ne dissimule généralement pas ses pensées. Son intelligence modeste est plus le reflet dun manque déducation et dune capacité limitée à gérer ses émotions quà une débilité congénitale. Elle voue à la force un culte car cest par son expression quelle se sent vraiment vivante et éprouve de grandes difficultés vis à vis de ceux quelle nomme foshnu (bébé, chouineur en commun).", description = "Brulkhai, ou plus simplement Bru, est solidement bâti. Elle mesure 192 cm pour 110 kg de muscles lorsquelle est en bonne santé. Elle a les cheveux châtains, les yeux noisettes et la peau couleur gris-vert typique de son espèce. Dun tempérament taciturne, elle parle peu et de façon concise. Elle est parfois brutale, aussi bien physiquement que verbalement, Elle ne prend cependant aucun plaisir à malmener ceux quelle considère plus faibles quelle. Dune nature simple et honnête, elle ne mâche pas ses mots et ne dissimule généralement pas ses pensées. Son intelligence modeste est plus le reflet dun manque déducation et dune capacité limitée à gérer ses émotions quà une débilité congénitale. Elle voue à la force un culte car cest par son expression quelle se sent vraiment vivante et éprouve de grandes difficultés vis à vis de ceux quelle nomme foshnu (bébé, chouineur en commun).",
history = null, history = null,
tags = "protagoniste, brute", tags = "protagoniste, brute",

View file

@ -100,9 +100,9 @@ import kotlinx.coroutines.launch
@Stable @Stable
data class LocationDetailUio( data class LocationDetailUio(
val name: String, val name: String,
val map: Uri?, val map: Any?,
val description: String?, val description: String?,
val illustrations: List<Uri>, val illustrations: List<Any>,
val marquees: List<MarqueeUio>, val marquees: List<MarqueeUio>,
) )
@ -226,7 +226,7 @@ private fun LocationContent(
selectedIndex: State<Int?>, selectedIndex: State<Int?>,
mapHighlight: State<Offset>, mapHighlight: State<Offset>,
onBack: () -> Unit, onBack: () -> Unit,
onIllustration: (Uri) -> Unit, onIllustration: (Any) -> Unit,
onMarquee: (MarqueeUio) -> Unit, onMarquee: (MarqueeUio) -> Unit,
onDestination: (MarqueeUio) -> Unit, onDestination: (MarqueeUio) -> Unit,
onMapTap: (Offset) -> Unit, onMapTap: (Offset) -> Unit,
@ -581,7 +581,7 @@ private fun LocationPreview() {
mutableStateOf( mutableStateOf(
LocationDetailUio( LocationDetailUio(
name = "Barovie", name = "Barovie",
map = Uri.parse("https://cdn.discordapp.com/attachments/1123326578508714106/1161014438736969759/Map_of_Barovia_-_4k_-_Names_-_No_Special_Locations_-_Without_Hex.jpg?ex=6536c1f4&is=65244cf4&hm=671ddc88d073e5559bd37af14dc731e497b78457dc37a3ea5620a5342004b733&"), map = R.drawable.ic_empty,
description = "Contrée sombre et maudite soumise au joug de Stradh von Zarovith", description = "Contrée sombre et maudite soumise au joug de Stradh von Zarovith",
illustrations = emptyList(), illustrations = emptyList(),
marquees = listOf( marquees = listOf(

View file

@ -75,7 +75,7 @@ import com.pixelized.rplexicon.utilitary.styleWith
@Stable @Stable
data class QuestDetailUio( data class QuestDetailUio(
val id: String, val id: String,
val background: Uri?, val background: Any?,
val completed: Boolean, val completed: Boolean,
val title: String, val title: String,
val steps: List<QuestStep>, val steps: List<QuestStep>,
@ -399,7 +399,7 @@ private class QuestDetailPreviewProvider : PreviewParameterProvider<State<QuestD
QuestDetailUio( QuestDetailUio(
id = "La chasse aux loups", id = "La chasse aux loups",
completed = true, completed = true,
background = Uri.parse("https://as1.ftcdn.net/v2/jpg/05/50/22/58/1000_F_550225869_jAkLTRVb7ym7EHJYvDApVXQnpANvRd8O.jpg"), background = R.drawable.icbg_book_parchment_e,
title = "La chasse aux loups", title = "La chasse aux loups",
steps = listOf( steps = listOf(
QuestDetailUio.QuestStep( QuestDetailUio.QuestStep(

View file

@ -9,7 +9,6 @@ import com.pixelized.rplexicon.data.repository.character.AlterationRepository
import com.pixelized.rplexicon.data.repository.character.SkillRepository import com.pixelized.rplexicon.data.repository.character.SkillRepository
import com.pixelized.rplexicon.data.repository.character.SpellRepository import com.pixelized.rplexicon.data.repository.character.SpellRepository
import com.pixelized.rplexicon.ui.screens.character.composable.actions.AlterationItemUio import com.pixelized.rplexicon.ui.screens.character.composable.actions.AlterationItemUio
import com.pixelized.rplexicon.utilitary.extentions.string.alterationIcon
import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.firstOrNull
import javax.inject.Inject import javax.inject.Inject
@ -152,7 +151,9 @@ class AlterationFactory @Inject constructor(
subLabel = description[alteration.name]?.original, subLabel = description[alteration.name]?.original,
source = alteration.source, source = alteration.source,
checked = override[alteration.name] ?: checked[alteration.name] ?: false, checked = override[alteration.name] ?: checked[alteration.name] ?: false,
override = override[alteration.name]?.let { it != (checked[alteration.name] ?: false) } ?: false, override = override[alteration.name]?.let {
it != (checked[alteration.name] ?: false)
} ?: false,
) )
} ?: emptyList() } ?: emptyList()
} }

View file

@ -1,35 +1,10 @@
package com.pixelized.rplexicon.utilitary.extentions.string package com.pixelized.rplexicon.utilitary.extentions.string
import android.net.Uri import androidx.annotation.DrawableRes
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.utilitary.extentions.uri
fun String.attackIcon(): Uri? { object BaldurGageImageCache {
return ResourcesCache.attacks[this]?.uri?.toUriOrNull() private val alterations = hashMapOf(
}
fun String.objectIcon(): Uri? {
return ResourcesCache.objects[this]?.uri?.toUriOrNull()
}
fun String.equipmentsIcon(): Uri? {
return ResourcesCache.equipments[this]?.uri?.toUriOrNull()
}
fun String.alterationIcon(): Uri? {
return ResourcesCache.alterations[this]?.uri?.toUriOrNull()
}
fun String.skillIcon(): Uri? {
return ResourcesCache.skills[this]?.uri?.toUriOrNull()
}
fun String.spellIcon(): Uri? {
return ResourcesCache.spells[this]?.uri?.toUriOrNull()
}
private object ResourcesCache {
val alterations = hashMapOf(
"Arme enflammée" to R.drawable.icbg_flaming_blade, "Arme enflammée" to R.drawable.icbg_flaming_blade,
"Critique" to R.drawable.icbg_frenzied_strike, "Critique" to R.drawable.icbg_frenzied_strike,
"Esquiver" to R.drawable.icbg_uncanny_dodge, "Esquiver" to R.drawable.icbg_uncanny_dodge,
@ -87,7 +62,7 @@ private object ResourcesCache {
"Arbalète de poing" to R.drawable.icbg_hand_crossbow_unfaded, "Arbalète de poing" to R.drawable.icbg_hand_crossbow_unfaded,
) )
val attacks = hashMapOf( private val attacks = hashMapOf(
"Hache de guerre en argent" to R.drawable.icbg_reckless_attack, "Hache de guerre en argent" to R.drawable.icbg_reckless_attack,
"Hache de guerre en argent (2 mains)" to R.drawable.icbg_reckless_attack, "Hache de guerre en argent (2 mains)" to R.drawable.icbg_reckless_attack,
"Dague" to R.drawable.icbg_main_hand_attack, "Dague" to R.drawable.icbg_main_hand_attack,
@ -120,7 +95,7 @@ private object ResourcesCache {
"Épée courte" to R.drawable.icbg_main_hand_attack, "Épée courte" to R.drawable.icbg_main_hand_attack,
) )
val objects = hashMapOf( private val objects = hashMapOf(
"Parchemin de Bénédiction" to R.drawable.icbg_scroll_of_bless_unfaded, "Parchemin de Bénédiction" to R.drawable.icbg_scroll_of_bless_unfaded,
"Parchemin d'Arme spirituelle" to R.drawable.icbg_book_signedtradebisa_unfaded, "Parchemin d'Arme spirituelle" to R.drawable.icbg_book_signedtradebisa_unfaded,
"Potion de guérison" to R.drawable.icbg_pot_potion_of_healing_unfaded, "Potion de guérison" to R.drawable.icbg_pot_potion_of_healing_unfaded,
@ -133,7 +108,7 @@ private object ResourcesCache {
"Poussière de disparition" to R.drawable.icbg_haste_spore_grenade_unfaded, "Poussière de disparition" to R.drawable.icbg_haste_spore_grenade_unfaded,
) )
val equipments = hashMapOf( private val equipments = hashMapOf(
"Dague" to R.drawable.icbg_dagger_unfaded, "Dague" to R.drawable.icbg_dagger_unfaded,
"Hache de guerre en argent" to R.drawable.icbg_battleaxe_plus_one_unfaded, "Hache de guerre en argent" to R.drawable.icbg_battleaxe_plus_one_unfaded,
"Bouclier" to R.drawable.icbg_studded_shield_unfaded, "Bouclier" to R.drawable.icbg_studded_shield_unfaded,
@ -142,7 +117,7 @@ private object ResourcesCache {
"Armure de cuir" to R.drawable.icbg_leather_armour_rogue_unfaded, "Armure de cuir" to R.drawable.icbg_leather_armour_rogue_unfaded,
) )
val skills = hashMapOf( private val skills = hashMapOf(
"Dé de vie (Barbare)" to R.drawable.icbg_bolstering_magic_boon, "Dé de vie (Barbare)" to R.drawable.icbg_bolstering_magic_boon,
"Dé de vie (Guerrier)" to R.drawable.icbg_bolstering_magic_boon, "Dé de vie (Guerrier)" to R.drawable.icbg_bolstering_magic_boon,
"Dé de vie (Rodeur)" to R.drawable.icbg_bolstering_magic_boon, "Dé de vie (Rodeur)" to R.drawable.icbg_bolstering_magic_boon,
@ -208,7 +183,7 @@ private object ResourcesCache {
"Style de combat : Défense" to R.drawable.icbg_heavily_armoured, "Style de combat : Défense" to R.drawable.icbg_heavily_armoured,
) )
val spells = hashMapOf( private val spells = hashMapOf(
"Aide" to R.drawable.icbg_aid, "Aide" to R.drawable.icbg_aid,
"Alarme" to R.drawable.icbg_command_halt, "Alarme" to R.drawable.icbg_command_halt,
"Appel de familier" to R.drawable.icbg_find_familiar_cat, "Appel de familier" to R.drawable.icbg_find_familiar_cat,
@ -275,4 +250,22 @@ private object ResourcesCache {
"Dissipation de la magie" to R.drawable.icbg_unshackling_strike, "Dissipation de la magie" to R.drawable.icbg_unshackling_strike,
"Protection contre le mal et le bien" to R.drawable.icbg_protection_from_evil_and_good, "Protection contre le mal et le bien" to R.drawable.icbg_protection_from_evil_and_good,
) )
@DrawableRes
fun attackIcon(name: String): Int? = attacks[name]
@DrawableRes
fun objectIcon(name: String): Int? = objects[name]
@DrawableRes
fun equipmentsIcon(name: String): Int? = equipments[name]
@DrawableRes
fun alterationIcon(name: String): Int? = alterations[name]
@DrawableRes
fun skillIcon(name: String): Int? = skills[name]
@DrawableRes
fun spellIcon(name: String): Int? = spells[name]
} }

View file

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7.41,8.59L12,13.17l4.59,-4.58L18,10l-6,6 -6,-6 1.41,-1.41z"/>
</vector>

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M244.19,21.97C347.89,119.18 428.1,216.27 494.72,304.06L494.72,191.66c-7.06,-6.39 -14.15,-12.68 -21.34,-18.84 2.99,-3.46 4.81,-7.97 4.81,-12.91 0,-10.93 -8.85,-19.78 -19.78,-19.78 -6.28,0 -11.88,2.96 -15.5,7.53 -43.25,-34.45 -88.29,-64.96 -134,-91.31 1.01,-2.03 1.59,-4.27 1.59,-6.69 0,-8.35 -6.77,-15.13 -15.13,-15.13 -5.42,0 -10.14,2.85 -12.81,7.13 -12.76,-6.88 -25.57,-13.45 -38.38,-19.69zM104.63,40.09c5.11,5.18 10.18,10.36 15.22,15.59 -4.22,1.17 -7.38,4.29 -8.35,9 -1.81,8.84 4.73,19.92 14.63,24.72 3.64,1.77 7.24,2.42 10.41,2.12 -2.54,4.11 -4,8.97 -4,14.16 0,14.89 12.05,26.94 26.94,26.94 8.68,0 16.41,-4.1 21.34,-10.47 88.69,101.2 165.6,208.4 235.16,306.72 -7.4,6.05 -12.13,15.23 -12.13,25.53 0,18.21 14.76,32.97 32.97,32.97 6.27,0 12.13,-1.77 17.12,-4.81 3.09,4.35 6.19,8.76 9.25,13.06h31.53L494.72,381.28c-41.36,-69.22 -154.77,-193.34 -184.53,-213.31 24.14,33.4 45.1,64.34 64.81,94.03 -87.49,-95.75 -183.44,-179.59 -270.38,-221.91zM76.4,55.34c-1.87,0.09 -3.74,0.55 -5.53,1.41 -7.18,3.43 -10.21,12.04 -6.78,19.22 3.43,7.18 12.04,10.21 19.22,6.78 7.18,-3.43 10.21,-12.04 6.78,-19.22 -2.57,-5.38 -8.08,-8.44 -13.69,-8.19zM432.15,75.72c-1.45,0.05 -2.86,0.36 -4.16,0.97 -6.92,3.26 -8.27,13.63 -3,23.16 5.26,9.53 15.14,14.63 22.06,11.38 6.92,-3.26 8.26,-13.63 3,-23.16 -4.28,-7.74 -11.6,-12.56 -17.91,-12.34zM281.03,110.97c-1.98,0.12 -3.85,0.72 -5.44,1.78 -6.37,4.24 -6.17,14.69 0.44,23.34 6.61,8.65 17.1,12.24 23.47,8 6.37,-4.24 6.17,-14.69 -0.44,-23.34 -4.95,-6.49 -12.08,-10.15 -18.03,-9.78zM25.19,149.28c91.02,100.04 158.7,190.4 212,271.6 -8.48,-1.36 -18.44,4.95 -20.25,13.59 -6.22,29.78 12.9,53.91 47.59,61.15L390.19,495.62c-97.97,-139.74 -234.78,-282.95 -365,-346.34zM55.22,251.13c-3.81,0.08 -7.2,1.33 -9.41,3.84 -5.05,5.74 -2.15,15.78 6.47,22.44 8.62,6.65 19.7,7.4 24.75,1.66 5.05,-5.74 2.18,-15.79 -6.44,-22.44 -4.85,-3.74 -10.48,-5.6 -15.38,-5.5zM102.41,289.25c-14.89,0 -26.94,12.05 -26.94,26.94 0,14.89 12.05,26.97 26.94,26.97 14.89,0 26.97,-12.08 26.97,-26.97 0,-14.89 -12.08,-26.94 -26.97,-26.94zM182.13,392.72c-10.93,0 -19.78,8.85 -19.78,19.78 0,10.93 8.85,19.78 19.78,19.78 10.93,0 19.78,-8.85 19.78,-19.78 0,-10.93 -8.85,-19.78 -19.78,-19.78z"/>
</vector>

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M19.75,14.44c59.54,112.29 142.51,202.35 232.28,292.72l3.63,3.75 0.06,-0.06c21.83,21.93 44.04,43.92 66.4,66.25 -18.86,14.81 -38.97,28.2 -59.94,40.31l28.53,28.53 68.72,-68.72c42.34,27.64 76.29,63.65 104.09,105.81l28.06,-28.06c-42.47,-27.49 -79.74,-60.21 -106.03,-103.88l68.94,-68.94 -28.53,-28.53c-11.11,21.85 -24.41,42.01 -39.47,60.59 -43.85,-43.8 -86.46,-85.84 -130.13,-125.47 -0.22,-0.2 -0.43,-0.42 -0.66,-0.63C183.62,122.75 108.51,63.91 19.75,14.44zM491.63,14.44c-83.04,46.28 -154.12,100.78 -221.97,161.16l22.81,21.56 56.81,-56.81 13.22,13.19 -56.44,56.44 24.59,23.19c61.8,-66.92 117.6,-136.92 160.97,-218.72zM162.1,140.34l200.56,200.53c-4.36,4.44 -8.84,8.79 -13.4,13.03L148.88,153.53l13.22,-13.19zM85.4,253.62l-28.5,28.53 68.91,68.91c-26.29,43.67 -63.53,76.41 -106,103.91l28.06,28.06c27.81,-42.16 61.76,-78.17 104.09,-105.81l68.72,68.72 28.53,-28.53c-20.96,-12.11 -41.08,-25.5 -59.94,-40.31 17.86,-17.83 35.61,-35.43 53.16,-52.97l-24.84,-25.66 -55.47,55.47c-4.57,-4.24 -9.01,-8.62 -13.37,-13.06l55.84,-55.84 -24.53,-25.37c-18.28,17.86 -36.6,36.06 -55.16,54.59 -15.07,-18.59 -28.38,-38.76 -39.5,-60.63z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#000000"
android:pathData="M92.41,13.02l-0.16,156.35c3.06,0.51 6.21,1.38 9.39,2.63 36.5,14.31 74.21,22.43 111.86,25.47l43.4,-60.42 42.32,58.91c36.81,-4.13 72.57,-12.5 105.97,-24.09 3.75,-1.3 7.37,-2.18 10.82,-2.6l1.52,-156.25 -75.82,95.55 -34.08,-95.55 -53.72,103.74 -53.72,-103.74 -35.44,95.55 -72.32,-95.55h-0.01zM256.9,169.09l-28.64,39.86 28.63,39.86 28.64,-39.86 -28.64,-39.86zM86.76,187.55c-2.17,-0.08 -3.84,0.27 -5.01,0.76 -2.35,0.98 -3.17,2.19 -3.5,4.2 -0.64,4.01 2.83,14.35 23.03,21.36 41.7,14.47 84.26,23.75 126.78,26.83l-17.75,-24.7c-38.77,-3.29 -77.69,-11.77 -115.5,-26.6 -3.2,-1.25 -5.88,-1.77 -8.05,-1.85zM420.04,187.74c-2.16,0.05 -5.05,0.51 -8.73,1.79 -33.58,11.65 -69.49,20.22 -106.52,24.65l-19.26,26.82c40.43,-2.6 80.43,-11.29 119.22,-26.96 15.91,-6.43 21.46,-17.81 21.36,-22.36 -0.05,-2.28 -0.28,-2.57 -1.75,-3.27 -0.74,-0.35 -2.16,-0.71 -4.31,-0.66zM401.92,235.18c-42.5,15.87 -86.26,23.86 -130.26,25.12l-14.76,20.55 -14.88,-20.71c-44.99,-1.75 -89.98,-10.23 -133.9,-24.31 -12.78,28.51 -18.94,61.14 -19.6,93.44 37.52,17.5 62.13,39.82 75.56,64.63C177,417.8 179.28,443.62 174.18,467.98c7.72,5.01 16.13,9.14 24.98,12.43l5.56,-47.89 18.56,2.15 -5.93,51.16c9.57,2.21 19.44,3.53 29.38,3.98v-54.67h18.69v54.49c9.9,-0.64 19.7,-2.13 29.16,-4.48l-5.86,-50.47 18.56,-2.15 5.44,46.85c8.75,-3.42 17,-7.64 24.51,-12.69 -5.76,-24.41 -3.77,-49.67 9.01,-72.99 13.28,-24.23 37.72,-46 74.8,-64.29 -0.62,-33.53 -6.69,-66.12 -19.11,-94.23zM135.19,282.18c34.6,0.23 68.41,12.24 101.36,36.87 -46.6,33.15 -129.79,34.37 -108.29,-36.76 2.32,-0.09 4.63,-0.13 6.93,-0.11zM378.01,282.18c2.31,-0.02 4.62,0.02 6.93,0.11 21.51,71.13 -61.68,69.9 -108.29,36.76 32.95,-24.63 66.76,-36.64 101.36,-36.87zM255.16,332.14c11.77,21.73 19.19,43.45 25.37,65.18h-50.74c4.57,-21.73 13.77,-43.45 25.37,-65.18z" />
</vector>

View file

@ -1,6 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp" android:width="200dp"
android:height="24dp" android:height="200dp"
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M129.66,21.19L37.94,79.78c3.54,26.81 8.91,53.55 16.13,80.13L240.72,39.59l-19.28,-12.5c-31.28,-0.88 -62.2,-2.84 -91.78,-5.91zM383.13,21.81c-40.51,3.97 -83.5,5.94 -126.47,5.84l204.63,132.72c7.11,-25.89 12.49,-51.92 16.09,-78.03l-94.25,-60.53zM257.94,50.75L59.47,178.66c8.02,26.32 17.86,52.46 29.53,78.31l243.25,-158 -74.31,-48.22zM349.41,110.09l-74.56,48.44 151.28,98.78c11.71,-25.8 21.59,-51.91 29.69,-78.19l-106.41,-69.03zM257.72,169.66L97,274.06c12.2,25.17 26.14,50.06 41.84,74.56l196.09,-128.53 -77.22,-50.44zM352,231.22l-77.53,50.84 101.4,67.19c15.82,-24.6 29.9,-49.58 42.22,-74.88L352,231.22zM257.47,293.19l-108.35,71.03c13.56,20.06 28.33,39.85 44.28,59.31l132.03,-85.28 -67.97,-45.06zM342.44,349.5L274.5,393.41l47.03,30.38c15.85,-19.34 30.51,-38.99 44.03,-58.94L342.44,349.5zM257.47,404.38L205.5,437.97c16.23,18.93 33.61,37.54 52.16,55.78 18.39,-18.15 35.64,-36.68 51.78,-55.53l-52.09,-33.63 0.13,-0.22z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M230.31,18.22c-38.37,0 -65.98,2.77 -85.03,8.5 -19.05,5.73 -29.25,13.7 -35.87,25.47 -12.14,21.56 -10.57,61.47 -8.38,120.59 19.88,-8.89 47.44,-11.33 78.19,-10.9 35.38,0.49 74.69,5.72 109.31,14.38 18.68,-46.79 28.3,-91.06 38,-135.34 0.55,43.8 0.98,87.61 -9.65,131.41 26.36,9.14 45.59,23.72 56.53,39.44 11.88,-31.15 20.09,-58.35 23.63,-81.09 4.29,-27.62 1.97,-48.6 -6.87,-64.41 -8.85,-15.8 -24.57,-27.57 -50.66,-35.75 -26.09,-8.18 -62.19,-12.28 -109.19,-12.28zM171.97,180.53c-9.12,0.09 -17.84,0.61 -25.94,1.47 -9.86,77.77 -11.77,156.56 -4.47,254.56 26.54,23.08 66.74,31.19 105.47,40.91 -32.55,1.31 -65.25,0.19 -98.5,-9.6 8.33,17.87 23.53,25.03 44,25.03H450.5c37.1,0 22.51,-40.21 3.09,-66.94 -22.22,-30.58 -65.65,-34.5 -101.22,-58.53l0.13,0.22c-38.97,-15.46 -77.94,0.41 -116.91,31.56 20.12,-29.93 48.29,-56.02 80.19,-56.47 3.74,-0.05 7.54,0.28 11.38,0.97 -3.08,-8.27 -5.61,-16.39 -7.66,-24.38 -33.09,-22.49 -73.68,-16.99 -118,2.5 22.38,-19.51 49.35,-35.1 75.44,-35.63 13.23,-0.27 26.24,3.35 38.31,12.28 -5.43,-35.45 -1.14,-68.74 9.44,-102.47 -4.55,-2.32 -9.48,-4.46 -14.78,-6.31l-12.38,-2.13 -2.72,9.66c-35.35,-9.93 -78.42,-16.17 -115.88,-16.69 -2.34,-0.03 -4.67,-0.05 -6.97,-0.03z"
android:fillColor="#000000"/>
</vector>

View file

@ -1,6 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM7.35,18.5C8.66,17.56 10.26,17 12,17s3.34,0.56 4.65,1.5C15.34,19.44 13.74,20 12,20S8.66,19.44 7.35,18.5zM18.14,17.12L18.14,17.12C16.45,15.8 14.32,15 12,15s-4.45,0.8 -6.14,2.12l0,0C4.7,15.73 4,13.95 4,12c0,-4.42 3.58,-8 8,-8s8,3.58 8,8C20,13.95 19.3,15.73 18.14,17.12z"/>
<path android:fillColor="@android:color/white" android:pathData="M12,6c-1.93,0 -3.5,1.57 -3.5,3.5S10.07,13 12,13s3.5,-1.57 3.5,-3.5S13.93,6 12,6zM12,11c-0.83,0 -1.5,-0.67 -1.5,-1.5S11.17,8 12,8s1.5,0.67 1.5,1.5S12.83,11 12,11z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20.5,3l-0.16,0.03L15,5.1 9,3 3.36,4.9c-0.21,0.07 -0.36,0.25 -0.36,0.48L3,20.5c0,0.28 0.22,0.5 0.5,0.5l0.16,-0.03L9,18.9l6,2.1 5.64,-1.9c0.21,-0.07 0.36,-0.25 0.36,-0.48L21,3.5c0,-0.28 -0.22,-0.5 -0.5,-0.5zM10,5.47l4,1.4v11.66l-4,-1.4L10,5.47zM5,6.46l3,-1.01v11.7l-3,1.16L5,6.46zM19,17.54l-3,1.01L16,6.86l3,-1.16v11.84z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M8,2C6.355,2 5,3.355 5,5L5,16L2,16L2,19C2,20.645 3.355,22 5,22L14,22L15,22C16.645,22 18,20.645 18,19L18,8L22,8L22,5C22,3.355 20.645,2 19,2L8,2zM8,4L16.188,4C16.074,4.315 16,4.648 16,5L16,19C16,19.56 15.572,19.991 15.014,19.998L15.014,19.986C14.45,19.994 14.008,19.563 14,19L13.973,16.004L13,16.014L13,16L7,16L7,5C7,4.435 7.435,4 8,4zM19,4C19.565,4 20,4.435 20,5L20,6L18,6L18,5C18,4.435 18.435,4 19,4zM4,18L11.99,18L12,19.025L12,19.027C12.005,19.37 12.081,19.694 12.193,20L5,20C4.435,20 4,19.565 4,19L4,18z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="m78,12 l9,70 -69,-11 41,56 -11,323c-11,13 -20,29 -25,48 74,-56 152,-72 223,-101l-36,-36c-53,25 -106,42 -142,71l9,-280 8,10 3,5h71l200,227c15,-14 29,-28 42,-45L172,156L172,84l-12,-9 273,-11c-30,37 -47,89 -71,143l36,36c30,-70 45,-148 101,-221 -19,5 -34,13 -47,23L137,57 78,12zM102,54 L153,93v55L99,148L60,97l49,8 -7,-51zM351,222c-9,13 -17,26 -27,38l31,26 34,-26 -38,-38zM451,312c-36,57 -76,100 -135,136 59,20 118,37 179,44 -9,-61 -24,-121 -44,-180zM266,317c-13,11 -27,22 -42,31l38,38c8,-15 18,-28 29,-41l-25,-28z" />
</vector>

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M103.43,17.84c-1.12,0 -2.23,0.03 -3.35,0.08 -2.55,0.11 -5.08,0.33 -7.6,0.68 -20.17,2.75 -39.16,13.67 -52.32,33.67 -24.61,37.4 2.19,98.03 56.63,98.03 0.54,0 1.06,-0.01 1.58,-0.02v0.7h60.56c-10.76,31.99 -30.3,66.6 -52.45,101.43 -2.16,3.4 -4.25,6.88 -6.29,10.41l34.88,35.73 -56.26,9.42c-32.73,85.97 -27.42,182.07 48.28,182.07v-0l9.31,0.07c23.83,-0.57 46.73,-4.3 61.33,-12.89 4.17,-2.46 7.63,-5.24 10.47,-8.42h-32.45c-20.33,5.95 -40.8,-6.94 -47.4,-25.92 -8.96,-25.77 7.52,-52.36 31.87,-60.45 5.8,-1.93 11.72,-2.83 17.57,-2.83v-0.41h178.33c-0.57,-44.4 16.35,-90.13 49.18,-126 23.95,-26.18 42.03,-60.62 51.3,-94.85l-41.22,-24.93 38.27,-6.91 -43.37,-25.81h-0l0,-0 0,0 52.13,-8.85c-5.23,-39.13 -28.84,-68.11 -77.37,-68.11C341.14,32.26 222.11,35.29 149.34,28.5c-14.89,-6.76 -30.55,-10.72 -45.91,-10.65zM103.9,36.55c13.14,0.04 27.41,3.8 41.25,10.63l0.03,-0.07c4.67,4.74 8.54,9.74 11.68,14.98L82.92,62.09l10.57,14.78c10.61,14.83 19.8,31.99 21.09,42.02 0.64,5.02 -0.11,7.17 -1.81,8.84 -1.71,1.67 -6.23,3.88 -15.99,3.88 -40.59,0 -56.88,-44.95 -41.01,-69.06C66.24,46.64 79.58,39.22 95,37.12c2.89,-0.4 5.86,-0.58 8.89,-0.57zM118.5,80.78h46.28c4.28,15.73 3.66,33.07 -0.54,51.51L131.52,132.29c1.9,-5.03 2.27,-10.57 1.6,-15.77 -1.53,-11.91 -7.41,-24.07 -14.62,-35.74zM220.05,397.88c6.44,6.84 11.19,15.31 13.37,24.91 3.8,16.74 3.09,31.21 -1.77,43.2 -4.53,11.18 -12.58,19.79 -22.29,26h237.19c14.45,0 24.89,-5.68 32.2,-14.32 7.31,-8.64 11.2,-20.51 10.7,-32.35 -0.19,-4.47 -0.98,-8.91 -2.41,-13.18l-69.91,-8.2 42.02,-20.53c-8.32,-3.44 -18.64,-5.54 -31.38,-5.54L220.05,397.87zM177.39,398.38c-1.15,-0 -2.31,0.05 -3.46,0.15 -2.63,0.24 -5.26,0.77 -7.82,1.63 -15.11,5.02 -25.34,21.54 -20.11,36.58 3.67,10.57 15.35,17.71 25.65,13.94l1.55,-0.57h43.35c0.95,-6.36 0.75,-13.88 -1.36,-23.19 -3.71,-16.36 -20.54,-28.48 -37.81,-28.54z"/>
</vector>

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M227.4,34.7c-10.1,0 -20.2,0.2 -30.2,0.5l6.1,65.6 -61.1,-62.5c-31.3,2.5 -62.5,6.6 -93.8,12.5l34.2,28.4 -48,-0.6c35.1,100.2 6.9,182.6 -0.3,292.1L130,476.5c10,-1.3 19.9,-2.4 29.6,-3.3l21.5,-42.2 18.6,28.8 41.5,-33.5 0.8,43c82.9,-0.2 157.7,9.1 235.7,7.9 -28.2,-73 -31.2,-143.6 -31.9,-209.2l-33.3,-19.1 32.7,-33.9c-0.4,-21.3 -1.3,-42 -3.6,-61.9l-57.4,0.7 50.2,-41.7c-3.8,-15.5 -9,-30.4 -16.1,-44.7l-29.5,-23.9C335,38 281.2,34.6 227.4,34.7zM286.1,71.7c10.6,24.75 21.1,49.5 31.7,74.3 7.5,-10.5 14.9,-21 22.4,-31.5 16,27.2 32,54.3 48,81.5l-16.2,9.5 -33.3,-56.7 -42.5,59.4 -15.2,-10.9 24,-33.5 -21.9,-51.5 -24.6,40.1 12,22.6 -16.5,8.8 -18.3,-34.5 -24.8,58.2 -17.2,-7.4 32.5,-76.2 7.7,-18c4.8,9.2 9.6,18.3 14.5,27.4 12.5,-20.6 25.1,-41.11 37.7,-61.6zM91.2,128c6.72,1.6 13.4,3.4 19.2,5.3 -2.1,5.9 -4.1,11.8 -6.2,17.6 -5.79,-1.6 -11.72,-3.4 -16.9,-4.7 1.39,-6 2.62,-12.1 3.9,-18.2zM129.1,141.4c6.3,3.8 12,7.2 17,12.8L132.6,167c-4,-3.7 -8.6,-7 -12.8,-9.4zM157.8,173.7c2.1,7.4 2.1,15.7 1.6,22.5l-18.5,-2.4c0.1,-5.1 0.3,-10 -1,-14.5zM136.6,209.4l17.2,7.1c-3.3,6.6 -5.1,12.7 -8.6,17.8l-16.3,-9c2.6,-5.4 5.6,-10.8 7.7,-15.9zM120.1,243.5l17.7,6.1c-1.5,5.4 -3,11.2 -3.6,16.2l-18.6,-2c1.3,-7.5 2.1,-14 4.5,-20.3zM327.9,260.9c8.5,1 14.6,3 21.7,7.1l-9.8,16c-4.1,-2.8 -9.4,-3.8 -13.5,-4.5zM306.7,262.4c1.1,6.1 2.5,12.2 3.9,18.3 -5.9,1.3 -11.7,3.3 -16.5,5.1l-6.8,-17.4c6.7,-2.4 13.5,-4.7 19.4,-6zM268.8,278.3l11,15.1c-5.6,4 -11.8,7.8 -16.8,10.6l-8.9,-16.4c5.1,-2.9 10.6,-6.3 14.7,-9.3zM135.3,281c1.5,4.7 4.2,9.2 6.9,12.1l-13.8,12.6c-5.5,-5.7 -9.5,-13.5 -11.2,-20.1zM365.6,284.3c3.5,6.4 6.8,12.7 8.7,19.1l-17.8,5.6c-2,-5.4 -4.3,-10.8 -6.8,-14.8zM238.2,295.2l6.9,17.3c-6.4,2.7 -12.9,4.8 -18.6,6.5l-5,-18c5.9,-1.6 11.3,-3.8 16.7,-5.8zM154.4,301.4c5.3,1.7 10.8,3.4 15.7,4.2 -1.2,6.1 -2,12.3 -2.8,18.5 -7,-1 -14.5,-3.3 -20.5,-5.7zM204.4,304.9l2.8,18.5c-7.2,1.3 -13.4,1.6 -19.8,1.9l-0.4,-18.7c5.9,-0.2 11.6,-0.8 17.4,-1.7zM378.9,322.9c1,6.4 1.6,12.9 2.2,19.3l-18.7,1.5c-0.4,-6 -0.9,-11.9 -2,-17.8zM311.3,353.7c18.9,3.5 44.9,16.2 68.9,33.9 7.4,-9.9 14.4,-20.4 21.3,-31.1l30.1,12.9c-4.7,12.3 -15,25.6 -28.6,37.2 17,16.2 30.9,34.5 37,53 -13.8,-18.1 -31.1,-31.8 -50.3,-42.8 -23.4,15.8 -52.7,25.9 -79.6,20.4 22.9,-4.4 40.6,-16.6 55.8,-32.6 -16.5,-7.5 -33.8,-13.9 -51.3,-20.1z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M128.84,16.31c-1.26,0.01 -2.52,0.04 -3.75,0.09 -19.69,0.81 -35.63,6.79 -46.63,17.78 -21.99,21.99 -23.81,63.78 -4.72,115.69s58.57,112.16 113.69,167.28c55.12,55.12 115.38,94.6 167.28,113.69 51.91,19.09 93.73,17.27 115.72,-4.72 21.99,-21.99 23.78,-63.78 4.69,-115.69 -19.09,-51.9 -58.54,-112.19 -113.66,-167.31C306.35,88.01 246.06,48.56 194.15,29.47c-24.33,-8.95 -46.42,-13.32 -65.31,-13.16zM163.81,68.47c45.35,-0.48 113.94,35.97 175.15,97.19 76.95,76.95 114.75,165.57 89.28,205 -16.35,-55.69 -56.74,-120.15 -115.44,-178.84C254.13,133.13 189.69,92.73 134,76.38c8.06,-5.2 18.17,-7.78 29.81,-7.91zM42.72,70.03L31.78,80.97c-10.99,10.99 -16.85,26.35 -17.69,46.06 -0.83,19.71 3.62,43.48 13.22,69.38C46.51,248.2 86.06,308.37 141.16,363.47c55.1,55.1 115.27,94.65 167.06,113.84 25.9,9.6 49.66,14.05 69.37,13.22 19.71,-0.83 35.08,-6.7 46.06,-17.69l10.97,-10.97c-25.29,3.14 -55.02,-1.98 -86.35,-13.5 -55.3,-20.34 -117.29,-61.23 -174.06,-118 -56.77,-56.77 -97.66,-118.73 -118,-174.03 -11.52,-31.3 -16.63,-61.03 -13.5,-86.31zM119.94,91.91c52.77,13.2 119.52,52.99 179.66,113.13 60.13,60.14 99.93,126.89 113.13,179.66 -41.03,21.15 -126.71,-16.64 -201.41,-91.34 -74.71,-74.72 -112.55,-160.42 -91.38,-201.44z"
android:fillColor="#000000"/>
</vector>