public bl_AICoverPoint GetCoverOnRadius(Transform target, float radius) { List <bl_AICoverPoint> list = new List <bl_AICoverPoint>(); for (int i = 0; i < AllCovers.Count; i++) { float dis = bl_UtilityHelper.Distance(target.position, AllCovers[i].transform.position); if (dis <= radius) { list.Add(AllCovers[i]); } } bl_AICoverPoint cp = null; if (list.Count > 0) { cp = list[Random.Range(0, list.Count)]; } if (cp == null) { cp = AllCovers[Random.Range(0, AllCovers.Count)]; } return(cp); }
/// <summary> /// /// </summary> bool Cover(bool overridePoint, bool toTarget = false) { Transform t = (!toTarget) ? transform : Target; if (overridePoint) { if (Agent.pathStatus == NavMeshPathStatus.PathComplete) { //look for another cover point CoverPoint = CoverManager.GetCloseCover(t, CoverPoint); } } else { //look for a near cover point CoverPoint = CoverManager.GetCloseCover(t); } if (CoverPoint != null) { Agent.stoppingDistance = 0.1f; Speed = playerInFront ? defaultSpeed : 6; Agent.SetDestination(CoverPoint.transform.position); AgentState = AIAgentState.Covering; CoverTime = time; AIWeapon.Fire(bl_AIShooterWeapon.FireReason.OnMove); return(true); } else { //if there are not a near cover point if (Target != null) { //follow target Agent.SetDestination(Target.position); Speed = playerInFront ? defaultSpeed : 7; personal = true; AgentState = AIAgentState.Searching; } else { CoverPoint = CoverManager.GetCloseCoverForced(transform); Agent.SetDestination(CoverPoint.transform.position); Speed = defaultSpeed; } return(false); } }
public bl_AICoverPoint GetCloseCover(Transform target, bl_AICoverPoint overrdidePoint) { bl_AICoverPoint cover = null; float d = MaxDistance; for (int i = 0; i < AllCovers.Count; i++) { float dis = bl_UtilityHelper.Distance(target.position, AllCovers[i].transform.position); if (dis < MaxDistance && dis < d && AllCovers[i] != overrdidePoint) { d = dis; cover = AllCovers[i]; } } return(cover); }
public bl_AICoverPoint GetCloseCoverForced(Transform target) { bl_AICoverPoint cover = null; float d = 100000; for (int i = 0; i < AllCovers.Count; i++) { float dis = bl_UtilityHelper.Distance(target.position, AllCovers[i].transform.position); if (dis < d) { d = dis; cover = AllCovers[i]; } } return(cover); }
public static void Register(bl_AICoverPoint co) { AllCovers.Add(co); }