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