Exemplo n.º 1
0
    // 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();
                }
            }
        }
    }
Exemplo n.º 2
0
    // 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();
            }
        }
    }