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; }
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; } }