IEnumerator HaceDaño(StatsPersonajes stats, float retraso) //Creamos una corutina para hacer el daño, debido a que queremos que este se realice hasta que finalice la animación de ataque. { ManejadorMusica.instancia.Reproducir("Ataque Espada"); yield return(new WaitForSeconds(retraso)); //Esperemos unos segundos equivalente a la variable "retraso", y después, realizamos el proceso de daño. int miDaño = misStats.daño.ObtenerValor(); //Creo una variable que almacenará el daño de mi objeto. stats.RecibirDaño(miDaño); //Accede al método "RecibirDaño" del "Objetivo" que toma como argumento el daño de mi objeto. if (stats.saludActual <= 0) //Si la salud del enemigo es menor o igual a 0... { enCombate = false; //Entonces ya no estamos en combate (false). } }
IEnumerator EliminaEfectoHabilidad(StatsPersonajes statsobjetivo, int indiceHabilidad) //Corutina que elimina el efecto de la habilidad, después de que su duración (en segundos) ha pasado... { float duracion = habilidadesEnBarra[indiceHabilidad].ObtenerDuracionEfecto(); var parametrosHabilidad = new parametrosHabilidad(statsobjetivo); //Obtengo los parametros de mi objetivo. //Obtengo su duración al acceder a las propiedades de su clase (En mi arreglo "habilidades"). yield return(new WaitForSeconds(duracion)); //Establezco que después de los segundos de duración... habilidadesEnBarra[indiceHabilidad].EliminarEfecto(parametrosHabilidad); //Accedo al método "EliminarEfecto" que toma los parametros del objetivo. habilidadesEnBarra[indiceHabilidad].ejecutandose = false; //Establezco que mi habilidad ya no se está ejecutando. (Debido a que su efecto se ha disipado). habilidadesEnBarra[indiceHabilidad].iconoYaEstablecido = false; //Establece que mi icono NO está establecido, porque el efecto de la habilidad ya se eliminó. Destroy(iconosDuracionHabilidad[indiceHabilidad]); //Elimina el gráfico del efecto de habilidad. }
public void Atacar(StatsPersonajes objetivo) //Creo un método llamado "Atacar" que utilzia como argumento los stats de su objetivo. { if (cooldownAtaque <= 0f) //Si mi "cooldown" (Tiempo de espera entre ataques) es menor o igual a 0... { StartCoroutine(HaceDaño(objetivo, tiempoAnimacionAtacar)); //Iniciamos la corutina que genera el dañi, tomando como arg los stats del objetivo, y el tiempo que toma la animación de "Atacar" en realizarse. if (atacando != null) { atacando(); } cooldownAtaque = 3f / velocidadAtaque; //Restablezco el cooldown, y lo divido entre la velocidad del jugador. (A mayor velocidad del jugador, menor cooldown.) enCombate = true; tiempoUltimoAtaque = Time.time; } }
void Start() { iconosDuracionHabilidad = new GameObject[habilidadesEnBarra.Length]; //Establezco que el tamaño de mi arreglo de iconos de duración será igual al numero de elementos que haya en mi arreglo "habilidades". //Situación similar para los dos arreglos siguientes. coolDownHabilidades = new float[habilidadesEnBarra.Length]; duracionHabilidades = new float[habilidadesEnBarra.Length]; estaOcupado = false; ParametrosInicialesHabilidades(); statsJugador = GetComponent <StatsPersonajes>(); //Obtengo los stats del jugador. interaccionDelJugador = GetComponent <ControladorJugador>(); barraHabilidades.SetActive(false); //Y mi barra de habilidades estará desactivada. }
// Update is called once per frame void Update() { float distancia = Vector3.Distance(objetivo.position, transform.position); //Creamos una variable que almacena la distancia entre el objetivo y el enemigo. if (distancia <= radioAlerta) //Si la distancia es menor o igual al radio de alerta... { agente.SetDestination(objetivo.position); //Entonces, establecemos que el enemigo se desplace a la posición del jugador. if (distancia <= agente.stoppingDistance) //Si la distancia (entre el jugador y el enemigo) es menor o igual a la distancia a la que se detiene el enemigo... { //Atacarlo StatsPersonajes objetivoStats = objetivo.GetComponent <StatsPersonajes>(); //Obtiene los stats de su objetivo. if (objetivoStats != null) { combateEnemigo.Atacar(objetivoStats); //Ejecuta el método "Atacar" tomando como argumento las propiedades de su objetivo (Primordialmente, el jugador). } EncararObjetivo(); //Método que se encarga de modificar la rotación cuando el objetivo se encuentre demasiado cerca. } } }
private void Start() { misStats = GetComponent <StatsPersonajes>(); //Establezco que "misStats" es igual al componente "StatsPersonajes" de mi objeto. velocidadAtaque = misStats.velocidad.ObtenerValor(); //Obtengo la velocidad del pj. }
public parametrosHabilidad(StatsPersonajes objetivo) { this.objetivo = objetivo; this.armaduraBase = objetivo.armadura.ObtenerValor(); }
public StatsPersonajes misStats; //Variable que almacena los "Stats" de mi enemigo. private void Start() { jugadorAcceso = ManejadorJugador.instancia; //Almaceno los datos de mi jugador al igualar mi variable con la "instancia" de mi clase "ManejadorJugador". misStats = GetComponent <StatsPersonajes>(); //Obtengo los stats de mi enemigo, al obtener su componente ("StatsPersonajes"). }