Skip to content

CharacterSelector

A pre-built character discovery component that surfaces a roster of characters users can play mini-games with. Pass in your own platform characters or omit characters to use Simula's default roster.

Character selector component showing a roster of playable characters

Passing Your Characters

If your app has its own characters, map them to CharacterData and pass them via the characters parameter. The selector displays up to 4 -- any remaining slots are backfilled from Simula's default roster.

kotlin
val recentCharacters = listOf(
    CharacterData(id = "reze-01", name = "Reze", imageUrl = "https://cdn.example.com/avatars/reze.png", description = "The Bomb Devil from Chainsaw Man"),
    CharacterData(id = "power-02", name = "Power", imageUrl = "https://cdn.example.com/avatars/power.png", description = "The Blood Fiend from Chainsaw Man"),
)

Basic Usage

kotlin
import ad.simula.ad.sdk.character.CharacterSelector
import ad.simula.ad.sdk.model.CharacterData
import ad.simula.ad.sdk.ads.SimulaRewardedAd
import ad.simula.ad.sdk.ads.SimulaRewardedAdListener

@Composable
fun RewardFlow(recentCharacters: List<CharacterData>) {
    var selectorOpen by remember { mutableStateOf(false) }
    val rewarded = remember { SimulaRewardedAd("SIM-RWD-XXXXXXXX") }

    LaunchedEffect(Unit) {
        rewarded.listener = object : SimulaRewardedAdListener {
            override fun onAdLoaded(ad: SimulaRewardedAd) {
                ad.show(context)
            }
            override fun onAdRewardVerified(ad: SimulaRewardedAd, token: String?) {
                grantMessageCredits(10, token)
            }
        }
    }

    Button(onClick = { selectorOpen = true }) {
        Text("Earn free credits")
    }

    CharacterSelector(
        isOpen = selectorOpen,
        onClose = { selectorOpen = false },
        characters = recentCharacters,
        onCharacterSelected = { character ->
            selectorOpen = false
            rewarded.load(
                charId = character.id,
                charName = character.name,
                charImage = character.imageUrl,
                charDesc = character.description,
            )
        },
        ctaText = "Launch Game",
    )
}

Required Parameters

ParameterTypeDescription
isOpenBooleanControls selector visibility
onClose() -> UnitCalled when the user dismisses without selecting
onCharacterSelected(CharacterData) -> UnitCalled with the selected character. Pass fields to .load()

Optional Parameters

ParameterTypeDefaultDescription
charactersList<CharacterData>?nullYour platform's characters. Omit to use Simula's default roster
ctaTextString"Launch Game"CTA button label
titleString"Select Your Game Partner"Selector title text
themeCharacterSelectorThemeCharacterSelectorTheme()Theme configuration
onCharacterPreview((CharacterData) -> Unit)?nullCalled when a user previews a character before confirming

CharacterData

kotlin
data class CharacterData(
    val id: String,
    val name: String,
    val imageUrl: String,
    val description: String,
)

Theme

FieldTypeDefaultDescription
backgroundColorString?"#000000"Selector background
titleFontColorString?"#FFFFFF"Title text color
secondaryFontColorString?"#FFFFFF"Character name label color
accentColorString?"#3D9A66"Selection highlight and CTA color
ctaFontColorString?"#FFFFFF"CTA button text color
cardBackgroundColorString?"#14161A"Character card background
cardBorderColorString?"#343A42"Character card border
cardCornerRadiusInt?18Card corner radius (dp)
fontFamilyString?System defaultFont family