public void BotaoAtacar() { if (estado == EstadoDePersonagem.aPasseio && atk.IniciarAtaqueSePodeAtacar()) { if (CommandReader.VetorDirecao(Control).z > 0.5f) { atk.DisparaAtaquePraCima(); if (mov.NoChao) { animador.AnimaAtaqueAlto(); } else { animador.AnimaAtaqueAltoForaDoChao(); } } else if (CommandReader.VetorDirecao(Control).z < -0.25f && !mov.NoChao) { atk.DisparaAtaquePuloPraBaixo(); animador.AnimaAtaqueBaixo(); } else { atk.DisparaAtaqueComum(); if (mov.NoChao) { animador.AnimaAtaqueNormal(Mathf.Abs(mov.Velocity.x)); } else { animador.AnimaAtaqueNormalForaDoChao(); } } estado = EstadoDePersonagem.emAtk; } }
// Update is called once per frame void Update() { //Debug.DrawRay(transform.position, Vector3.up); switch (estado) { case CreatureState.parado: case CreatureState.emDano: case CreatureState.aplicandoGolpe: if (mov != null) { mov.AplicadorDeMovimentos(Vector3.zero, meuCriatureBase.CaracCriature.distanciaFundamentadora, transform); } else { SetaMov(); } break; case CreatureState.seguindo: case CreatureState.selvagem: ia.Update(); break; case CreatureState.aPasseio: case CreatureState.emLuta: Vector3 dir = Vector3.zero; if (comandR != null) { dir = comandR.VetorDirecao(); if (estado == CreatureState.emLuta) { dir = comandR.DirDeEixos(); dir = direcaoInduzida(dir.x, dir.z); } else { dir = comandR.VetorDirecao(); } } if (mov == null) { SetaMov(); } else { int temStatus = StatusTemporarioBase.ContemStatus(TipoStatus.amedrontado, meuCriatureBase); if (temStatus > -1) { dir *= 1 / (float)meuCriatureBase.StatusTemporarios[temStatus].Quantificador; } if (!GameController.g.HudM.MenuDePause.EmPause) { mov.AplicadorDeMovimentos(dir, meuCriatureBase.CaracCriature.distanciaFundamentadora, transform); } } break; } }
// Update is called once per frame public void Update(Controlador controlador, int pontosDeMana, bool noChao, DadosDoJogador dados) { if (CommandReader.PressionadoBotao(2, controlador) && noChao) { if (!particulaDaCura.activeSelf) { tempoEmRecuperacao -= Time.deltaTime; } if (tempoEmRecuperacao < 0) { TempoPressionado += Time.deltaTime; if (EmTempoDeRecarga && pontosDeMana >= custoParaRecarga) { if (!particulaDaCura.activeSelf) { EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, somDoIniciaCura)); } particulaDaCura.SetActive(true); } else if (pontosDeMana < custoParaRecarga) { tempoEmRecuperacao = coolDownRecharge; //som de não tem magia } if (TempoPressionado > tempoParaRecarga) { TempoPressionado = 0; tempoEmRecuperacao = coolDownRecharge; particulaDaCura.SetActive(false); VerifiqueRecarga(pontosDeMana); } } } else if (!CommandReader.PressionadoBotao(2, controlador)) { tempoEmRecuperacao -= Time.deltaTime; } if (CommandReader.ButtonUp(2, controlador)) { if (dados.TemDownArrowJump && CommandReader.VetorDirecao(controlador).z < -0.25f && !noChao) { VerifiqueDownArrowJump(pontosDeMana); } else if (TempoPressionado > tempoDaParticula) { tempoEmRecuperacao = coolDownRecharge; EventAgregator.Publish(new StandardSendGameEvent(null, EventKey.curaCancelada)); } else { if (tempoEmRecuperacao <= -1 && dados.TemMagicAttack) { VerifiqueMagicAttack(pontosDeMana); } } TempoPressionado = 0; particulaDaCura.SetActive(false); } }
// Update is called once per frame void Update() { piscaI.Update(); atk.AttackIntervalUpdate(); if (Control != Controlador.nulo) { switch (estado) { case EstadoDePersonagem.aPasseio: #region aPasseio bool noChao = mov.NoChao; Vector3 V = CommandReader.VetorDirecao(Control); mov.AplicadorDeMovimentos(V, CommandReader.ButtonDown(1, Control), dados.TemDoubleJump); if (V.z <= 0.75f) { animador.EfetuarAnimacao(Mathf.Abs(mov.Velocity.x), !noChao); } atk.UpdateAttack(); if (CommandReader.ButtonDown(0, Control)) { BotaoAtacar(); } magic.Update(Control, Dados.PontosDeMana, noChao, dados); if (magic.EmTempoDeRecarga && magic.CustoParaRecarga <= Dados.PontosDeMana) { estado = EstadoDePersonagem.emCura; mov.AplicadorDeMovimentos(Vector3.zero, false, false); } if (dados.TemDash && dash.PodeDarDash(noChao) && CommandReader.ButtonDown(3, Control)) { dash.Start(Mathf.Sign(transform.localScale.x), noChao); estado = EstadoDePersonagem.inDash; } if (CommandReader.ButtonDown(4, Control)) { atk.ModificouCorDaEspada(-1, dados); } else if (CommandReader.ButtonDown(5, Control)) { atk.ModificouCorDaEspada(1, dados); } if (V.z > 0.75f && noChao) { mov.AplicadorDeMovimentos(Vector3.zero, false, false); animador.EfetuarAnimacao(0, !noChao); ActionManager.VerificaAcao(); } #endregion break; case EstadoDePersonagem.emCura: magic.Update(Control, Dados.PontosDeMana, mov.NoChao, dados); break; case EstadoDePersonagem.emAtk: #region emAtk if (!mov.NoChao) { mov.AplicadorDeMovimentos(CommandReader.VetorDirecao(Control), CommandReader.ButtonDown(1, Control), dados.TemDoubleJump); } else { mov.AplicadorDeMovimentos(Vector3.Lerp(mov.Velocity.normalized, Vector3.zero, 30 * Time.deltaTime)); } if (atk.UpdateAttack()) { estado = EstadoDePersonagem.aPasseio; } #endregion break; case EstadoDePersonagem.emDano: #region emDano if (emDano.Update(mov, CommandReader.VetorDirecao(Control))) { if (tDamage.agendado) { mov.AplicadorDeMovimentos(Vector3.zero); estado = EstadoDePersonagem.parado; tDamage.Iniciar(); } else { estado = EstadoDePersonagem.aPasseio; } } #endregion break; case EstadoDePersonagem.downArrowActive: #region downArrowActive if (!mov.NoChao) { piscaI.Start(0.5f, 4); mov.GravityScaled(250); } else { mov.AplicadorDeMovimentos(Vector3.zero, false, false); if (magic.FinalizaDownArrow(mov.NoChao)) { estado = EstadoDePersonagem.aPasseio; } } #endregion break; case EstadoDePersonagem.inDash: #region inDash if (dash.Update(Mathf.Sign(transform.localScale.x), Mathf.Sign(CommandReader.VetorDirecao(Control).x))) { estado = EstadoDePersonagem.aPasseio; } if (CommandReader.ButtonDown(0, Control)) { dash.RetornarAoEstadoDeEspera(); estado = EstadoDePersonagem.aPasseio; BotaoAtacar(); } #endregion break; case EstadoDePersonagem.inCheckPoint: #region inCheckPoint if (Mathf.Abs(CommandReader.VetorDirecao(GlobalController.g.Control).x) > 0.5f) { particulaSaiuDoDescanso.gameObject.SetActive(true); particulaSaiuDoDescanso.Play(); particulaDoDescanso.SetActive(false); estado = EstadoDePersonagem.aPasseio; EventAgregator.Publish(EventKey.checkPointExit, null); } #endregion break; case EstadoDePersonagem.derrotado: #region derrotado if (emDano.Update(mov, CommandReader.VetorDirecao(Control))) { mov.AplicadorDeMovimentos(Vector3.zero, false, false); particulaDoMorrendo.SetActive(true); if (derrota.Update()) { transform.position = dados.ultimoCheckPoint.Pos; dados.SetarVidaMax(); //dados.SetarManaMax(); GameController.g.MyKeys.ReviverInimigos(); SaveDatesManager.SalvarAtualizandoDados(dados.ultimoCheckPoint.nomesDasCenas); SceneLoader.IniciarCarregamento(SaveDatesManager.s.IndiceDoJogoAtualSelecionado, () => { estado = EstadoDePersonagem.aPasseio; EventAgregator.Publish(EventKey.requestShowControllers, null); derrota.DesligarLosangulo(); }); estado = EstadoDePersonagem.naoIniciado; } } #endregion break; case EstadoDePersonagem.movimentoRequerido: if (positionRequest.UpdateMove()) { mov.AplicadorDeMovimentos(Vector3.zero); estado = EstadoDePersonagem.parado; EventAgregator.Publish(new StandardGameEvent(positionRequest.Requisitor, EventKey.positionRequeredOk)); } break; } } }