////---CHECAGENS DE COLISAO---//// void ChecaProfundidade() { estados.direcaoDaParede = 0; if (rotacionaCamera.Rotacionando()) { return; } if (AtrasDeAlgo()) { // if(log) // Debug.Log("Atras de algum objeto"); return; } Debug.DrawLine(trBaseM.position - (trBaseM.forward * profundidadeDeChecagem) + vetorIntensidadeVertical, trBaseM.position + (trBaseM.forward * profundidadeDeChecagem) + vetorIntensidadeVertical, Color.green, 0.01f); Debug.DrawLine(trMeio.position - trMeio.forward * profundidadeDeChecagem, trMeio.position + trMeio.forward * profundidadeDeChecagem, Color.green, 0.01f); Debug.DrawLine(trTopoM.position - trTopoM.forward * profundidadeDeChecagem, trTopoM.position + trTopoM.forward * profundidadeDeChecagem, Color.green, 0.01f); if (EstaCaindo() && (HaPlataformaEmProfundidade(trBaseM.position + vetorIntensidadeVertical) || HaPlataformaEmProfundidade(trBaseD.position + vetorIntensidadeVertical) || HaPlataformaEmProfundidade(trBaseE.position + vetorIntensidadeVertical))) { Transform trColisor = colisaoEmProfundidade.transform; Vector3 pontoDeColisao = colisaoEmProfundidade.point; if (log) { Debug.Log("Base colidiu com " + trColisor.name, trColisor); } // if(RetornaPontoMaisProximo(pontoDeColisao, tr.position).Equals(pontoDeColisao)) { // novaPos = pontoDeColisao + tr.forward * 0.5f; // AtualizaProfundidade(colisaoEmProfundidade.transform); // }else // { novaPos = pontoDeColisao + tr.forward * 0.5f; AtualizaProfundidade(trColisor); estados.HabilitaPulo(); } } if (ColidiuComAlgoNaDireita() || ColidiuComAlgoNaEsquerda()) { Transform trObjeto = colisaoEmProfundidade.transform; // Debug.Log(rb.velocity.x); if (trObjeto.CompareTag("Parede")) { estados.direcaoDaParede = RetornaLadoEmRelacaoAoPlayer(trObjeto.position); if (estados.noAr) { novaPos = colisaoEmProfundidade.point + tr.forward * 0.5f; AtualizaProfundidade(trObjeto); if (estados.ApertandoParaOsLados() || movimento.contTempoPraPularDaParede <= movimento.tempoMaximoAtePuloRapido) { estados.AtivaEstaNaParede(); } estados.Para(); return; } else { if (ApertandoParaOLadoDaParede()) { estados.Para(); return; } } } else { estados.DesabilitaEstaNaParede(); } } if (CabecaBateuEmAlgo()) { Transform trColisor = colisaoEmProfundidade.transform; Vector3 pontoDeColisao = colisaoEmProfundidade.point; if (RetornaPontoMaisProximo(pontoDeColisao, tr.position).Equals(pontoDeColisao)) { if (log) { Debug.Log("Topo colidiu com " + colisaoEmProfundidade.collider.name, colisaoEmProfundidade.transform); } novaPos = pontoDeColisao - tr.forward; if (!ColisaoOcorreuComObjetoAoFundo()) { AtualizaProfundidade(trColisor); } } } if (estados.naParede) { return; } if (estados.GetDirecao() == Definicoes.DIREITA) //movendo para a direita { Debug.DrawLine(trCentroD.position - trCentroD.forward * profundidadeDeChecagem, trCentroD.position + trCentroD.forward * profundidadeDeChecagem, Color.blue, 0.01f); if (ColidiuComAlgoNaDireita()) { Transform trObjetoDireita = colisaoEmProfundidade.transform; if (!ColisaoOcorreuComObjetoAoFundo()) { if (log) { Debug.Log("Colisao nao ocorreu ao fundo ", trObjetoDireita); } if (ColidiuComAlgoNaEsquerda()) { if (!trObjetoDireita.Equals(colisaoEmProfundidade.transform)) { if (log) { Debug.Log("Bloqueio a frente ", trObjetoDireita); } Vector3 colisorMaisProximoDaCamera = RetornaPontoMaisProximo(trObjetoDireita.position, colisaoEmProfundidade.transform.position); novaPos = colisorMaisProximoDaCamera - tr.forward * 1.5f; if (colisorMaisProximoDaCamera == trObjetoDireita.position) { AtualizaProfundidade(trObjetoDireita); if (trObjetoDireita.CompareTag("Parede")) { estados.AtivaEstaNaParede(); return; } } else { AtualizaProfundidade(colisaoEmProfundidade.transform); if (colisaoEmProfundidade.transform.CompareTag("Parede")) { estados.AtivaEstaNaParede(); return; } } estados.Para(); } else { estados.Move(); } } else { if (log) { Debug.Log("Bloqueio a direita ", trObjetoDireita); } if (HaChaoNoPonto(colisaoEmProfundidade.point)) { novaPos = trObjetoDireita.position - tr.forward * 1.5f; AtualizaProfundidade(trObjetoDireita); estados.Move(); movimento.DefineNovoEixo(); } else { estados.Para(); movimento.ZeraEixo(Vector3.right); rb.velocity = new Vector3(0, rb.velocity.y, rb.velocity.z); } } } else { estados.Move(); } } else { estados.Move(); estados.DesabilitaEstaNaParede(); movimento.DefineNovoEixo(); } } else if (estados.GetDirecao() == Definicoes.ESQUERDA) //movendo para a esquerda { Debug.DrawLine(trCentroE.position - trCentroE.forward * profundidadeDeChecagem, trCentroE.position + trCentroE.forward * profundidadeDeChecagem, Color.blue, 0.01f); if (ColidiuComAlgoNaEsquerda()) { Transform trObjetoEsquerda = colisaoEmProfundidade.transform; if (!ColisaoOcorreuComObjetoAoFundo()) { if (log) { Debug.Log("Colisao nao ocorreu ao fundo ", trObjetoEsquerda); } if (ColidiuComAlgoNaDireita()) { if (!trObjetoEsquerda.Equals(colisaoEmProfundidade.transform)) { if (log) { Debug.Log("Bloqueio a frente ", trObjetoEsquerda); } Vector3 colisorMaisProximoDaCamera = RetornaPontoMaisProximo(trObjetoEsquerda.position, colisaoEmProfundidade.transform.position); novaPos = colisorMaisProximoDaCamera - tr.forward * 1.5f; if (colisorMaisProximoDaCamera == trObjetoEsquerda.position) { AtualizaProfundidade(trObjetoEsquerda); if (trObjetoEsquerda.CompareTag("Parede")) { estados.AtivaEstaNaParede(); return; } } else { AtualizaProfundidade(colisaoEmProfundidade.transform); if (colisaoEmProfundidade.transform.CompareTag("Parede")) { estados.AtivaEstaNaParede(); return; } } estados.Para(); } else { estados.Move(); } } else { if (log) { Debug.Log("Bloqueio a esquerda ", trObjetoEsquerda); } if (HaChaoNoPonto(colisaoEmProfundidade.point)) { novaPos = trObjetoEsquerda.position - tr.forward * 1.5f; AtualizaProfundidade(trObjetoEsquerda); estados.Move(); movimento.DefineNovoEixo(); } else { estados.Para(); movimento.ZeraEixo(Vector3.right); rb.velocity = new Vector3(0, rb.velocity.y, rb.velocity.z); } } } else { estados.Move(); } } else { estados.Move(); estados.DesabilitaEstaNaParede(); movimento.DefineNovoEixo(); } } }