All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.eu.codlab.lorcana.raw.RawVirtualCard.kt Maven / Gradle / Ivy

package eu.codlab.lorcana.raw

import eu.codlab.lorcana.abilities.Ability
import eu.codlab.lorcana.cards.CardThirdParty
import eu.codlab.lorcana.cards.CardTranslations
import eu.codlab.lorcana.cards.CardType
import eu.codlab.lorcana.cards.ClassificationHolder
import eu.codlab.lorcana.cards.InkColor
import eu.codlab.lorcana.franchises.Franchise
import eu.codlab.lorcana.franchises.RawFranchise
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class RawVirtualCard(
    val variants: List = emptyList(),
    val lore: Int? = null,
    val cost: Int = 0,
    val inkwell: Boolean = false,
    @SerialName("move_cost")
    val moveCost: Int? = null,
    val attack: Int? = null,
    val defence: Int? = null,
    val color: InkColor,
    val type: CardType,
    val classifications: List = emptyList(),
    val illustrator: String = "",
    val languages: CardTranslations,
    val actions: List = emptyList(),
    @SerialName("franchise_id")
    val franchiseId: String,
    @SerialName("third_party")
    val thirdParty: CardThirdParty? = null
) {
    fun variants(set: SetDescription) = variants.filter { it.set == set }

    @Suppress("TooGenericExceptionCaught")
    internal fun to(
        abilities: Map,
        mapOfClassifications: Map,
        franchises: Map
    ) = VirtualCard(
        cost = cost,
        inkwell = inkwell,
        moveCost = moveCost,
        attack = attack,
        defence = defence,
        variants = variants.map { it.to(mapOfClassifications) },
        color = color,
        type = type,
        classifications = classifications.map { slug ->
            try {
                mapOfClassifications[slug]!!
            } catch (err: Throwable) {
                println("Exception thrown because $slug couldn't be mapped")
                throw err
            }
        },
        illustrator = illustrator,
        languages = languages,
        actions = actions.mapNotNull { abilities[it] },
        franchise = franchises[franchiseId].let { franchise ->
            if (null != franchise) {
                Franchise.from(franchiseId, franchise)
            } else {
                Franchise.from("unknown", franchises["unknown"]!!)
            }
        },
        thirdParty = thirdParty
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy