using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class controlez : MonoBehaviour,Imatavel
{
//pega um gameobj que e uma coisa no jogo, e com o n de jogador
public GameObject jogador;
private movimentapersona movipersona;
private animacaopersona minhaanimacao;
private status statuszunbi;
public AudioClip sommortez;
private Vector3 posicaoAleatoria;
private Vector3 direcao;
private float contadorVagar;
private float tempoposizaoaleatoria = 5;
void Start()
{
jogador = GameObject.FindWithTag("jogador");
int geratipoz = Random.Range(1,28);
transform.GetChild(geratipoz).gameObject.SetActive(true);
gerazaleatorio();
minhaanimacao = GetComponent<animacaopersona>();
//recebe o script de movimentapersona
movipersona = GetComponent<movimentapersona>();
statuszunbi = GetComponent<status>();
}
void FixedUpdate()
{
//o distance pega 2 dire e calcula a distancia entre elas
float distancia = Vector3.Distance(transform.position,jogador.transform.position);
//pega a posicao do jg e o do zumb
direcao = jogador.transform.position - transform.position;
movipersona.rotaciona(direcao);
//magnitude significa o tamanho dele pega o tamanho e soma eles ex 1x 0y 0z o valor fica 1
minhaanimacao.movimentarjg(direcao.magnitude);
if(distancia > 15)
{
vagar();
}
else if(distancia > 2.5)
{
//pega a posicao do jg e o do zumb
direcao = jogador.transform.position - transform.position;
//pega a var do movimentapersona
movipersona.movimenta(direcao,statuszunbi.velocidade);
minhaanimacao.atacar(false);
}
else
{
minhaanimacao.atacar(true);
}
}
void vagar()
{
//ira contar no modo DECRESENTE
contadorVagar -= Time.deltaTime;
//ou seja se o contador for 0 ele ira fazer uma posizao aleatoria
if(contadorVagar <=0)
{
posicaoAleatoria = aleatorizaposicao();
contadorVagar += tempoposizaoaleatoria;
}
bool ficouperto = Vector3.Distance(transform.position,posicaoAleatoria) <= 0.05;
if(ficouperto == false)
{
direcao = posicaoAleatoria - transform.position;
//pega a var do movimentapersona
movipersona.movimenta(direcao,statuszunbi.velocidade);
}
}
//void n e sempre usado como def
//para ser return uma pos prezisa ser um vec
Vector3 aleatorizaposicao()
{
//insideunitysphere gera uma posicao num raio de 10
Vector3 posicao = Random.insideUnitSphere *10;
posicao += transform.position;
//a posicao dele sera a que ele esta em y
posicao.y = transform.position.y;
return posicao;
}
//atacajogador e um evento do animacao do zumbi
void atacajogador()
{
int dano = Random.Range(20,30);
jogador.GetComponent<controledojp>().tiravida(dano);
}
void gerazaleatorio()
{
//gera um n
int geratipoz = Random.Range(1,28);
//vai no obj que o script esta com o transform
//getchild pega um filho dele pasa o n do filho
//pega ele c o gameobj e ativa ele com setac
transform.GetChild(geratipoz).gameObject.SetActive(true);
}
public void tiravida(int dano)
{
statuszunbi.vida -= dano;
if(statuszunbi.vida <= 0)
{
morer();
}
}
public void morer()
{
//destroy para destruir
Destroy(gameObject);
controlaaudio.instancia.PlayOneShot(sommortez);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class animacaopersona : MonoBehaviour
{
private Animator animatordopersona;
void Awake()
{
animatordopersona = GetComponent<Animator>();
}
public void atacar (bool estado)
{
//entra no component animator,setbool para trocar um valor boleano pra o estado
animatordopersona.SetBool("ataca",estado);
}
public void movimentarjg(float valormovimento)
{
animatordopersona.SetFloat("movendo",valormovimento);
}
}