private bool FindTarget() { List <Collider2D> hit = (Physics2D.OverlapCircleAll(transform.position, targetCheckRadius, whatIsTarget)).ToList(); List <Collider2D> availableTargets = new List <Collider2D>(); foreach (Collider2D en in hit) { if (UnitLayerMask.CheckIfUnitIsInMask(en.GetComponent <ShipHumanoid>().whatAmI, whatUnitsToTarget) == true) { availableTargets.Add(en); } } /*for (int i = 0; i < availableTargets.Count; i++) * { * Debug.Log(" Index: " + i + " Name: " + hit[i].name + " Dist: " + (hit[i].transform.position - transform.position).magnitude); * }*/ availableTargets = availableTargets.OrderBy(en => Mathf.Abs((en.transform.position - transform.position).magnitude)).ToList(); if (availableTargets.Count > 0) { target = availableTargets[0].transform; return(true); } /*if (hit != null) * { * target = hit.transform; * return true; * }*/ return(false); }
protected bool FindTarget() { List <Collider2D> hit = (Physics2D.OverlapCircleAll(transform.position, targetCheckRadius, whatIsTarget)).ToList(); List <Collider2D> availableTargets = new List <Collider2D>(); foreach (Collider2D en in hit) { try { if (UnitLayerMask.CheckIfUnitIsInMask(en.GetComponent <UnitHumanoid>().type, whatUnitsToTarget) == true) { if ((en.transform.position - transform.position).magnitude <= targetCheckRadius && en.gameObject.activeInHierarchy) { availableTargets.Add(en); } } } catch (System.Exception e) { Debug.Log(e); Debug.Log(hit + " | " + hit.Count); foreach (var obj in hit) { Debug.Log(obj.name); } } } /*for (int i = 0; i < availableTargets.Count; i++) * { * Debug.Log(" Index: " + i + " Name: " + hit[i].name + " Dist: " + (hit[i].transform.position - transform.position).magnitude); * }*/ if (availableTargets.Count > 0) { availableTargets = availableTargets.OrderBy(en => Mathf.Abs((en.transform.position - transform.position).magnitude)).ToList(); target = availableTargets[0].transform; targRb = target.GetComponent <Rigidbody2D>(); targHumanoid = target.GetComponent <UnitHumanoid>(); return(true); } /*if (hit != null) * { * target = hit.transform; * return true; * }*/ return(false); }
private void Test() { Debug.Log(UnitLayerMask.CheckIfUnitIsInMask(UnitType.Ship, whatUnitsToTarget)); }
protected bool FindTarget(float addTime = 0f) { if (Time.time > findTargetTimer) { List <Collider2D> hit = (Physics2D.OverlapCircleAll(transform.position, targetCheckRadius, whatIsTarget)).ToList(); List <Collider2D> availableTargets = new List <Collider2D>(); foreach (Collider2D en in hit) { if (en) { try { if (UnitLayerMask.CheckIfUnitIsInMask(en.GetComponent <UnitHumanoid>().type, whatUnitsToTarget) == true) { if ((en.transform.position - transform.position).magnitude <= targetCheckRadius && en.gameObject.activeInHierarchy) { availableTargets.Add(en); } } } catch (System.Exception e) { Debug.Log(e); Debug.Log(hit + " | " + hit.Count); foreach (var obj in hit) { Debug.Log(obj.name); } } } } /*for (int i = 0; i < availableTargets.Count; i++) * { * Debug.Log(" Index: " + i + " Name: " + hit[i].name + " Dist: " + (hit[i].transform.position - transform.position).magnitude); * }*/ if (availableTargets.Count > 0) { Collider2D targetBase; if (targetBase = availableTargets.Find(obj => obj.GetComponent <Base>())) { availableTargets.Remove(targetBase); } availableTargets = availableTargets.OrderBy(en => Mathf.Abs((en.transform.position - transform.position).magnitude)).ToList(); if (targetBase) { availableTargets.Add(targetBase); Debug.Log("found base + base is target: " + availableTargets[availableTargets.Count - 1]); } target = availableTargets[0].transform; targRb = target.GetComponent <Rigidbody2D>(); targHumanoid = target.GetComponent <UnitHumanoid>(); foreach (WeaponBase wep in weapons) { if (!wep.target) { if (UnitLayerMask.CheckIfUnitIsInMask(targHumanoid.type, wep.whatUnitsCanBeTargetted)) { wep.target = target; } } } return(true); } /*if (hit != null) * { * target = hit.transform; * return true; * }*/ findTargetTimer = targetCheckDelay + Time.time + addTime; return(false); } else { return(false); } }