public ThrowBallsQuestionProvider() { currentQuestion = -1; // 10 QuestionPacks for (int i = 0; i < 10; i++) { List <ILivingLetterData> correctAnswers = new List <ILivingLetterData>(); List <ILivingLetterData> wrongAnswers = new List <ILivingLetterData>(); LL_LetterData newLetterData = AppManager.I.Teacher.GetRandomTestLetterLL(); if (newLetterData == null) { return; } correctAnswers.Add(newLetterData); // At least 4 wrong letters while (wrongAnswers.Count < 4) { var letter = AppManager.I.Teacher.GetRandomTestLetterLL(); if (!CheckIfContains(correctAnswers, letter) && !CheckIfContains(wrongAnswers, letter)) { wrongAnswers.Add(letter); } } var currentPack = new SampleQuestionPack(newLetterData, wrongAnswers, correctAnswers); questions.Add(currentPack); } }
private IQuestion GenerateCustomQuestion(ILivingLetterData question, LL_LetterData correctLetter) { if (question == null) { throw new ArgumentNullException("Question Null"); } if (correctLetter == null) { throw new ArgumentNullException("correct Letter"); } LL_WordData word = question as LL_WordData; var wordGO = ItemFactory.Instance.SpawnQuestion(word); var partsToRemove = ArabicAlphabetHelper.FindLetter(AppManager.I.DB, word.Data, correctLetter.Data, false); partsToRemove.Shuffle(); //pick a random letter string text = ArabicAlphabetHelper.GetWordWithMissingLetterText( word.Data, partsToRemove[0], RemovedLetterChar); if (config == DefaultQuestionType.MissingForm) { wordGO.Label.text = text; AddCompleteWordEvent(word.TextForLivingLetter, wordGO); } wordGO.InstaShrink(); correctLetter.Form = partsToRemove[0].letterForm; return(new DefaultQuestion(wordGO, 1, dialogues)); }
private IQuestion GenerateMissingLetterQuestion(ILivingLetterData data, ILivingLetterData letterToRemove) { var imageData = new LL_ImageData(data.Id); LL_WordData word = (LL_WordData)data; LL_LetterData letter = (LL_LetterData)letterToRemove; cacheCompleteWord = word.TextForLivingLetter; var partsToRemove = LanguageSwitcher.I.GetHelper(LanguageUse.Learning).FindLetter(AppManager.I.DB, word.Data, letter.Data, LetterEqualityStrictness.Letter); partsToRemove.Shuffle(); //pick a random letter string text = LanguageSwitcher.I.GetHelper(LanguageUse.Learning).GetWordWithMissingLetterText( word.Data, partsToRemove[0], removedLetterColor: "#000000"); //Spawn word, then replace text with text with missing letter var wordGO = ItemFactory.Instance.SpawnQuestion(word); wordGO.InstaShrink(); wordGO.Label.text = text; cacheCompleteWordLL = wordGO; wordGO.SetExtendedBoxCollider(); return(new ImageQuestion(wordGO, imageData, audioManager)); }
private void FlashLetter(LL_LetterData letterToFlash) { int sequentialIndexOfLetter = flashedLettersInLiWVariation.Count(x => x.Id == letterToFlash.Id); UIController.instance.LabelRender.SetFlashingText(((LL_WordData)question).Data, letterToFlash, true, sequentialIndexOfLetter); flashedLettersInLiWVariation.Add(letterToFlash); }
void BuildTutorialLetter() { var alphabetCode = LanguageSwitcher.I.GetLangConfig(LanguageUse.Learning).Alphabet; LetterData data; switch (alphabetCode) { case AlphabetCode.latin: data = AppManager.I.DB.GetLetterDataById("A"); break; case AlphabetCode.arabic: data = AppManager.I.DB.GetLetterDataById("beh"); break; default: throw new ArgumentOutOfRangeException(); } LL_LetterData LLdata = new LL_LetterData(data); game.tutorialLetter = GameObject.Instantiate(game.letterPrefab); game.tutorialLetter.SetActive(true); game.tutorialLetter.GetComponent <LivingLetterController>().Init(LLdata, _outline: true); game.tutorialLetter.GetComponent <LivingLetterController>().LabelRender.color = Color.white; game.tutorialLetter.GetComponent <ColorTickle_LLController>().movingToDestination = false; }
public ILivingLetterData GetNextData() { LL_LetterData ld = letters[0]; letters.RemoveAt(0); return(ld); }
public void SetLetter(LL_LetterData _data) { letterObject = _data; var text = _data.TextForLivingLetter; letterText.text = text; //tileText.text = text; }
void UpdateWord() { if (!isActiveAndEnabled) { return; } string word = string.Empty; for (int i = 0; i < CompletedLetters.Count; ++i) { LL_LetterData letter = CompletedLetters[i]; if (splitMode) { if (i == 0) { word = "<size=130%>" + letter.Data.GetStringForDisplay(letter.Form) + "</size>"; } else if (i == 1) { word += "\n" + letter.Data.GetStringForDisplay(letter.Form); } else { word += " " + letter.Data.GetStringForDisplay(letter.Form); } } else { word += letter.Data.GetStringForDisplay(letter.Form); } } if (splitMode) { // Hack to fix space string placeholder = "<color=#0000>ﺟ</color>"; for (int i = CompletedLetters.Count; i < 4; ++i) { if (i == 0) { word = "<size=130%>" + placeholder + "</size>"; } else if (i == 1) { word += "\n" + placeholder; } else { word += " " + placeholder; } } } //WordLabel.SetText(word, !splitMode); WordLabel.SetText(word, false); }
void initCurrentLetter() { if (gameEnded) { return; } currentCharacter = null; currentTutorial = null; TutorialUI.Clear(false); addLine(); //get a new letter: IQuestionPack newQuestionPack = MazeConfiguration.Instance.Questions.GetNextQuestion(); List <ILivingLetterData> ldList = (List <ILivingLetterData>)newQuestionPack.GetCorrectAnswers(); LL_LetterData ld = (LL_LetterData)ldList[0]; int index = -1; if (allLetters.ContainsKey(ld.Id)) { index = allLetters[ld.Id]; } if (index == -1) { Debug.Log("Letter got from Teacher is: " + ld.Id + " - does not match 11 models we have, we will play sound of the returned data"); index = Random.Range(0, prefabs.Count); } currentLL = ld; currentPrefab = Instantiate(prefabs[index]); currentPrefab.GetComponent <MazeLetterBuilder>().build(() => { if (!isTutorialMode) { MazeConfiguration.Instance.Context.GetAudioManager().PlayVocabularyData( ld, soundType: MazeConfiguration.Instance.GetVocabularySoundType() ); } foreach (Transform child in currentPrefab.transform) { if (child.name == "Mazecharacter") { currentCharacter = child.GetComponent <MazeCharacter>(); } else if (child.name == "HandTutorial") { currentTutorial = child.GetComponent <HandTutorial>(); } } currentCharacter.gameObject.SetActive(false); currentMazeLetter = currentPrefab.GetComponentInChildren <MazeLetter>(); }); }
public void SetQuestionText(LL_WordData word, LL_LetterData markedLetter, Color color) { string text = ArabicAlphabetHelper.ProcessArabicString(word.Data.Arabic); var parts = ArabicAlphabetHelper.FindLetter(AppManager.I.DB, word.Data, markedLetter.Data, false); if (parts.Count > 0) { text = ArabicTextUtilities.GetWordWithMarkedLetterText(word.Data, parts[0], color, ArabicTextUtilities.MarkType.SingleLetter); } letter.Init(word, text, 1.3f); }
void BuildTutorialLetter() { LL_LetterData LLdata = new LL_LetterData(AppManager.I.DB.GetLetterDataById("beh")); game.tutorialLetter = Object.Instantiate(game.letterPrefab); game.tutorialLetter.SetActive(true); // HACK fix for the automatic reset of the color after update at Unity 5.4.2 game.tutorialLetter.GetComponent <LivingLetterController>().Label.color = Color.white; game.tutorialLetter.GetComponent <LivingLetterController>().Init(LLdata); game.tutorialLetter.GetComponent <ColorTickle_LLController>().movingToDestination = false; }
public void SetQuestionText(LL_WordData word, LL_LetterData markedLetter, Color color) { string text = LanguageSwitcher.LearningHelper.ProcessString(word.Data.Text); var parts = LanguageSwitcher.LearningHelper.FindLetter(AppManager.I.DB, word.Data, markedLetter.Data, LetterEqualityStrictness.Letter); if (parts.Count > 0) { text = LanguageSwitcher.LearningHelper.GetWordWithMarkedLetterText(word.Data, parts[0], color, MarkType.SingleLetter); } letter.Init(word, text, 1.3f); }
public void spawnLetteAtTube() { int index = UnityEngine.Random.Range(0, allLetters.Count); LL_LetterData ld = (LL_LetterData)allLetters[index]; allLetters.RemoveAt(index); //check which tube to activate currentTube = "ABCD".IndexOf(ld.Data.SoundZone); currentLetter = letterManager.spawnLetter(ld); currentLetter.MoveBy(new UnityEngine.Vector3(-11, 0, 0), 1.8f); }
ArabicAlphabetHelper.ArabicStringPart RemoveLetterFromQuestion(LL_LetterData letter) { LL_WordData word = (LL_WordData)m_oCurrQuestionPack.GetQuestion(); LivingLetterController letterView = m_aoCurrentQuestionScene[0].GetComponent <LetterBehaviour>().mLetter; var parts = ArabicAlphabetHelper.FindLetter(AppManager.I.DB, word.Data, letter.Data, true); var partToRemove = parts[0]; letterView.Label.text = ArabicAlphabetHelper.GetWordWithMissingLetterText(word.Data, partToRemove, mk_sRemovedLetterChar); return(partToRemove); }
private IEnumerator SpawnLettersCoroutine(List <ILivingLetterData> lettersToSpawn, Action spawnOverCallback) { PlayCartoonFightSfx(); yield return(new WaitForSeconds(1)); List <int> indices = new List <int>(); for (int i = 0; i < lettersToSpawn.Count; i++) { indices.Add(i); } bool throwLetterToTheRight = Random.Range(1, 40) % 2 == 0; bool spawnLettersInOrder = MixedLettersGame.instance.Difficulty == MixedLettersGame.MixedLettersDifficulty.VeryEasy; int numDegreesOfRotation = GetNumDegreesOfRotation(); for (int i = 0; i < lettersToSpawn.Count; i++) { int indexToSpawn = spawnLettersInOrder ? i : indices[Random.Range(0, indices.Count)]; indices.Remove(indexToSpawn); LL_LetterData letterToSpawn = (LL_LetterData)lettersToSpawn[indexToSpawn]; SeparateLetterController separateLetterController = separateLetterControllers[i]; separateLetterController.Enable(); separateLetterController.SetPosition(transform.position, false); separateLetterController.SetLetter(letterToSpawn); separateLetterController.SetRotation(new Vector3(0, 0, Random.Range(0, numDegreesOfRotation + 1) * -90)); separateLetterController.SetIsKinematic(false); separateLetterController.SetCorrectDropZone(MixedLettersGame.instance.dropZoneControllers[indexToSpawn]); MixedLettersGame.instance.dropZoneControllers[indexToSpawn].correctLetter = separateLetterController; separateLetterController.SetIsSubjectOfTutorial(MixedLettersGame.instance.roundNumber == 0 && indexToSpawn == 0 && MixedLettersGame.instance.TutorialEnabled); separateLetterController.AddForce(new Vector3(throwLetterToTheRight ? Random.Range(2f, 6f) : Random.Range(-6f, -2f), Constants.GRAVITY.y * -0.45f), ForceMode.VelocityChange); throwLetterToTheRight = !throwLetterToTheRight; MixedLettersConfiguration.Instance.Context.GetAudioManager().PlaySound(Sfx.ThrowObj); MixedLettersConfiguration.Instance.Context.GetAudioManager().PlayVocabularyData(letterToSpawn); yield return(new WaitForSeconds(0.75f)); } yield return(new WaitForSeconds(1)); audioSource.Stop(); spawnOverCallback.Invoke(); }
StringPart RemoveLetterFromQuestion(LL_LetterData letter) { LL_WordData word = (LL_WordData)m_oCurrQuestionPack.GetQuestion(); LivingLetterController letterView = m_aoCurrentQuestionScene[0].GetComponent <LetterBehaviour>().mLetter; bool findSameForm = MissingLetterConfiguration.Instance.Variation == MissingLetterVariation.LetterForm; var parts = LanguageSwitcher.I.GetHelper(LanguageUse.Learning).FindLetter(AppManager.I.DB, word.Data, letter.Data, findSameForm ? LetterEqualityStrictness.WithActualForm : LetterEqualityStrictness.Letter); //Debug.LogWarning("Looking for letter " + letter.Id + " into word " + word.Id); var partToRemove = parts[0]; letterView.LabelRender.text = LanguageSwitcher.I.GetHelper(LanguageUse.Learning).GetWordWithMissingLetterText(word.Data, partToRemove); return(partToRemove); }
void UpdateWord() { if (!isActiveAndEnabled) { return; } string word = string.Empty; for (int i = 0; i < CompletedLetters.Count; ++i) { LL_LetterData letter = CompletedLetters[i]; word += letter.Data.GetChar(); } WordLabel.SetText(word, true); }
void RemoveLetterfromQuestion() { LL_WordData word = (LL_WordData)m_oCurrQuestionPack.GetQuestion(); var Letters = ArabicAlphabetHelper.ExtractLetterDataFromArabicWord(word.Data.Arabic); LL_LetterData letter = (LL_LetterData)m_oCurrQuestionPack.GetCorrectAnswers().ToList()[0]; int index = 0; for (; index < Letters.Count; ++index) { if (Letters[index].Id == letter.Id) { break; } } LetterObjectView tmp = m_aoCurrentQuestionScene[0].GetComponent <LetterBehaviour>().mLetter; tmp.Label.text = tmp.Label.text.Remove(index, 1); tmp.Label.text = tmp.Label.text.Insert(index, mk_sRemovedLetterChar); }
public ColorTickleLetterProvider() { m_oPacks = new List <IQuestionPack>(); //10 questions for (int i = 0; i < 10; i++) { List <ILivingLetterData> correctAnswers = new List <ILivingLetterData>(); List <ILivingLetterData> wrongAnswers = new List <ILivingLetterData>(); LL_LetterData _NewLetterData = AppManager.I.Teacher.GetRandomTestLetterLL(new LetterFilters(excludeDiacritics: true)); if (_NewLetterData == null) { return; } correctAnswers.Add(_NewLetterData); SampleQuestionPack currentPack = new SampleQuestionPack(_NewLetterData, wrongAnswers, correctAnswers); m_oPacks.Add(currentPack); } }
private IQuestion GenerateMissingLetterQuestion(ILivingLetterData data, ILivingLetterData letterToRemove) { var imageData = new LL_ImageData(data.Id); LL_WordData word = (LL_WordData)data; LL_LetterData letter = (LL_LetterData)letterToRemove; var Letters = ArabicAlphabetHelper.ExtractLetterDataFromArabicWord(word.Data.Arabic); int index = 0; for (; index < Letters.Count; ++index) { if (Letters[index].Id == letter.Id) { break; } } var wordGO = LivingLetterFactory.Instance.SpawnQuestion(word); wordGO.Label.text = wordGO.Label.text.Remove(index, 1); wordGO.Label.text = wordGO.Label.text.Insert(index, RemovedLetterChar); return(new ImageQuestion(wordGO, imageData)); }
private void FlashLetter(LL_LetterData letterToFlash) { var word = ((LL_WordData)question).Data; int numTimesLetterHasBeenFlashed = flashedLettersInLiWVariation.Count(x => x.Id == letterToFlash.Id); var letterPartToFlash = ArabicAlphabetHelper.FindLetter(AppManager.I.DB, word, letterToFlash.Data, false)[numTimesLetterHasBeenFlashed]; flashedLettersInLiWVariation.Add(letterToFlash); int toCharIndex = letterPartToFlash.toCharacterIndex; if (letterPartToFlash.fromCharacterIndex != letterPartToFlash.toCharacterIndex) { var hexCode = ArabicAlphabetHelper.GetHexUnicodeFromChar(word.Arabic[letterPartToFlash.toCharacterIndex]); if (hexCode == "0651") // Shaddah { toCharIndex -= 1; } } flashingTextCoroutine = ArabicTextUtilities.GetWordWithFlashingText(word, letterPartToFlash.fromCharacterIndex, toCharIndex, Color.green, FLASHING_TEXT_CYCLE_DURATION, int.MaxValue, text => { UIController.instance.SetText(text); }, true); }
public void Init(LL_LetterData _letterData) { LetterData = _letterData; LetterLabel.text = LetterData.TextForLivingLetter; }
public void EnterState() { if (game.showTutorial) { game.QuestionManager.crowd.MaxConcurrentLetters = 2; } else { game.QuestionManager.crowd.MaxConcurrentLetters = UnityEngine.Mathf.RoundToInt(4 + FastCrowdConfiguration.Instance.Difficulty * 4); } game.CurrentChallenge.Clear(); game.NoiseData.Clear(); var provider = FastCrowdConfiguration.Instance.Questions; var question = provider.GetNextQuestion(); game.CurrentQuestion = question; if (question == null) { game.SetCurrentState(game.EndState); return; } if (FastCrowdConfiguration.Instance.Variation == FastCrowdVariation.Letter) { LL_LetterData isolated = new LL_LetterData(question.GetQuestion().Id); isolated.Position = Db.LetterPosition.Isolated; game.CurrentChallenge.Add(isolated); string isolatedChar = isolated.Data.GetCharFixedForDisplay(Db.LetterPosition.Isolated); string initialChar = isolated.Data.GetCharFixedForDisplay(Db.LetterPosition.Initial); string medialChar = isolated.Data.GetCharFixedForDisplay(Db.LetterPosition.Medial); string finalChar = isolated.Data.GetCharFixedForDisplay(Db.LetterPosition.Final); for (int i = 0; i < 3; ++i) { LL_LetterData data = new LL_LetterData(question.GetQuestion().Id); if (i == 0) { if (string.IsNullOrEmpty(initialChar) || initialChar == isolatedChar) { continue; } data.Position = Db.LetterPosition.Initial; } else if (i == 1) { if (string.IsNullOrEmpty(medialChar) || medialChar == initialChar || medialChar == isolatedChar) { continue; } data.Position = Db.LetterPosition.Medial; } else if (i == 2) { if (string.IsNullOrEmpty(finalChar) || finalChar == medialChar || finalChar == initialChar || finalChar == isolatedChar) { continue; } data.Position = Db.LetterPosition.Final; } game.CurrentChallenge.Add(data); } if (game.CurrentChallenge.Count < 2) { game.SetCurrentState(this); return; } } else { foreach (var l in question.GetCorrectAnswers()) { game.CurrentChallenge.Add(l); } } //if (FastCrowdConfiguration.Instance.Variation != FastCrowdVariation.Alphabet) { // Add wrong data too if (question.GetWrongAnswers() != null) { foreach (var l in question.GetWrongAnswers()) { game.NoiseData.Add(l); } } } ++game.QuestionNumber; if (game.CurrentChallenge.Count > 0) { // Show question if (!game.ShowChallengePopupWidget(false, OnPopupCloseRequested)) { if (game.showTutorial) { game.SetCurrentState(game.TutorialState); } else { game.SetCurrentState(game.PlayState); } } } else { // no more questions game.SetCurrentState(game.EndState); } }
public DancingDotsQuestionsPack(LL_LetterData LLData) { question = correctAnswers = LLData; }
public void SetLetter(LL_LetterData letterData) { this.letterData = letterData; letterObjectView.Init(letterData); }
void initCurrentLetter() { currentCharacter = null; currentTutorial = null; TutorialUI.Clear(false); addLine(); //get a new letter: IQuestionPack newQuestionPack = MazeConfiguration.Instance.Questions.GetNextQuestion(); List <ILivingLetterData> ldList = (List <ILivingLetterData>)newQuestionPack.GetCorrectAnswers(); LL_LetterData ld = (LL_LetterData)ldList[0]; int index = -1; if (allLetters.ContainsKey(ld.Id)) { index = allLetters[ld.Id]; } if (index == -1) { Debug.Log("Letter got from Teacher is: " + ld.Id + " - does not match 11 models we have, we will play sound of the returned data"); index = UnityEngine.Random.Range(0, prefabs.Count); } currentLL = ld; currentPrefab = (GameObject)Instantiate(prefabs[index]); /*int index = allLetters.IndexOf(ld.Id); * * int found = -1; * for(int i =0; i < prefabs.Count; ++i) * { * if(prefabs[i].GetComponent<MazeLetterBuilder>().letterDataIndex == index) * { * found = i; * * break; * } * } * */ //currentPrefab.GetComponent<MazeLetterBuilder>().letterData = ld; currentPrefab.GetComponent <MazeLetterBuilder>().build(() => { if (!isTutorialMode) { MazeConfiguration.Instance.Context.GetAudioManager().PlayLetterData(ld); } foreach (Transform child in currentPrefab.transform) { if (child.name == "Mazecharacter") { currentCharacter = child.GetComponent <MazeCharacter>(); } else if (child.name == "HandTutorial") { currentTutorial = child.GetComponent <HandTutorial>(); } } currentCharacter.gameObject.SetActive(false); }); }
void UpdateWord(bool onlyIfActive = true) { if (onlyIfActive && !isActiveAndEnabled) { return; } string word = string.Empty; for (int i = 0; i < CompletedLetters.Count; ++i) { LL_LetterData letter = CompletedLetters[i]; if (splitMode) { if (i == 0) { word = $"<size=130%>{letter.Data.GetStringForDisplay(letter.Form, true)}</size>"; } else if (i == 1) { word += $"\n{letter.Data.GetStringForDisplay(letter.Form, true)}"; } else { word += $" {letter.Data.GetStringForDisplay(letter.Form, true)}"; } } else { if (letter.Id == " ") { word += invisiblePlaceholder; } else { word += letter.Data.GetStringForDisplay(letter.Form, true); } } } if (splitMode) { // Hack to fix space for (int i = CompletedLetters.Count; i < 4; ++i) { if (i == 0) { word = $"<size=130%>{invisiblePlaceholder}</size>"; } else if (i == 1) { word += $"\n{invisiblePlaceholder}"; } else { word += $" {invisiblePlaceholder}"; } } } WordLabel.SetTextUnfiltered(word); }
public SickLettersQuestionsPack(LL_LetterData LLData) { question = correctAnswers = LLData; }
private IEnumerator EndRound_Coroutine(bool win) { var winDelay1 = leftArea.celebrationDuration + 1.5f; var winDelay2 = 1.5f; var friendlyExitDelay = leftArea.friendlyExitDuration; var loseDelay = 1.5f; HideLetterPicker(); if (win) { Debug.Log("Win"); if (isTutorialRound) { Debug.Log("Cleared tutorial"); HideTutorialUI(); } List <LL_LetterData> letters = new List <LL_LetterData>(); foreach (var l in commonLetters) { LL_LetterData data = l as LL_LetterData; if (data != null) { letters.Add(data); } } livingLetter1.MarkLetters(letters, Color.green); livingLetter2.MarkLetters(letters, Color.green); GetConfiguration().Context.GetAudioManager().PlaySound(Sfx.Win); leftArea.Celebrate(); rightArea.Celebrate(); leftArea.HighFive(leftArea.celebrationDuration); rightArea.HighFive(rightArea.celebrationDuration); roundResultAnimator.ShowWin(); if (!isTutorialRound) { CurrentScore++; Context.GetLogManager().OnAnswered(wordData1, true); Context.GetLogManager().OnAnswered(wordData2, true); } // Exit yield return(new WaitForSeconds(winDelay1)); roundResultAnimator.Hide(); leftArea.MakeFriendlyExit(); rightArea.MakeFriendlyExit(); // Go to Friends Zone if (!isTutorialRound) { yield return(new WaitForSeconds(friendlyExitDelay)); leftArea.GoToFriendsZone(FriendsZonesManager.instance.currentZone); rightArea.GoToFriendsZone(FriendsZonesManager.instance.currentZone); FriendsZonesManager.instance.IncrementCurrentZone(); } // Hide answer Drop Zone yield return(new WaitForSeconds(winDelay2)); HideDropZone(); if (isTutorialRound) { isTutorialRound = false; IntroductionState.OnFinishedTutorial(); } else { NextRound(); } } else { Debug.Log("Lose"); Context.GetLogManager().OnAnswered(wordData1, false); Context.GetLogManager().OnAnswered(wordData2, false); GetConfiguration().Context.GetAudioManager().PlaySound(Sfx.Lose); yield return(new WaitForSeconds(loseDelay)); HideDropZone(); roundResultAnimator.ShowLose(); //TutorialUI.MarkNo(Vector3.zero, TutorialUI.MarkSize.Huge); NextRound(loseDuration); } }