public void SpawnEnemy() { EnemyPenguinStatus newEnemyPenguin = CheckForAvailableGarbageEnemy(); EnemyHealthBarPosition newEnemyUI = CheckForAvailableGarbageEnemyUI(); Transform spawnPoint = FindFurthestSpawnPoint(); if (newEnemyPenguin == null) { //Debug.Log("Instantiating new enemy"); //Instantiate. newEnemyPenguin = Instantiate(prefabEnemy, spawnPoint.position, spawnPoint.rotation); listGarbageEnemies.Add(newEnemyPenguin); } else { //Debug.Log("Recycling new enemy"); newEnemyPenguin.transform.position = spawnPoint.position; } if (newEnemyUI == null) { newEnemyUI = Instantiate(prefabEnemyStatUI, Vector3.zero, Quaternion.identity); newEnemyUI.transform.SetParent(prefabEnemyStatUI.transform.parent, true); newEnemyUI.transform.localScale = Vector3.one; RectTransform rtUI = newEnemyUI.transform as RectTransform; rtUI.SetAsFirstSibling(); listGarbageEnemyUIs.Add(newEnemyUI); } else { } newEnemyPenguin.transform.position = spawnPoint.position; newEnemyPenguin.gameObject.SetActive(true); newEnemyUI.gameObject.SetActive(true); //Pair UI and unit. newEnemyUI.target = newEnemyPenguin.transform; newEnemyPenguin.statsUI = newEnemyUI; newEnemyPenguin.Init(); }
private EnemyPenguinStatus CheckForAvailableGarbageEnemy() { EnemyPenguinStatus returnEnemy = null; //Go through list and return any inactive spawned enemy. if (listGarbageEnemies.Count > 0) { foreach (EnemyPenguinStatus ec in listGarbageEnemies) { if (!ec.isActiveAndEnabled) { returnEnemy = ec; } } } return(returnEnemy); }