public void NuevoObjetivo(Atacable a) { if (!objetivosRegistrados.Contains(a)) { objetivosRegistrados.Add(a); } }
public void Atacar(Mirada mirada, int daño) { Debug.Log("Atacó"); DeterminarDirecciónAtaque(mirada); escala = AtacanteTransform.lossyScale; facingOffset = Vector2.Scale(offset * direcciónAtaque, escala); tamañoEscalado = Vector2.Scale(tamaño, escala); puntoA = (Vector2)AtacanteTransform.position + facingOffset - tamañoEscalado * 0.5f; puntoB = puntoA + tamañoEscalado; int hitCount = Physics2D.OverlapArea(puntoA, puntoB, filtroAtaque, AtaqueOverlapResults); for (int i = 0; i < hitCount; i++) { golpe = AtaqueOverlapResults[i]; Atacable objetivo = golpe.GetComponent <Atacable>(); if (objetivo) { Debug.Log("Dañó a " + objetivo.name); if (objetivo.atacable) { Instantiate(spark, objetivo.transform.position + new Vector3(0, 0, -0.5f), Quaternion.identity); //Desfase para proyectar la luz } daño = (int)Random.Range(daño * 0.5f, daño * 1.5f); objetivo.RecibirDanio(transform, daño); OnDamage?.Invoke(); } } }
// void Update() // { // if (!_att) OnEnable(); // } private void OnDisable() { if (_att != null) { _att.AlRecibirAtaqueClient -= Flash; _att = null; } }
IEnumerator Patrullar() { Wachin.Rifle = false; var offsetDePatrulla = Quaternion.Euler(0f, Random.value * 360f, 0f) * Vector3.right; var distOffsetDePatrulla = Random.value * (liderazgo ? liderazgo.rangoAutoAsociarPatrulla : 1f); var cambiarPosicionCuando = Time.time + Random.Range(cambiarPosicionCada[0], cambiarPosicionCada[1]); while (!_objetivo) { if (liderazgo) { if (Patrulla.Lider == this) { liderazgo.LiderarPatrulla(Patrulla); Wachin.PosBuscada = Patrulla.destinoPatrulla; } else { var newPos = Patrulla.PosLider + offsetDePatrulla * distOffsetDePatrulla; var hit = new NavMeshHit(); if (NavMesh.Raycast(Patrulla.PosLider, newPos, out hit, NavMesh.AllAreas)) { Wachin.PosBuscada = hit.position; } else Wachin.PosBuscada = newPos; } Wachin.MiraHacia = Wachin.PosBuscada; } if (Time.time >= cambiarPosicionCuando) { cambiarPosicionCuando = Time.time + Random.Range(cambiarPosicionCada[0], cambiarPosicionCada[1]); offsetDePatrulla = Quaternion.Euler(0f, Random.value * 360f, 0f) * offsetDePatrulla; distOffsetDePatrulla = Random.value * liderazgo.rangoAutoAsociarPatrulla; } var objetivoDePatrulla = Patrulla.TomarObjetivoRandom(); if (objetivoDePatrulla) { _objetivo = objetivoDePatrulla; } else { var nuevoObjetivo = VigilarPorNuevoObjetivo(); if (nuevoObjetivo) { Patrulla.NuevoObjetivo(_objetivo = nuevoObjetivo); yield break; } } yield return null; } }
private void OnEnable() { StartCoroutine(GameUtils.EsperarTrueLuegoHacerCallback( () => JugadorLocal, () => { if (JugadorLocal && JugadorLocal.Atacable) { (_att = JugadorLocal.Atacable).AlRecibirAtaqueClient += Flash; } } )); }
IEnumerator Combatir() { Wachin.Rifle = true; var distanciaPrudenteActual = Random.Range(distanciaPrudente[0], distanciaPrudente[1]); var offsetDePosDeAtaque = Quaternion.Euler(0f, Random.value * 360f, 0f) * Vector3.right * distanciaPrudenteActual; var cambiarPosicionCuando = Time.time + Random.Range(cambiarPosicionCada[0], cambiarPosicionCada[1]); var dispararCuando = Time.time + Random.Range(dispararCada[0], dispararCada[1]); var wachinObjetivo = _objetivo.GetComponent<WachinLogica>(); while (_objetivo) { if (Time.time >= cambiarPosicionCuando) { cambiarPosicionCuando = Time.time + Random.Range(cambiarPosicionCada[0], cambiarPosicionCada[1]); distanciaPrudenteActual = Random.Range(distanciaPrudente[0], distanciaPrudente[1]); offsetDePosDeAtaque = offsetDePosDeAtaque.normalized * distanciaPrudenteActual; offsetDePosDeAtaque = Quaternion.Euler(0f, Random.value * 360f, 0f) * offsetDePosDeAtaque; var nuevoObjetivo = VigilarPorNuevoObjetivo(); if (nuevoObjetivo) { Patrulla.NuevoObjetivo(nuevoObjetivo); } // var posibleNuevoObjetivo = Patrulla.TomarObjetivoRandom(); var posiblesNuevosObjetivos = Patrulla.objetivosRegistrados.Select(at => at.GetComponent<WachinLogica>()) .Where(wa => wa && !wa.Noqueade).ToArray(); if (posiblesNuevosObjetivos.Length > 0){ var posibleNuevoObjetivo = posiblesNuevosObjetivos[Random.Range(0, posiblesNuevosObjetivos.Length)]; if (posibleNuevoObjetivo) { _objetivo = posibleNuevoObjetivo.GetComponent<Atacable>(); wachinObjetivo = posibleNuevoObjetivo; } } } Wachin.MiraHacia = _objetivo.transform.position; var offUp = Wachin.Agent.height * Vector3.up * 0.5f; var attPos = _objetivo.transform.position + offUp; var posOfInterest = attPos + offsetDePosDeAtaque;//move to if (Physics.Linecast(attPos, posOfInterest, out hit, visionBlocker)) { Wachin.PosBuscada = hit.point; } else { Wachin.PosBuscada = posOfInterest;//_objetivo.transform.position+(transform.position-_objetivo.transform.position).normalized*distanciaPrudente; } if (Time.time >= dispararCuando && wachinObjetivo && !wachinObjetivo.Noqueade) { dispararCuando = Time.time + Random.Range(dispararCada[0], dispararCada[1]); posOfInterest = transform.position + offUp;//shoot from if (!Physics.Linecast(attPos, posOfInterest, out hit, visionBlocker)) { Wachin.ItemActivo.Activar(); } } yield return null; } }
public bool ObjetivoRegistrado(Atacable a) => objetivosRegistrados.Contains(a);