protected bool AtualizaUsoDesseItem(DoJogo particula) { switch (Estado) { case EstadoDeUsoDeItem.animandoBraco: if (!AnimaB.AnimaTroca(true)) { Estado = EstadoDeUsoDeItem.aplicandoItem; Manager.Mov.Animador.ResetaTroca(); AuxiliarDeInstancia.InstancieEDestrua(particula, CriatureAlvoDoItem.transform.position, 1); } break; case EstadoDeUsoDeItem.aplicandoItem: TempoDecorrido += Time.deltaTime; if (TempoDecorrido > TEMPO_DE_ANIMA_CURA_1) { Recuperacao(); GameController.g.HudM.AtualizaHudHeroi(CriatureAlvoDoItem.MeuCriatureBase); Estado = EstadoDeUsoDeItem.finalizaUsaItem; return(false); } break; case EstadoDeUsoDeItem.finalizaUsaItem: return(false); //break; case EstadoDeUsoDeItem.nulo: Debug.Log("alcançou estado nulo para " + ID.ToString()); break; } return(true); }
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; }
protected virtual bool AtualizaUsoDoPergaminho() { switch (Estado) { case EstadoDeUsoDeItem.selecaoDeItem: GameController.g.HudM.Menu_Basico.MudarOpcao(); if (GameController.g.CommandR.DisparaCancel()) { ActionManager.ModificarAcao(GameController.g.transform, null); GameController.g.HudM.Painel.EsconderMensagem(); GameController.g.HudM.Menu_Basico.FinalizarHud(); Estado = EstadoDeUsoDeItem.finalizaUsaItem; } else if (GameController.g.CommandR.DisparaAcao()) { OpcaoEscolhida(GameController.g.HudM.Menu_Basico.OpcaoEscolhida); } break; case EstadoDeUsoDeItem.animandoBraco: if (!AnimaB.AnimaTroca(true)) { Estado = EstadoDeUsoDeItem.aplicandoItem; Manager.Mov.Animador.ResetaTroca(); AuxiliarDeInstancia.InstancieEDestrua(Particula, GameController.g.Manager.CriatureAtivo.transform.position, 1); AplicaEfeito(GameController.g.Manager.Dados.CriaturesAtivos[opcaoEscolhida]); } break; case EstadoDeUsoDeItem.aplicandoItem: TempoDecorrido += Time.deltaTime; if (TempoDecorrido > TEMPO_DE_ANIMA_PARTICULAS) { AplicaEfeito(GameController.g.Manager.Dados.CriaturesAtivos[opcaoEscolhida]); } break; case EstadoDeUsoDeItem.finalizaUsaItem: return(false); } return(true); }
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; }
protected virtual void OpcaoEscolhida(int escolha) { if (Consumivel) { RetirarUmItem(GameController.g.Manager, this, 1); } GameController.g.HudM.Menu_Basico.FinalizarHud(); GameController.g.HudM.Painel.EsconderMensagem(); opcaoEscolhida = escolha; if (escolha == 0) { InicializacaoComum(GameController.g.Manager.gameObject, GameController.g.Manager.CriatureAtivo.transform); Estado = EstadoDeUsoDeItem.animandoBraco; } else { TempoDecorrido = 0; AuxiliarDeInstancia.InstancieEDestrua(Particula, GameController.g.Manager.transform.position, 1); Estado = EstadoDeUsoDeItem.aplicandoItem; } }
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++; } } }