// Update is called once per frame void Update() { grammar.UpdateVisibleGramar(); TextStep.text = $"Etapa: {Step}"; if (!TutorialOk) { return; } if (Input.GetKeyDown(KeyCode.R)) { resetGame(); return; } if (Step == 0) { GameObject[] activeObjects = new GameObject[1]; activeObjects[0] = Aim; GameObject[] inactiveObjects = new GameObject[0]; if (utils.startTimer(activeObjects, inactiveObjects, TimerLabel, 3)) { return; } Target.SetActive(true); AmmunationController.GameEnable = true; changeStep(1); } //Step 1 - Selecionar uma regra para ser alterada if (Step == 1) { if (!setupStep) { grammar.SetHeaderRuleActive(); Description.text = "Atire no Alvo que tem mais de Duas Letras Maiúsculas."; setupStep = true; } int indexHeader = grammar.IsSomeHeaderSelected(); if (indexHeader != -1) { if (!grammar.selectHeaderHasMoreThanTwoVariables(indexHeader)) { //AVISO: Gramática não pode ser substituida grammar.SetHeaderNotSelected(); grammar.SetHeaderActive(); alertController.startTimer("Esse Alvo não tem mais de duas letras maiúsculas!"); return; } selectedHeader = indexHeader; grammar.SetHeaderRuleInactive(); grammar.SetHeaderNotSelected(); grammar.SetHeaderActive(); changeStep(2); } } //Step 2 - Selecionar uma variavel para ser alterada if (Step == 2) { if (!setupStep) { currentRule = grammar.SetRuleActive(selectedHeader); currentIndex = selectedHeader; setupStep = true; Description.text = "Atire em duas Letras maiúsculas para substituir."; GenericText.text = $"Nova Regra\n {grammar.newRuleName} -> ??"; } List <GameObject> selectedObjects = grammar.IsSomeRuleSelected(selectedHeader); if (selectedObjects.Count > 0) { if (currentReplaceVariable == null) { currentReplaceVariable = selectedObjects[0]; Description.text = "Selecione a segunda letra maiúscula para ser substituida."; GenericText.text = $"Nova Regra\n {grammar.newRuleName} -> {currentReplaceVariable.name}?"; } } if (selectedObjects.Count > 1) { currentReplaceVariable2 = selectedObjects[1]; if (grammar.CountTwoRulesIntoGrammar(currentReplaceVariable.name, currentReplaceVariable2.name) <= 1) { //Aviso: Esses simbolos não podem ser substituidos alertController.startTimer("Não existe essas letras em outras regras"); grammar.SetTargetRulesActive(selectedHeader); grammar.SetRuleNotSelected(selectedHeader); grammar.SetTargetRulesActiveAndNotSelectedAndFixPosition(selectedHeader); currentReplaceVariable = null; currentReplaceVariable2 = null; Description.text = ""; GenericText.text = ""; grammar.SetCurrentRuleInactive(currentIndex); changeStep(1); return; } changeStep(3); grammar.SetCurrentRuleInactive(currentIndex); } } //Step 3 - Selecionar quais as variaveis dentro desta nova variavel if (Step == 3) { if (IsFirstStepFinished()) { alertController.successMessage("Parabéns!! Você conseguiu finalizar a primeira etapa!"); if (utils.setTimeOut(3)) { return; } Cursor.visible = true; SceneManager.LoadScene("SuccessStage1"); return; } if (!setupStep) { Description.text = "Atire em outras regras que tenham as duas letras ."; GenericText.text = $"Nova Regra\n {grammar.newRuleName} -> {currentReplaceVariable.name}{currentReplaceVariable2.name}"; currentReplaceString = currentReplaceVariable.name; currentReplaceString2 = currentReplaceVariable2.name; grammar.replaceTwoRulesByDefaultRule(currentReplaceVariable, currentReplaceVariable2, selectedHeader); currentIndex = -1; selectedHeader = -1; grammar.SetHeaderRuleActive(); setupStep = true; } int indexHeader = grammar.IsSomeHeaderSelected(); if (indexHeader != -1) { GameObject rule1 = grammar.FindSymbolRulesByHeaderAndName(indexHeader, currentReplaceString); GameObject rule2 = grammar.FindSymbolRulesByHeaderAndName(indexHeader, currentReplaceString2); if (rule1 != null && rule2 != null) { grammar.replaceTwoRulesByDefaultRule(rule1, rule2, indexHeader); } else { alertController.startTimer("Está regra não tem as letras que selecionou"); grammar.SetHeaderNotSelected(); grammar.SetHeaderActive(); } } } }
// Update is called once per frame void Update() { if (!TutorialOk) { return; } if (Input.GetKeyDown(KeyCode.R)) { resetGame(); return; } if (Step == 0) { GameObject[] activeObjects = new GameObject[1]; activeObjects[0] = Target; GameObject[] inactiveObjects = new GameObject[0]; if (utils.startTimer(activeObjects, inactiveObjects, TimerLabel, 3)) { return; } Target.SetActive(true); AmmunationController.GameEnable = true; changeStep(1); } if (Step == 1) { if (!setupStep) { grammar.SetHeaderRuleActive(); Description.text = "Atire em uma Letra Maiúscula, que tenha letras mínusculas"; setupStep = true; } int indexHeader = grammar.IsSomeHeaderSelected(); if (indexHeader != -1) { if (!grammar.selectHeaderHasOneTerminal(indexHeader)) { //AVISO: Gramática não pode ser substituida grammar.SetHeaderNotSelected(); grammar.SetHeaderActive(); alertController.startTimer("Essa regra não tem uma letra minúscula!"); return; } selectedHeader = indexHeader; grammar.SetHeaderRuleInactive(); grammar.SetHeaderNotSelected(); grammar.SetHeaderActive(); changeStep(2); } } if (Step == 2) { if (!setupStep) { currentRule = grammar.SetRuleActive(selectedHeader); currentIndex = selectedHeader; Description.text = "Atire em uma letra minúscula para substituirmos"; setupStep = true; } List <GameObject> selectedObjects = grammar.IsSomeRuleSelected(selectedHeader); if (selectedObjects.Count > 0) { if (!char.IsLower(selectedObjects[0].name[0])) { alertController.startTimer("Essa letra não é minúscula!"); grammar.SetTargetRulesActive(selectedHeader); grammar.SetRuleNotSelected(selectedHeader); grammar.SetTargetRulesActiveAndNotSelectedAndFixPosition(selectedHeader); Description.text = ""; grammar.SetCurrentRuleInactive(currentIndex); changeStep(1); return; } if (grammar.findRuleWithOnlyTerminal(selectedObjects[0].name)) { //Aviso: Esses simbolos não podem ser substituidos alertController.startTimer("Esses simbolos já tem uma variável terminal"); grammar.SetTargetRulesActive(selectedHeader); grammar.SetRuleNotSelected(selectedHeader); grammar.SetTargetRulesActiveAndNotSelectedAndFixPosition(selectedHeader); Description.text = ""; grammar.SetCurrentRuleInactive(currentIndex); changeStep(1); return; } currentReplaceTerminal = selectedObjects[0]; changeStep(3); grammar.SetCurrentRuleInactive(currentIndex); } } if (Step == 3) { if (IsFirstStepFinished()) { alertController.successMessage("Parabéns!! Você conseguiu finalizar a segunda etapa!"); if (utils.setTimeOut(3)) { return; } Cursor.visible = true; SceneManager.LoadScene("SuccessStage2"); return; } if (!setupStep) { replaceName = currentReplaceTerminal.name; Description.text = "Atire nas regras que possuem a letra que atirou."; GenericText.text = $"Letra: {replaceName}"; currentReplaceVariable = grammar.replaceTerminalRuleByDefaultRule(currentReplaceTerminal, currentIndex); grammar.createNewHeaderWithOneRule(currentReplaceVariable.name, replaceName); grammar.FixPosition(selectedHeader); grammar.UpdateVisibleGramar(); grammar.SetHeaderRuleActive(); setupStep = true; } if (grammar.findRuleWithOnlyTerminal(replaceName) && !grammar.HasMoreThanTwoRulesHavingTerminal(replaceName)) { alertController.startTimer("Não tem mais nenhuma regra para selecionar, faça isso para a próxima"); grammar.SetHeaderRuleInactive(); grammar.SetHeaderNotSelected(); grammar.SetHeaderActive(); changeStep(1); return; } int indexHeader = grammar.IsSomeHeaderSelected(); if (indexHeader != -1) { if (grammar.AreHeadersEquals(currentReplaceVariable.name, indexHeader)) { alertController.startTimer("Está regra é a nova regra, escolha outra"); grammar.SetHeaderNotSelected(); grammar.SetHeaderActive(); return; } var obj = grammar.FindSymbolRulesByHeaderAndName(indexHeader, replaceName); if (obj == null) { alertController.startTimer("Está regra não tem a letra selecionada"); grammar.SetHeaderNotSelected(); grammar.SetHeaderActive(); return; } grammar.replaceTerminalRuleByVariable(obj, currentReplaceVariable.name, indexHeader); grammar.UpdateVisibleGramar(); grammar.SetHeaderRuleActive(); grammar.FixPosition(selectedHeader); grammar.FixPositionHeaders(); } } }