public override void IniciaGolpe(GameObject G) { tempoDecorrido = 0; addView = false; gP = GolpePersonagem.RetornaGolpePersonagem(G, Nome); }
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; }
void Start() { gerente = GetComponent <CreatureManager>(); ParaliseNoTempo(); esseGolpe.IniciaGolpe(gameObject); tempoDecorrido -= GolpePersonagem.RetornaGolpePersonagem(gameObject, esseGolpe.Nome).TempoDeInstancia; }
public static Vector3 UseOEmissor(GameObject G, nomesGolpes nome) { GolpePersonagem gP = GolpePersonagem.RetornaGolpePersonagem(G, nome); if (GameController.g.estaEmLuta && G.name == "CriatureAtivo") { G.transform.rotation = Quaternion.LookRotation( GameController.g.InimigoAtivo.transform.position - G.transform.position ); } else if (GameController.g.estaEmLuta && G.name != "CriatureAtivo") { GameController.g.InimigoAtivo.IA.SuspendeNav(); } return(G.transform.Find(gP.Colisor.osso).position + G.transform.forward * (gP.DistanciaEmissora) + Vector3.up * gP.AcimaDoChao); }
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++; } } }
public static colisor pegueOColisor(GameObject G, nomesGolpes nomeColisor) { return(GolpePersonagem.RetornaGolpePersonagem(G, nomeColisor).Colisor); }