/// <summary> /// Determine transform of enemy nearest to player ship. /// </summary> /// <returns> Transform of nearest enemy ship. </returns> private Transform GetNearestEnemy() { Vector3 positionDifference; float distance; float shortestDistance = Mathf.Infinity; GameObject nearestEnemy = null; foreach (GameObject enemy in GameObject.FindGameObjectsWithTag("Enemy")) { NewBoss newBoss = enemy.GetComponent <NewBoss>(); Enemy enemyScript = enemy.GetComponent <Enemy>(); if (enemyScript != null) { if (newBoss == null) { if (!enemyScript.PathingComplete || !enemyScript.IsActive) { continue; } } else { if (newBoss.CurrentState != BossStates.Combat) { continue; } } } else { continue; } positionDifference = enemy.transform.position - transform.parent.transform.position; //faster than non-squared magnitude distance = positionDifference.sqrMagnitude; if (distance < shortestDistance && enemy.activeSelf) { shortestDistance = distance; nearestEnemy = enemy; } } //couldn't find any enemies if (shortestDistance == Mathf.Infinity) { return(null); } return(nearestEnemy.transform); }
/// <summary> /// Initializes /// </summary> /// <param name="referenceManager"> The reference manager </param> public void Initialize(ReferenceManager referenceManager) { if (!IsInitialized) { reference = referenceManager; if (bossPrefab != null) { IsInitialized = true; ObjectPoolManager opm = reference.objectPoolManager; bossObject = opm.Spawn(gameObject, opm.GetTypeIdentifier(bossPrefab), bossSpawn.position, bossSpawn.rotation, transform); bossScript = bossObject.GetComponent <NewBoss>(); TransitionState(BossStates.Intro); } else { Debug.LogError(GetType().Name + " - bossPrefab is not set."); } } }