protected void instanciaEletricidade(GameObject G, Vector3 paraOnde, float tempoMax = 10)
    {
        GolpePersonagem golpeP = GolpePersonagem.RetornaGolpePersonagem(G, Nome);

        if (golpeP.TempoDeInstancia > 0)
        {
            carac.posInicial = Emissor.UseOEmissor(G, Nome);
        }

        GameObject KY  = AuxiliarDeInstancia.InstancieEDestrua(DoJogo.raioEletrico, carac.posInicial, DirDeREpulsao, TempoDeDestroy);
        Transform  KXY = KY.transform.GetChild(0);

        MonoBehaviour.Destroy(KXY.gameObject, 4.9f);

        KXY.parent        = G.transform.Find(golpeP.Colisor.osso).transform;
        KXY.localPosition = Vector3.zero;
        projeteis.Add(KY.transform);
        MbProjetilEletrico proj = KY.transform.GetChild(2).gameObject.AddComponent <MbProjetilEletrico>();

        proj.transform.position += golpeP.DistanciaEmissora * G.transform.forward + golpeP.AcimaDoChao * Vector3.up;
        proj.KXY                = KXY;
        proj.criatureAlvo       = acaoDeGolpeRegenerate.procureUmBomAlvo(G, 350);
        proj.forcaInicial       = paraOnde.normalized;
        proj.velocidadeProjetil = 9;
        proj.tempoMax           = tempoMax;
        proj.noImpacto          = carac.noImpacto.ToString();
        proj.dono               = G;
        proj.esseGolpe          = this;
        addView = true;
    }
 public override void IniciaGolpe(GameObject G)
 {
     addView          = false;
     tempoDecorrido   = 0;
     carac.posInicial = Emissor.UseOEmissor(G, this.Nome);
     DirDeREpulsao    = G.transform.forward;
     AnimadorCriature.AnimaAtaque(G, "emissor");
 }
    public static void AplicaProjetil(GameObject G, IGolpeBase ativa, CaracteristicasDeProjetil carac)
    {
        GolpePersonagem golpeP = GolpePersonagem.RetornaGolpePersonagem(G, ativa.Nome);

        if (golpeP.TempoDeInstancia > 0)
        {
            carac.posInicial = Emissor.UseOEmissor(G, ativa.Nome);
        }

        GameObject KY = AuxiliarDeInstancia.InstancieEDestrua(ativa.Nome, carac.posInicial, ativa.DirDeREpulsao, ativa.TempoDeDestroy);

        ColisorDeDanoBase proj = null;

        switch (carac.tipo)
        {
        case TipoDoProjetil.rigido:
            proj = KY.AddComponent <ColisorDeDanoRigido>();
            break;

        case TipoDoProjetil.basico:
            proj = KY.AddComponent <ColisorDeDano>();
            break;

        case TipoDoProjetil.statusExpansivel:
            proj = KY.AddComponent <ColisorDeStatusExpansivel>();
            break;

        case TipoDoProjetil.direcional:
            ColisorDeDanoDirecional projD = KY.AddComponent <ColisorDeDanoDirecional>();
            projD.alvo = (G.name == "CriatureAtivo")
                    ? ((GameController.g.InimigoAtivo != null)? GameController.g.InimigoAtivo.gameObject: null)
                    : GameController.g.Manager.CriatureAtivo.gameObject;
            proj = projD;
            break;
        }

        proj.velocidadeProjetil = ativa.VelocidadeDeGolpe;
        proj.noImpacto          = carac.noImpacto.ToString();
        proj.dono      = G;
        proj.esseGolpe = ativa;
    }
Exemple #4
0
    public override void UpdateGolpe(GameObject G)
    {
        tempoDecorrido += Time.deltaTime;
        if (!addView)
        {
            GolpePersonagem golpeP = GolpePersonagem.RetornaGolpePersonagem(G, Nome);
            if (golpeP.TempoDeInstancia > 0)
            {
                posInicial = Emissor.UseOEmissor(G, Nome);
            }
            AuxiliarDeInstancia.InstancieEDestrua(Nome, posInicial, DirDeREpulsao, TempoDeDestroy);
            addView = true;
        }

        hit = new RaycastHit();

        Vector3 ort = Vector3.Cross(DirDeREpulsao, Vector3.up).normalized;

        float deslocadorInicial = tempoDecorrido > 1 ? tempoDecorrido : 1;
        float deslocadorFinal   = tempoDecorrido < 0.7f ? tempoDecorrido : 0.7f;

        if (tempoDecorrido < TempoDeDestroy)
        {
            Debug.DrawLine(posInicial + 25 * (deslocadorInicial - 1) * DirDeREpulsao, posInicial + DirDeREpulsao * 25 * deslocadorFinal, Color.red);
            Debug.DrawLine(
                posInicial + 25 * (deslocadorInicial - 1) * DirDeREpulsao + 0.25f * Vector3.up,
                posInicial + 0.25f * Vector3.up + DirDeREpulsao * 25 * deslocadorFinal,
                Color.red);
            Debug.DrawLine(
                posInicial + 25 * (deslocadorInicial - 1) * DirDeREpulsao - 0.25f * Vector3.up,
                posInicial - 0.25f * Vector3.up + DirDeREpulsao * 25 * deslocadorFinal,
                Color.red);
            Debug.DrawLine(
                posInicial + 25 * (deslocadorInicial - 1) * DirDeREpulsao - 0.25f * ort,
                posInicial - 0.25f * ort + DirDeREpulsao * 25 * deslocadorFinal,
                Color.red);


            if (Physics.Linecast(posInicial + 25 * (deslocadorInicial - 1) * DirDeREpulsao, posInicial + DirDeREpulsao * 25 * tempoDecorrido, out hit)
                ||
                Physics.Linecast(
                    posInicial + 25 * (deslocadorInicial - 1) * DirDeREpulsao - 0.25f * Vector3.up,
                    posInicial - 0.25f * Vector3.up + DirDeREpulsao * 25 * tempoDecorrido,
                    out hit)
                ||
                Physics.Linecast(
                    posInicial + 25 * (deslocadorInicial - 1) * DirDeREpulsao - 0.25f * ort,
                    posInicial - 0.25f * ort + DirDeREpulsao * 25 * tempoDecorrido,
                    out hit)
                ||
                Physics.Linecast(
                    posInicial + 25 * (deslocadorInicial - 1) * DirDeREpulsao + 0.25f * ort,
                    posInicial + 0.25f * ort + DirDeREpulsao * 25 * tempoDecorrido,
                    out hit)

                )
            {
                if (impactos % 10 == 0)
                {
                    GameObject Golpe   = GameController.g.El.retorna(DoJogo.impactoDeAgua);
                    Object     impacto = MonoBehaviour.Instantiate(Golpe, hit.point, Quaternion.identity);
                    MonoBehaviour.Destroy(impacto, 0.5f);

                    if (impactos == 0)
                    {
                        Dano.VerificaDano(hit.transform.gameObject, G, this);
                    }
                }
                impactos++;
            }
        }
    }