示例#1
0
    void VerifiqueSigaOuAtaque(GolpeBase GB, Atributos A)
    {
        if ((criatureDoJogador.transform.position - meuCriature.transform.position).magnitude
            >
            MOD_DISTANCIA_DE_ATAQUE *
            (GB.TempoDeMoveMax - GB.TempoDeMoveMin)
            )
        {
            int numStatus = StatusTemporarioBase.ContemStatus(TipoStatus.amedrontado, meuCriature.MeuCriatureBase);
            if (numStatus > -1)
            {
                siga.ModVelocidade = 1 / (float)meuCriature.MeuCriatureBase.StatusTemporarios[numStatus].Quantificador;
            }
            else
            {
                siga.ModVelocidade = 1;
            }

            siga.Update(criatureDoJogador.transform.position);
        }
        else
        {
            siga.PareAgora();
            Disparador(GB, A);
        }
    }
示例#2
0
    public override void AcaoDoItemConsumivel(CriatureBase C)
    {
        List <CriatureBase> meusC = GameController.g.Manager.Dados.CriaturesAtivos;

        StatusTemporarioBase[] meusStatus = GameController.g.ContStatus.StatusDoHeroi.ToArray();
        StatusTemporarioBase   sTb        = null;

        for (int i = 0; i < meusStatus.Length; i++)
        {
            Debug.Log(meusC.IndexOf(meusStatus[i].OAfetado) + " :" + meusC.IndexOf(C) + " : " + meusStatus[i].Dados.Tipo + " : " + qualStatusRemover);
            if (meusC.IndexOf(meusStatus[i].OAfetado) == meusC.IndexOf(C) && meusStatus[i].Dados.Tipo == qualStatusRemover)
            {
                sTb = meusStatus[i];
            }
        }

        if (sTb != null)
        {
            sTb.RetiraComponenteStatus();
        }
        else
        {
            Debug.Log("Status foi alcançado como nulo");
        }
    }
示例#3
0
    bool VerificaPodeUsarStatus(CriatureBase C)
    {
        Atributos A         = C.CaracCriature.meusAtributos;
        int       temStatus = StatusTemporarioBase.ContemStatus(qualStatusRemover, C);
        bool      vivo      = A.PV.Corrente > 0;

        return(vivo && temStatus > -1);
    }
示例#4
0
 void ModificaApresentacaoDoStatus()
 {
     if (criatureDoStatus.StatusTemporarios.Count > 0)
     {
         TipoStatus tipo = criatureDoStatus.StatusTemporarios[indiceDoStatus].Tipo;
         imgDoStatus.texture = GameController.g.El.RetornaMini(tipo);
         txDoStatus.text     = StatusTemporarioBase.NomeEmLinguas(tipo);
     }
 }
示例#5
0
    public static void VerificaInsereParticulaDeStatus(CreatureManager C)
    {
        for (int i = 0; i < GameController.g.ContStatus.StatusDoHeroi.Count; i++)
        {
            StatusTemporarioBase sTb = GameController.g.ContStatus.StatusDoHeroi[i];

            if (GameController.g.Manager.Dados.CriaturesAtivos.IndexOf(sTb.OAfetado)
                == GameController.g.Manager.Dados.CriaturesAtivos.IndexOf(C.MeuCriatureBase))
            {
                sTb.CDoAfetado = C;
                sTb.Start();
            }
        }
    }
示例#6
0
    protected override void EscolhiEmQuemUsar(int indice)
    {
        CriatureBase C = GameController.g.Manager.Dados.CriaturesAtivos[indice];
        Atributos    A = C.CaracCriature.meusAtributos;

        int  temStatus = StatusTemporarioBase.ContemStatus(qualStatusRemover, C);
        bool vivo      = A.PV.Corrente > 0;

        if (temStatus > -1 || !vivo)
        {
            EscolhiEmQuemUsar(indice,
                              vivo, true);
        }
        else
        {
            MensDeUsoDeItem.MensDeNaoPrecisaDesseItem(C.NomeEmLinguas);
        }
    }
示例#7
0
    public override void VerificaAplicaStatus(CriatureBase atacante, CreatureManager cDoAtacado)
    {
        StatusTemporarioBase S = new Fraco()
        {
            Dados = new DatesForTemporaryStatus()
            {
                Quantificador      = 2,
                TempoSignificativo = 250,
                Tipo = TipoStatus.fraco //trocavel
            },
            CDoAfetado = cDoAtacado,
            OAfetado   = cDoAtacado.MeuCriatureBase
        };

        int num = StatusTemporarioBase.ContemStatus(TipoStatus.fraco /*trocavel*/, cDoAtacado.MeuCriatureBase);

        AdicionaStatusSimples.InsereStatusSimples(cDoAtacado, S, num);

        Debug.Log("enfraqueceu");
    }
