/// <summary>
        /// Uses this GameObject's relevant position as well as its faction to return a list of enemy Transforms that excludes this GameObject
        /// </summary>
        /// <param name="myTransform">Transform of GameObject to exclude</param>
        /// <param name="myFaction">Faction of GameObject to exclude</param>
        /// <returns></returns>
        public List <Transform> GetAllEnemyTransforms(Transform myTransform, Faction.Faction_ID myFaction)
        {
            List <Transform> enemyTransforms = new List <Transform>();

            try
            {
                foreach (GameObject m in GameObject.FindGameObjectsWithTag("Melee"))
                {
                    if (m != null && m.transform != myTransform && m.GetComponent <MeleeBehviour>().MeleeFaction != myFaction)
                    {
                        enemyTransforms.Add(m.transform);
                    }
                }

                foreach (GameObject r in GameObject.FindGameObjectsWithTag("Ranged"))
                {
                    if (r != null && r.transform != myTransform && r.GetComponent <RangedBehaviour>().RangedFaction != myFaction)
                    {
                        enemyTransforms.Add(r.transform);
                    }
                }

                foreach (GameObject w in GameObject.FindGameObjectsWithTag("Wizard"))
                {
                    if (w != null && w.transform != myTransform && w.GetComponent <WizardBehaviour>().WizardFaction != myFaction)
                    {
                        enemyTransforms.Add(w.transform);
                    }
                }

                foreach (GameObject rb in GameObject.FindGameObjectsWithTag("Resource"))
                {
                    if (rb != null && rb.transform != myTransform && rb.GetComponent <ResourceBehaviour>().ResourceFaction != myFaction)
                    {
                        enemyTransforms.Add(rb.transform);
                    }
                }

                foreach (GameObject fb in GameObject.FindGameObjectsWithTag("Factory"))
                {
                    if (fb != null && fb.transform != myTransform && fb.GetComponent <FactoryBehaviour>().FactoryFaction != myFaction)
                    {
                        enemyTransforms.Add(fb.transform);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.Log(e.Message);
            }

            //Add other enemy types Transforms

            return(enemyTransforms);
        }
        private IEnumerator DealDamageMelee(Collider other)
        {
            int enemyHealth = other.GetComponent <MeleeBehviour>().Health;

            Faction.Faction_ID targetFaction = other.GetComponent <MeleeBehviour>().MeleeFaction;

            GameObject target = other.gameObject;

            for (int i = 0; i < enemyHealth; i++)
            {
                if (target != null)
                {
                    other.gameObject.GetComponent <MeleeBehviour>().Health -= this.attack;
                }
                yield return(new WaitForSeconds(attackOverTime));
            }
        }
 public WizardSerializer(int health, float[] position, Faction.Faction_ID faction)
 {
     this.health   = health;
     this.position = position;
     this.faction  = faction;
 }