Beispiel #1
0
    void Start()
    {
        playerAnimator        = GetComponent <Animator>();
        playerRB              = GetComponent <Rigidbody2D>();
        sRender               = GetComponent <SpriteRenderer>();
        _gameController       = FindObjectOfType(typeof(GameController)) as GameController;
        _controllerFase       = FindObjectOfType(typeof(ControllerFase)) as ControllerFase;
        _inimigo              = FindObjectOfType(typeof(Inimigo)) as Inimigo;
        _inimigoArqueiro      = FindObjectOfType(typeof(InimigoArqueiro)) as InimigoArqueiro;
        _painelFaseIncompleta = FindObjectOfType(typeof(PainelFaseIncompleta)) as PainelFaseIncompleta;

        x = transform.localScale.x;

        passeiFase = false;

        estaMorto          = false;
        ativPainelPosMorte = false;
        tomeiHit           = false;
        vidaPlayer         = 1;
    }
Beispiel #2
0
    private void FixedUpdate()
    {
        Grounded = Physics2D.OverlapCircle(groundCheck.position, 0.02f, oqueEhChao);//esse teste so deve acontecer se houver uma colisao com a layer Ground

        if (!Grounded)
        {
            groundedTravado++;
        }
        else if (Grounded)
        {
            groundedTravado = 0;                    //ESSES DOIS IFS NECESSITAM DE MAIS TESTES MAIS A FRENTE DO PROJETO
        }
        if (groundedTravado == 50)
        {
            StartCoroutine(DestravarPlayer());
        }

        if (validarConclusaoFase)
        {
            //qtdBlocosCadaParte não pode ser igual a 0 pois assim entraria no if abaixo no inicio das fases antes mesmo do usuário selecionar os seus blocos
            if (qtdBlocosCadaParteFase == 0)//garante que nao entrara no if abaixo quando nao tiver blocos na area de trabalho
            {
                qtdBlocosUsados = -1;
            }
            else
            {
                qtdBlocosUsados      = qtdBlocosCadaParteFase; //qtdBlocosCadaParteFase a quantidade de blocos utilizados pelo usuário , tudo isso acontece através de uma função que está contida no onclick do botão executar
                validarConclusaoFase = false;                  //permite que quando qtdBlocosUsados já estiver preenchido não fique realizando esse if a cada frame(pois seria desnecessário), economizando assim desempenho
            }
        }

        //Verifica se a solução utilizado pelo usuário foi suficiente para concluir a fase, caso os blocos tenham se encerrado e mesmo assim o player nao tenha chegado ao final da fase, ou de cada parte da fase, é sinal que ele fracassou , portanto aparece o painelFaseIncompleta
        if (interpreteAcabou && Grounded && playerRB.velocity.x == 0 && playerRB.velocity.y == 0 && !passeiFase && !passeiParteFase && !_gameController.flagPerdiTentativa || ativPainelPosMorte)
        {
            _gameController.numTentativasFase--;
            if (_gameController.numTentativasFase < 1)
            {
                this.retirarVida();
                if (_gameController.numVida > 0)
                {
                    painelConclusaoFase.SetActive(true);
                    _gameController.SendMessage("adicionarErro");//quando o painel é ativado é sinal de que falhou na fase, por isso adiciona um erro dentro do array na posicao condizente com a fase
                }
                else
                {
                    _gameController.descricaoFase = "TelaGameOver";
                    SceneManager.LoadScene("TelaCarregamento");
                }

                qtdBlocosUsados = -1;
            }
            else
            {
                if (_painelFaseIncompleta == null)
                {
                    _painelFaseIncompleta = FindObjectOfType(typeof(PainelFaseIncompleta)) as PainelFaseIncompleta;
                }

                _painelFaseIncompleta.jogarNovamente(_gameController.idFaseEmExecucao);
                _gameController.flagPerdiTentativa = true;
            }


            interpreteAcabou   = false;
            ativPainelPosMorte = false;
            passeiParteFase    = false;

            //salvar no banco
            //  _controllerFase.EnviarHistorico("Fase" + _gameController.idFaseEmExecucao + "-Parte" + _gameController.parteFaseAtual + 1,_controllerFase.qtdMoedasColetadas, _controllerFase.estrelas,
            //                          _gameController.numVida, _gameController.ultima_fase_concluida, _gameController.id_usuario, _gameController.id_atividade);
        }
        if (vidaPlayer <= 0 && !estaMorto)
        {
            playerAnimator.SetInteger("idAnimation", 3);
            StartCoroutine("mortePlayer");
            estaMorto = true;//vai definir que o player esta morto e portanto assim o painel de fase incompleta sera ativado
            //DEPOIS VAI PARA O INTERPRETE E CHAMAR O PAINEL DE FASE INCOMPLETA
        }
        if (estaMorto)
        {
            playerRB.velocity = new Vector2(0, 0);
            playerAnimator.SetInteger("idAnimation", 3);//fixa o idAnimation do animator em 3 para que ao morrer ele trave na animacao de morte, para que nenhuma outra aconteca
        }

        if (tomeiHit)
        {
            StartCoroutine("habilitarNovoHit");//se após tomar dano o player ainda estiver vivo , apos 5 segundos é habilitado novamente a tomada de hit;
        }
    }