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.

swift
let recentCharacters = [
    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

swift
import SimulaAdSDK

struct RewardFlow: View {
    let recentCharacters: [CharacterData]
    @State private var selectorOpen = false
    @StateObject private var vm = RewardFlowViewModel()

    var body: some View {
        Button("Earn free credits") {
            selectorOpen = true
        }

        CharacterSelector(
            isOpen: selectorOpen,
            onClose: { selectorOpen = false },
            onCharacterSelected: { character in
                selectorOpen = false
                vm.loadAd(for: character)
            },
            characters: recentCharacters,
            ctaText: "Launch Game"
        )
    }
}

class RewardFlowViewModel: ObservableObject, SimulaRewardedAdDelegate {
    private let rewarded = SimulaRewardedAd(adUnitId: "SIM-RWD-XXXXXXXX")

    init() {
        rewarded.delegate = self
    }

    func loadAd(for character: CharacterData) {
        rewarded.load(
            charId: character.id,
            charName: character.name,
            charImage: character.imageUrl,
            charDesc: character.description
        )
    }

    func rewardedDidLoad(_ ad: SimulaRewardedAd) {
        ad.show()
    }

    func rewardedDidVerifyReward(_ ad: SimulaRewardedAd, token: String?) {
        grantReward(token: token)
    }
}

Required Parameters

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

Optional Parameters

ParameterTypeDefaultDescription
characters[CharacterData]?nilYour 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) -> Void)?nilCalled when a user previews a character before confirming

CharacterData

swift
public struct CharacterData {
    public let id: String
    public let name: String
    public let imageUrl: String
    public let 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
cardCornerRadiusCGFloat?18Card corner radius (pt)
fontFamilyString?System defaultFont family