示例#8
0
    public override void VerificaAplicaStatus(CriatureBase atacante, CreatureManager cDoAtacado)
    {
        StatusTemporarioBase S = new Amedrontado()
        {
            Dados = new DatesForTemporaryStatus()
            {
                Quantificador      = 2,
                TempoSignificativo = 240,
                Tipo = TipoStatus.amedrontado
            },
            CDoAfetado = cDoAtacado,
            OAfetado   = cDoAtacado.MeuCriatureBase
        };

        int num = StatusTemporarioBase.ContemStatus(TipoStatus.amedrontado, cDoAtacado.MeuCriatureBase);

        AdicionaStatusSimples.InsereStatusSimples(cDoAtacado, S, num);

        Debug.Log("amedrontou");
    }
示例#9
0
    static void CalculaDano(CreatureManager doAtacado, GameObject atacante, IGolpeBase golpe)
    {
        float multiplicador = 1;

        for (int i = 0; i < doAtacado.MeuCriatureBase.CaracCriature.contraTipos.Length; i++)
        {
            if (golpe.Tipo.ToString() == doAtacado.MeuCriatureBase.CaracCriature.contraTipos[i].Nome)
            {
                multiplicador *= doAtacado.MeuCriatureBase.CaracCriature.contraTipos[i].Mod;
            }
        }

        CriatureBase cDoAtacante = atacante.GetComponent <CreatureManager>().MeuCriatureBase;
        Atributos    A           = cDoAtacante.CaracCriature.meusAtributos;

        int potenciaDoAtacante = (golpe.Caracteristica == caracGolpe.colisao)
            ?
                                 Mathf.RoundToInt(A.Ataque.Minimo + (A.Ataque.Corrente - A.Ataque.Minimo) * Random.Range(0.85f, 1))
            :
                                 Mathf.RoundToInt(A.Poder.Minimo + (A.Poder.Corrente - A.Poder.Minimo) * Random.Range(0.85f, 1));

        int numStatus = StatusTemporarioBase.ContemStatus(TipoStatus.fraco, cDoAtacante);

        if (numStatus > -1)
        {
            potenciaDoAtacante = (int)Mathf.Max(1 / cDoAtacante.StatusTemporarios[numStatus].Quantificador * potenciaDoAtacante, (A.Ataque.Minimo + A.Poder.Minimo) / 2);
            golpe.ModCorrente  = -(int)cDoAtacante.StatusTemporarios[numStatus].Quantificador;
        }
        else
        {
            golpe.ModCorrente = 0;
        }

        GolpePersonagem golpePersonagem = cDoAtacante.GerenteDeGolpes.ProcuraGolpeNaLista(cDoAtacante.NomeID, golpe.Nome);

        CalculoC(multiplicador, golpe, golpePersonagem, potenciaDoAtacante, doAtacado, cDoAtacante);

        golpe.VerificaAplicaStatus(cDoAtacante, doAtacado);
    }
    /*
     * public static void InserindoNovoStatus(CreatureManager levou, CriatureBase C, DatesForTemporaryStatus dadosDoStatus,bool eLoad = false)
     * {
     *  C.StatusTemporarios.Add(dadosDoStatus);
     *
     *
     *
     *  if (levou != null)
     *  {
     *
     *      if (levou.name == "CriatureAtivo")
     *      {
     *          GameController.g.ContStatus.AdicionaStatusAoHeroi(S);
     *      }
     *      else
     *      {
     *          GameController.g.ContStatus.AdicionaStatusAoInimigo(S);
     *
     *      }
     *  }
     *  else
     *      GameController.g.ContStatus.AdicionaStatusAoHeroi(S);
     * }*/

    public static void InsereStatus(CreatureManager levou, CriatureBase C, DatesForTemporaryStatus dadosDoStatus)
    {
        int numStatus = StatusTemporarioBase.ContemStatus(TipoStatus.envenenado, C);

        if (numStatus == -1)
        {
            StatusTemporarioBase S = new Envenenado()
            {
                Dados      = dadosDoStatus,
                CDoAfetado = levou,
                OAfetado   = C
            };

            AdicionaStatusSimples.InserindoNovoStatus(levou, C, S);
            //InserindoNovoStatus(levou, C, dadosDoStatus);
        }
        else
        {
            DatesForTemporaryStatus d = C.StatusTemporarios[numStatus];
            d.Quantificador       = Mathf.Max(dadosDoStatus.Quantificador, d.Quantificador + 1);
            d.TempoSignificativo *= (14f / 15f);
        }
    }
示例#11
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;
        }
    }