private void Start()
    {
        Monitor.SetActive(true);

        if (!training)
        {
            teams = new List <List <GameObject> >();

            while (teams.Count < numTeams)
            {
                teams.Add(new List <GameObject>());
            }

            Agent[] agents = FindObjectsOfType(typeof(Agent)) as Agent[];
            for (int i = 0; i < agents.Length; i++)
            {
                UnitAgent unit = agents[i].GetComponent <UnitAgent>();

                teams[unit.team].Add(agents[i].gameObject);
            }

            castles = new List <GameObject>();

            for (int i = 0; i < teams.Count; i++)
            {
                Castle castle = Instantiate(CastlePrefab).GetComponent <Castle>();
                castle.SetTeam(teams[i], i);
                MeshRenderer mesh = castle.GetComponentInChildren <MeshRenderer>();
                Material[]   mat  = mesh.materials;
                mat[0]         = Colors[i];
                mesh.materials = mat;

                castles.Add(castle.gameObject);
            }

            gameState  = FindObjectOfType(typeof(GameState)) as GameState;
            controller = FindObjectOfType(typeof(GameController)) as GameController;
            maxRange   = 25;

            resetButton = Instantiate(resetButton);
            resetButton.GetComponentInChildren <Button>().onClick.AddListener(ResetAcademy);

            ResetAcademy();
        }
    }
    public override void InitializeAcademy()
    {
        if (training)
        {
            teams = new List <List <GameObject> >();

            Agent[] agents = FindObjectsOfType(typeof(Agent)) as Agent[];
            for (int i = 0; i < agents.Length; i++)
            {
                UnitAgent unit = agents[i].GetComponent <UnitAgent>();
                while (teams.Count <= unit.team)
                {
                    teams.Add(new List <GameObject>());
                }

                teams[unit.team].Add(agents[i].gameObject);
            }
            gameState  = FindObjectOfType(typeof(GameState)) as GameState;
            controller = FindObjectOfType(typeof(GameController)) as GameController;
            maxRange   = 20;

            castles = new List <GameObject>();

            for (int i = 0; i < teams.Count; i++)
            {
                Castle castle = Instantiate(CastlePrefab).GetComponent <Castle>();
                castle.SetTeam(teams[i], i);
                MeshRenderer mesh = castle.GetComponentInChildren <MeshRenderer>();
                Material[]   mat  = mesh.materials;
                mat[0]         = Colors[i];
                mesh.materials = mat;

                castles.Add(castle.gameObject);
            }
        }
    }