// Handles a character being clicked
    public void CharacterClicked(MamiPoserCharacter clickedCharacter)
    {
        // Play the smoke effect
        GameObject smoke = Instantiate(smokePrefab, Vector2.zero, Quaternion.identity);

        smoke.GetComponent <Transform>().SetParent(characterSlots[mamizouIndex], false);
        // Play the poof sound - panned to the smoke's location
        MicrogameController.instance.playSFX(
            smokeSound,
            volume: 1f,
            panStereo: AudioHelper.getAudioPan(smoke.transform.position.x)
            );
        // Spawn the real Mamizou - hidden for now
        mamizou = Instantiate(mamizouPrefab, Vector2.zero, Quaternion.identity);
        mamizou.GetComponent <Transform>().SetParent(characterSlots[mamizouIndex], false);
        mamizou.gameObject.SetActive(false);
        // Delay the sprite switch so it happens when the sprite is covered in smoke
        mamizouAppearTimer = TimerManager.NewTimer(mamizouAppearDelay, SwitchSpriteToMamizou, 0);

        // Determine if the player chose correctly
        GameObject signPrefab;
        AudioClip  resultSound;

        if (clickedCharacter.isDisguised)
        {
            // Win
            MicrogameController.instance.setVictory(victory: true, final: true);
            mamizou.ChoseRight();
            signPrefab  = correctSignPrefab;
            resultSound = winSound;
        }
        else
        {
            // Loss
            MicrogameController.instance.setVictory(victory: false, final: true);
            mamizou.ChoseWrong();
            clickedCharacter.ChoseWrong();
            signPrefab  = incorrectSignPrefab;
            resultSound = lossSound;
        }

        // Delay the victory/loss effects
        resultTimer = TimerManager.NewTimer(
            resultEffectsDelay,
            () => VictoryLossEffects(signPrefab, resultSound),
            0
            );
    }
    // Setup the microgame
    void Start()
    {
        // Calculate how many characters to spawn by adding numbers from spawners
        // and create slots to spawn them in
        characterSlots = new List <Transform>();
        foreach (MamiPoserSpawner spawner in spawners)
        {
            characterSpawnNumber += spawner.characterSpawnNumber;
            characterSlots.AddRange(spawner.CreateSlots());
        }

        // Determine which character to use and which of the copies is Mamizou
        chosenCharacterPrefab = characterPrefabs[Random.Range(0, characterPrefabs.Length)];
        print("Chosen character prefab: " + chosenCharacterPrefab);
        mamizouIndex = Random.Range(0, characterSpawnNumber);
        print("Mamizou index: " + mamizouIndex);

        // Spawn the characters
        createdCharacters = new List <MamiPoserCharacter>();
        for (int i = 0; i < characterSpawnNumber; i++)
        {
            MamiPoserCharacter newCharacter = Instantiate(chosenCharacterPrefab, Vector2.zero, Quaternion.identity);
            newCharacter.GetComponent <Transform>().SetParent(characterSlots[i], false);
            createdCharacters.Add(newCharacter);
            newCharacter.controller = this;
            if (i == mamizouIndex)
            {
                // This one is disguised Mamizou
                newCharacter.SetDisguised();
            }
            else
            {
                // This one is not Mamizou
                newCharacter.SetRegular();
            }
        }
    }