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; }
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++; } } }