public override BaseEntity SetTarget() { if (_attackedTarget != null && _attackedTarget.CanBeTarget()) { return(_attackedTarget); } else if (ActorProxy != null && ActorProxy.isTaunted) { ActorProxy.DisableBuffEffect(BuffType.Taunted); } if (ActorProxy == null) { return(null); } if (ActorProxy.isInAllyCamp) { var position = transform.position; var target = ActorProxy.GetEnemies().Where(e => e.ActorProxy.isInEnemyCamp) .OrderBy(e => (e.transform.position - position).sqrMagnitude).FirstOrDefault(); if (target != null) { return(target); } } var cols = Physics.OverlapSphere(transform.position, searchRange, targetLayer); Minion closestTarget = null; var distance = float.MaxValue; foreach (var col in cols) { var bs = col.GetComponentInParent <Minion>(); if (bs == null || !bs.CanBeTarget()) { continue; } var sqr = Vector3.SqrMagnitude(transform.position - col.transform.position); if (sqr < distance) { distance = sqr; closestTarget = bs; } } if (closestTarget != null) { return(closestTarget); } return(null); }
private Minion GetLongDistanceTarget() { var minions = ActorProxy.GetEnemies(); List <BaseEntity> list = new List <BaseEntity>(); float min = 0f; float max = 0f; var position = transform.position; foreach (var minion in minions) { if (minion == null) { continue; } float sqrDistance = Vector3.SqrMagnitude(minion.transform.position - position); if (list.Count == 0) { list.Add(minion); min = sqrDistance; max = sqrDistance; continue; } if (sqrDistance > max) { list.Add(minion); max = sqrDistance; } else if (sqrDistance < min) { list.Insert(0, minion); min = sqrDistance; } } if (list.Count > 0) { return(list[Random.Range(list.Count / 2, list.Count)] as Minion); } else { return(null); } }
public override IEnumerator Action(ActorProxy actorProxy) { var boss = (Boss5)actorProxy.baseEntity; boss.animator.SetTrigger(AnimationHash.Skill); yield return(new WaitForSeconds(1f)); for (int i = 0; i < 20; i++) { float x = Random.Range(-3.5f, 3.5f); float z = Random.Range(-5.5f, 5.5f); Vector3 startPos = new Vector3(x, 20f, z); var bullet = PoolManager.Get().ActivateObject(boss.obj_Skill.name, startPos); if (bullet != null) { bullet.DOMoveY(0, 0.5f).OnComplete(() => { PoolManager.Get().ActivateObject(boss.obj_SkillHit.name, bullet.position); bullet.GetComponent <PoolObjectAutoDeactivate>().Deactive(); if (actorProxy.isPlayingAI) { var enemies = actorProxy.GetEnemies(); foreach (var enemy in enemies) { enemy.ActorProxy.HitDamage(actorProxy.power * 0.1f); } } }); } yield return(new WaitForSeconds(0.1f)); } yield return(new WaitForSeconds(0.4f)); }