Exemplo n.º 1
0
        private void SetChoices()
        {
            foreach (ChoiceBlock choiceInstance in _choiceBlocks)
            {
                choiceInstance.Button.gameObject.SetActive(false);
                choiceInstance.Button.onClick.RemoveAllListeners();
            }

            IReadOnlyList <DialogueNode> playerChildren = _conversationHandler.GetPlayerChildren();

            for (int i = 0; i < playerChildren.Count; i++)
            {
                if (playerChildren[i] != null)
                {
                    if (!_choiceBlocks[i].Text)
                    {
                        AddChoice();
                    }

                    ChoiceBlock choiceInstance = _choiceBlocks[i];

                    choiceInstance.Text.text = playerChildren[i].Text;
                    int index = i;
                    choiceInstance.Button.onClick.AddListener(delegate { SelectChoice(index); });
                    choiceInstance.Button.gameObject.SetActive(true);

                    _choiceBlocks[i] = choiceInstance;
                }
            }
        }
Exemplo n.º 2
0
        private MistakesCount GetChoiceBlockMistakesCount(ChoiceBlock choiceBlock, List <QuizInfoForDb> ans)
        {
            var checkedUnnecessary = ans.Count(x => !x.IsRightAnswer);

            var totallyTrueItemIds  = choiceBlock.Items.Where(x => x.IsCorrect == ChoiceItemCorrectness.True).Select(x => x.Id);
            var userItemIds         = ans.Select(y => y.ItemId).ToImmutableHashSet();
            var notCheckedNecessary = totallyTrueItemIds.Count(x => !userItemIds.Contains(x));

            return(new MistakesCount(checkedUnnecessary, notCheckedNecessary));
        }
Exemplo n.º 3
0
        private void AddChoice()
        {
            GameObject choiceGameObject = Instantiate(_choicePrefab, _playerResponseBlock.transform);

            ChoiceBlock choiceInstance = new ChoiceBlock
            {
                Text   = choiceGameObject.GetComponentInChildren <TextMeshProUGUI>(),
                Button = choiceGameObject.GetComponent <Button>()
            };

            _choiceBlocks.Add(choiceInstance);
        }
Exemplo n.º 4
0
        private IEnumerable <QuizInfoForDb> CreateQuizInfoForDb(ChoiceBlock choiceBlock, IGrouping <string, QuizAnswer> answers)
        {
            int blockScore;

            if (!choiceBlock.Multiple)
            {
                var answerItemId = answers.First().ItemId;
                var isTrue       = choiceBlock.Items.First(x => x.Id == answerItemId).IsCorrect;
                blockScore = isTrue ? choiceBlock.MaxScore : 0;
                return(new List <QuizInfoForDb>
                {
                    new QuizInfoForDb
                    {
                        QuizId = choiceBlock.Id,
                        ItemId = answerItemId,
                        IsRightAnswer = isTrue,
                        Text = null,
                        QuizType = typeof(ChoiceBlock),
                        QuizBlockScore = blockScore,
                        QuizBlockMaxScore = choiceBlock.MaxScore
                    }
                });
            }
            var ans = answers.Select(x => x.ItemId).ToList()
                      .Select(x => new QuizInfoForDb
            {
                QuizId            = choiceBlock.Id,
                IsRightAnswer     = choiceBlock.Items.Where(y => y.IsCorrect).Any(y => y.Id == x),
                ItemId            = x,
                Text              = null,
                QuizType          = typeof(ChoiceBlock),
                QuizBlockScore    = 0,
                QuizBlockMaxScore = choiceBlock.MaxScore
            }).ToList();
            var isRightQuizBlock = ans.All(x => x.IsRightAnswer) &&
                                   choiceBlock.Items.Where(x => x.IsCorrect)
                                   .Select(x => x.Id)
                                   .All(x => ans.Where(y => y.IsRightAnswer).Select(y => y.ItemId).Contains(x));

            blockScore = isRightQuizBlock ? choiceBlock.MaxScore : 0;
            foreach (var info in ans)
            {
                info.QuizBlockScore = blockScore;
            }
            return(ans);
        }
Exemplo n.º 5
0
        private IEnumerable <QuizInfoForDb> CreateQuizInfoForDb(ChoiceBlock choiceBlock, IGrouping <string, QuizAnswer> answers)
        {
            int blockScore;

            if (!choiceBlock.Multiple)
            {
                var answerItemId = answers.First().ItemId;
                var isCorrect    = choiceBlock.Items.First(x => x.Id == answerItemId).IsCorrect.IsTrueOrMaybe();
                blockScore = isCorrect ? choiceBlock.MaxScore : 0;
                return(new List <QuizInfoForDb>
                {
                    new QuizInfoForDb
                    {
                        BlockId = choiceBlock.Id,
                        ItemId = answerItemId,
                        IsRightAnswer = isCorrect,
                        Text = null,
                        BlockType = typeof(ChoiceBlock),
                        QuizBlockScore = blockScore,
                        QuizBlockMaxScore = choiceBlock.MaxScore
                    }
                });
            }

            var ans = answers.Select(x => x.ItemId).ToList()
                      .Select(x => new QuizInfoForDb
            {
                BlockId           = choiceBlock.Id,
                IsRightAnswer     = choiceBlock.Items.Where(y => y.IsCorrect.IsTrueOrMaybe()).Any(y => y.Id == x),
                ItemId            = x,
                Text              = null,
                BlockType         = typeof(ChoiceBlock),
                QuizBlockScore    = 0,
                QuizBlockMaxScore = choiceBlock.MaxScore
            }).ToList();

            var mistakesCount    = GetChoiceBlockMistakesCount(choiceBlock, ans);
            var isRightQuizBlock = mistakesCount.HasNotMoreThatAllowed(choiceBlock.AllowedMistakesCount);

            blockScore = isRightQuizBlock ? choiceBlock.MaxScore : 0;
            foreach (var info in ans)
            {
                info.QuizBlockScore = blockScore;
            }
            return(ans);
        }
