using System.Collections; using System.Collections.Generic; using UnityEngine; public class ControlaZumbi : MonoBehaviour, IMatavel {
public GameObject jogador;
private Status statusInimigo;
private MovimentoPersonagens meuMovimentoPersonagem;
private AnimacaoPersonagem AnimacaoInimigo;
public AudioClip SomDeMorte;
private Vector3 PosicaoAleatoria;
private Vector3 direcao;
private float ContadorVagar;
private float tempodeposicoes = 4;
private float GerarKitMedico = 0.1f;
public GameObject KitMedicoPrefab;
private BarraVida scriptBarraVida;
public GeradorZumbis meuGerador;
// Use this for inicialization
void Start()
{
jogador = GameObject.FindWithTag("jogador");
AnimacaoInimigo = GetComponent<AnimacaoPersonagem> ();
meuMovimentoPersonagem = GetComponent<MovimentoPersonagens>();
AleatorizarZumbis();
statusInimigo = GetComponent<Status>();
scriptBarraVida = GameObject.FindObjectOfType(typeof(BarraVida)) as BarraVida;
}
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, jogador.transform.position);
meuMovimentoPersonagem.Rotacionar(direcao);
AnimacaoInimigo.Movimentar(direcao.magnitude);
if(distancia > 15)
{
Vagar ();
}
else if (distancia > 2.5)
{
direcao = jogador.transform.position - transform.position;
meuMovimentoPersonagem.Movimentar(direcao, statusInimigo.Velocidade);
AnimacaoInimigo.Atacar(false);
}
else
{
direcao = jogador.transform.position - transform.position;
AnimacaoInimigo.Atacar(true);
}
}
void Vagar()
{
ContadorVagar -= Time.deltaTime;
if(ContadorVagar <= 0)
{
PosicaoAleatoria = AleatorizarPosicao();
ContadorVagar += tempodeposicoes + Random.Range (-1f, 1f);
}
bool ficouperto = Vector3.Distance(transform.position, PosicaoAleatoria) <= 0.05;
if (ficouperto == false)
{
direcao = PosicaoAleatoria - transform.position;
meuMovimentoPersonagem.Movimentar(direcao, statusInimigo.Velocidade);
}
}
Vector3 AleatorizarPosicao()
{
Vector3 posicao = Random.insideUnitSphere * 10;
posicao += transform.position;
posicao.y = transform.position.y;
return posicao;
}
void AtacaJogador()
{
int dano = Random .Range(20, 30);
jogador.GetComponent<ControlaJogador>().TomarDano(dano);
}
void AleatorizarZumbis ()
{
int geraTipoZumbi = Random.Range(1, 28);
transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
}
public void TomarDano(int dano)
{
statusInimigo.Vida -= dano;
if (statusInimigo.Vida <= 0)
{
Morrer();
}
}
public void Morrer()
{
Destroy(gameObject, 2 );
AnimacaoInimigo.Morrer();
meuMovimentoPersonagem.Morrer();
this.enabled = false;
ControlaAudio.instancia.PlayOneShot(SomDeMorte);
GeracaoKitMedico (GerarKitMedico);
scriptBarraVida.QuantidadeDeZumbis();
meuGerador.DiminuirQuantidadeDeZumbisVivos();
}
void GeracaoKitMedico (float porcentagemGeracao)
{
if (Random.value <= porcentagemGeracao)
{
Instantiate(KitMedicoPrefab, transform.position, Quaternion.identity);
}
}
}