> For the complete documentation index, see [llms.txt](https://kdoore.gitbook.io/cs2335/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kdoore.gitbook.io/cs2335/master_v2/project-3-code-mods/project-3-code/class-code-examples/spawner-final.md).

# Spawner - Final

This code includes updated code to: **`StopAllSpawning( )`** This method is executed within LevelManager, it destroys objects with Component of type: PickUp, ScorePickUp, Hazard, change to fix in your code so it is consistent.  It also stops any remaining SpawnPrefab methods waiting to be invoked. ***You may want to delete the MiniGameManager.cs script, otherwise fix any errors caused there.***

***Verify if this script needs to be added to the Spawner GameObject***

```java
using UnityEngine;

public class Spawner : MonoBehaviour {

    [Header("Set in Inspector")]
    public GameObject goodPrefab, badPrefab;

    public int pauseTime = 2; //wait 2 seconds before spawning, //adjust as needed for your game
    public int numToSpawn = 10;//adjust as needed for your game
    public float chanceToSpawnBad = .10f;//adjust as needed for your game
    public float xRange = 8.0f;//adjust as needed for your game
    public float yRangeTop = -2.0f; //adjust as needed for your game
    public float yRangeBottom = -3.5f;//adjust as needed for your game
    public bool activeSpawning = false;


    // Use this for initialization
    void Start() {
        //activeSpawning = true; ///remove later when we start spawning from another class
        //StartSpawning(); //remove later
    }

    public void StartSpawning()   //will be called from another class
    {
        for (int i = 0; i < numToSpawn; i++)
        {
            Invoke("SpawnPrefab", pauseTime * i * 2);
        }
    }

    /// <summary>
    /// Spawns one prefab:  good or bad with some probability of bad
    /// </summary>
    public void SpawnPrefab()
    {
        if (activeSpawning)
        {
            Vector3 position = transform.localPosition;
            position.x = Random.Range(-xRange, xRange);
            position.y = Random.Range(yRangeBottom, yRangeTop);
            float rand = Random.value; //returns value between 0.0 - 1.0 (property)
            GameObject prefab;
            if (rand < chanceToSpawnBad)
            {
                prefab = Instantiate(badPrefab, position, transform.rotation);    //instantiate bad
            }
            else  //instantiate good
            {
                prefab = Instantiate(goodPrefab, position, transform.rotation);
            }
            prefab.transform.SetParent(this.transform); //set Spawner as parent of prefabs in Hierarchy 
           // Debug.Log("Spawned 1");
        }
    } //end SpawnPrefab

    public void StopAllSpawning()
    {
        CancelInvoke("SpawnPrefab");
        activeSpawning = false;
        DestroySpawnedObjects();
    }
    
    void DestroySpawnedObjects()
    {
        PickUp[] items = FindObjectsOfType<PickUp>();
        foreach (PickUp item in items    )
        {
            Destroy(item.gameObject);
        }
        
        //if using scoreItems
        ScorePickUp[] scoreItems = FindObjectsOfType<ScorePickUp>();
        foreach (ScorePickUp scoreItem in scoreItems)
        {
            Destroy(scoreItem.gameObject);
        }

        Hazard[] hazards = FindObjectsOfType<Hazard>();
        foreach (Hazard hazard in hazards)
        {
            Destroy(hazard.gameObject);
        }
    } //end DestroySpawnedObjects
    
    ////used in Project 1: miniGameManager
    public void DestroyAllPickups()
    {
        PickUp[] items = FindObjectsOfType<PickUp>();
        foreach( PickUp item in items       )
        {
            Destroy(item.gameObject);
        }
    }
    
} //end of class
```