Exemplo n.º 6
0
        private static QuizAnswerInfo GetChoiceBlockAnswerInfo(IReadOnlyDictionary <string, List <UserQuiz> > answers, ChoiceBlock block, int questionIndex)
        {
            IEnumerable <UserQuiz> answer = new List <UserQuiz>();

            if (answers.ContainsKey(block.Id))
            {
                answer = answers[block.Id].Where(q => q.ItemId != null);
            }

            var ans = new SortedDictionary <string, bool>();

            foreach (var item in block.Items)
            {
                ans[item.Id] = false;
            }

            var isRight  = false;
            var score    = 0;
            var maxScore = 0;

            foreach (var quizItem in answer.Where(quizItem => ans.ContainsKey(quizItem.ItemId)))
            {
                isRight = quizItem.IsQuizBlockScoredMaximum;
                ans[quizItem.ItemId] = true;
                score    = quizItem.QuizBlockScore;
                maxScore = quizItem.QuizBlockMaxScore;
            }

            return(new ChoiceBlockAnswerInfo
            {
                AnswersId = ans,
                Id = questionIndex.ToString(),
                RealyRightAnswer = new HashSet <string>(block.Items.Where(x => x.IsCorrect.IsTrueOrMaybe()).Select(x => x.Id)),
                Score = score,
                MaxScore = maxScore,
                IsRight = isRight
            });
        }
Exemplo n.º 7
0
        public static System.Web.WebPages.HelperResult QuizBlock(ChoiceBlock block, BlockRenderContext context)
        {
            return(new System.Web.WebPages.HelperResult(__razor_helper_writer => {
                var items = block.ShuffledItems();
                var isMultiply = block.Multiple;
                var typeInp = isMultiply ? "checkbox" : "radio";
                QuizBlockData model = context.GetBlockData(block) ?? new QuizBlockData(new QuizModel(), 1, QuizState.NotPassed);

                WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<div class=\"quiz-block-mark ");


                WebViewPage.WriteTo(@__razor_helper_writer, typeInp);

                WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" id=\'");


                WebViewPage.WriteTo(@__razor_helper_writer, block.Id + "_quizBlock");

                WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\'>\r\n");


                for (var itemIndex = 0; itemIndex < items.Length; itemIndex++)
                {
                    var item = items[itemIndex];
                    var id = isMultiply ? itemIndex + "noMult" : model.BlockIndex.ToString();
                    var itemChecked = model.QuizState != QuizState.NotPassed && model.QuizModel.AnswersToQuizes[block.Id].Contains(item.Id);
                    var ans = itemChecked ? "checked" : "";
                    var itemClass = "";
                    var title = "";
                    if (model.QuizState == QuizState.Total)
                    {
                        itemClass = item.IsCorrect ? "right-quiz" : itemChecked ? "wrong-quiz" : "";
                        title = (item.IsCorrect ? "Правильный" : "Неправильный") + " вариант";
                    }

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t<div class=\"quiz\">\r\n\t\t\t\t<label class=\"");


                    WebViewPage.WriteTo(@__razor_helper_writer, itemClass);

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" title=\"");


                    WebViewPage.WriteTo(@__razor_helper_writer, title);

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" ");


                    WebViewPage.WriteTo(@__razor_helper_writer, GetGuestOnclick(context.IsGuest));

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, ">\r\n\t\t\t\t\t<input ");


                    WebViewPage.WriteTo(@__razor_helper_writer, ans);

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, " autocomplete=\"off\" id=\'");


                    WebViewPage.WriteTo(@__razor_helper_writer, block.Id + "quizBlock" + item.Id);

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\' name=");


                    WebViewPage.WriteTo(@__razor_helper_writer, "group" + id);

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, " type=\"");


                    WebViewPage.WriteTo(@__razor_helper_writer, typeInp);

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" ");


                    WebViewPage.WriteTo(@__razor_helper_writer, GetGuestDisable(context.IsGuest));

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, ">\r\n\t\t\t\t\t");


                    WebViewPage.WriteTo(@__razor_helper_writer, item.Description.RenderTex());

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t\t\t</label>\r\n");


                    if (model.QuizState == QuizState.Total && item.IsCorrect)
                    {
                        WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t\t<i class=\"glyphicon glyphicon-ok\" style=\"color: green\" title=\"");


                        WebViewPage.WriteTo(@__razor_helper_writer, title);

                        WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\"></i>\r\n");
                    }


                    if (model.QuizState == QuizState.Total && !string.IsNullOrEmpty(item.Explanation))
                    {
                        WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t\t<p class=\"text-muted\">");


                        WebViewPage.WriteTo(@__razor_helper_writer, item.Explanation);

                        WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</p>\r\n");
                    }

                    WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t</div>\r\n");
                }

                WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t</div>\r\n");
            }));
        }