private void ConfigurarFalasDeFeedback(ClassManager classManager, CustomGameSettings settings)
    {
        // Configurar feedback geral sobre a aula do professor também?
        // ...

        // Configurar falas de feedback específicas sobre as mídias
        // Para cada momento, um aluno na sala falará sobre a mídia escolhida
        // para aquele momento da aula

        // Obter feedbacks escritos pelo criador do custom
        CreateCustomGamePanel.MidiaPoderFeedback[][] arraysMPF =
        {
            settings.ArrayMidiaPoderFeedbackMomento1,
            settings.ArrayMidiaPoderFeedbackMomento2,
            settings.ArrayMidiaPoderFeedbackMomento3,
        };
        foreach (var arrayMPF in arraysMPF)
        {
            if (arrayMPF == null)
            {
                return;
            }
        }

        // Criar 3 Dictionary, um para cada momento, para guardarem o link entre
        // uma mídia e o seu feedback
        var feedbacksPorMidiaNoMomento1Custom = new Dictionary <ItemName, string>();
        var feedbacksPorMidiaNoMomento2Custom = new Dictionary <ItemName, string>();
        var feedbacksPorMidiaNoMomento3Custom = new Dictionary <ItemName, string>();

        Dictionary <ItemName, string>[] feedbacksPorMidiaArray =
        {
            feedbacksPorMidiaNoMomento1Custom,
            feedbacksPorMidiaNoMomento2Custom,
            feedbacksPorMidiaNoMomento3Custom
        };

        // Guardar as informações escritas pelo criador nos Dictionary
        // Depois, esses Dictionary serão usados para instanciar um objeto da
        // classe FeedbacksDosAlunos
        for (var momento = 0; momento < 3; momento++)
        {
            var quantidadeMidias = arraysMPF[momento].Length;
            for (var j = 0; j < quantidadeMidias; j++)
            {
                var mpf = arraysMPF[momento][j];
                feedbacksPorMidiaArray[momento][mpf.Midia] = mpf.Feedback;
            }
        }

        // Configurar falas de feedback gerais sobre a aula
        string[] feedbacksAulaMelhor   = { "A aula foi incrível!" };
        string[] feedbacksAulaMuitoBoa = { "A aula foi muito boa!" };
        string[] feedbacksAulaBoa      = { "A aula foi boa!" };
        string[] feedbacksAulaFraca    = { "A aula foi ruim..." };

        // Criar novo objeto FeedbacksDosAlunos, que conterá falas específicas
        // sobre as mídias e falas gerais sobre a aula de acordo com as escolhas
        // feitas pelo criador da missão custom
        FeedbacksDosAlunos feedbacksDosAlunos = new FeedbacksDosAlunos
                                                (
            feedbacksPorMidiaNoMomento1Custom,
            feedbacksPorMidiaNoMomento2Custom,
            feedbacksPorMidiaNoMomento3Custom,
            feedbacksAulaMelhor,
            feedbacksAulaMuitoBoa,
            feedbacksAulaBoa,
            feedbacksAulaFraca
                                                );

        // Pedir para o ClassManager configurar as falas dos alunos
        // comentaristas com os feedbacks custom
        classManager.AlunosComentaristasSetUp(feedbacksDosAlunos);
    }
예제 #2
0
    public void AlunosComentaristasSetUp(FeedbacksDosAlunos feedbacks)
    {
        // Obter feedbacks gerais sobre a aula
        var missaoAtual       = Player.Instance.missionID;
        var historicoDaMissao = Player.Instance.MissionHistory[missaoAtual];
        var pontuacaoDaAula   = historicoDaMissao.totalMissionPoints;
        var feedbacksGerais   = feedbacks.ObterFeedbacksGeraisDaAula(pontuacaoDaAula);

        var alunosComComentariosGerais      = 0;
        var alunosComComentariosSobreMidias = 0;

        // Dar os feedbacks corretos para os alunos na sala de aula
        for (int i = 0; i < alunosComentaristas.Length; i++)
        {
            // Construção de um objeto diálogo para o aluno i
            Dialogo d = new Dialogo();
            d.nodulos                        = new DialogoNodulo[1];
            d.nodulos[0]                     = new DialogoNodulo();
            d.nodulos[0].falas               = new Fala[1];
            d.nodulos[0].falas[0]            = new Fala();
            d.nodulos[0].falas[0].emocao     = Expressao.Serio;
            d.nodulos[0].falas[0].personagem = Personagens.Aluno;

            // Obter componente que irá receber o diálogo recém criado
            var npcDialogoComponent = alunosComentaristas[i].GetComponent <NpcDialogo>();

            // Se i < 3, distribuir feedbacks específicos sobre as mídias
            if (i < 3)
            {
                var momentoAtual = i;

                // Obter feedbacks por mídia considerando o momento atual da aula
                // Momento 1 = 0; Momento 2 = 1; Momento 3 = 2
                Dictionary <ItemName, string> feedbacksPorMidia;
                switch (momentoAtual)
                {
                default:
                    feedbacksPorMidia = feedbacks.FeedbacksPorMidiaNoMomento1;
                    break;

                case 1:
                    feedbacksPorMidia = feedbacks.FeedbacksPorMidiaNoMomento2;
                    break;

                case 2:
                    feedbacksPorMidia = feedbacks.FeedbacksPorMidiaNoMomento3;
                    break;
                }

                // Obter feedback para a mídia selecionada
                var midiaSelecionada = historicoDaMissao.chosenMedia[momentoAtual];
                var feedbackParaEstaMidiaSelecionada = feedbacksPorMidia[midiaSelecionada];

                // Colocar feedback na fala do aluno
                d.nodulos[0].falas[0].fala = feedbackParaEstaMidiaSelecionada;

                alunosComComentariosSobreMidias++;
            }
            // Se i >= 3, distribuir feedbacks gerais sobre a aula
            else
            {
                // Se não há falas novas para o aluno, usar fala 0
                if (alunosComComentariosGerais >= feedbacksGerais.Length)
                {
                    d.nodulos[0].falas[0].fala = feedbacksGerais[0];
                }
                else
                {
                    d.nodulos[0].falas[0].fala = feedbacksGerais[alunosComComentariosGerais];
                }

                alunosComComentariosGerais++;
            }

            npcDialogoComponent.dialogoPrincipal = d;

            // Apagar link antigo, se existir
            npcDialogoComponent.OnEndDialogueEvent -= AceitarFeedbackDeUmAluno;
            // Adicionar link novo
            npcDialogoComponent.OnEndDialogueEvent += AceitarFeedbackDeUmAluno;
        }
    }