/// <summary> /// Gets top priority target from list. /// </summary> /// <returns>The topmost target.</returns> private GameObject GetTopmostTarget() { GameObject res = null; if (useTargetPriority == true) // Get target with minimum distance to capture point { float minPathDistance = float.MaxValue; foreach (GameObject ai in targetsList) { if (ai != null) { AiStatePatrol aiStatePatrol = ai.GetComponent <AiStatePatrol>(); float distance = aiStatePatrol.GetRemainingPath(); if (distance < minPathDistance) { minPathDistance = distance; res = ai; } } } } else // Get first target from list { res = targetsList[0]; } // Clear list of potential targets targetsList.Clear(); return(res); }
/// <summary> /// Start this instance. /// </summary> void Start() { float radius = radiusCollider.radius * Mathf.Max(radiusCollider.transform.localScale.x, radiusCollider.transform.localScale.y); // Get random enemy Collider2D enemy = Physics2D.OverlapCircle(radiusCollider.transform.position, radius, 1 << LayerMask.NameToLayer("Enemy")); if (enemy != null) { if (fxPrefab != null) { // Visual effect in teleport position GameObject fx = Instantiate(fxPrefab); fx.transform.position = enemy.gameObject.transform.position; Destroy(fx, fxDuration); } AiStatePatrol aiStatePatrol = enemy.gameObject.GetComponent <AiStatePatrol>(); // Offset target on pathway Vector2 teleportPosition = aiStatePatrol.path.GetOffsetPosition(ref aiStatePatrol.destination, aiStatePatrol.transform.position, teleportOffset); aiStatePatrol.transform.position = new Vector3(teleportPosition.x, teleportPosition.y, aiStatePatrol.transform.position.z); // Update patrol destination aiStatePatrol.UpdateDestination(false); if (fxPrefab != null) { // Visual effect in new position GameObject fx = Instantiate(fxPrefab); fx.transform.position = enemy.gameObject.transform.position; Destroy(fx, fxDuration); } } Destroy(gameObject); }