public static void CreateGiftEvent(Empire eGifter, Empire eReceiver, int gift)
        {
            Relation relation = null;
            foreach(Relation r in eReceiver.EmpireRelations)
            {
                if (r.EmpireName == eGifter.EmpireName)
                    relation = r;
            }
            if (relation != null)
            {
                int i = gift / 512;
                if (relation.RelationPoints < 0)
                    i = (int)(i * 1.5);
                else
                    i = (int)(i * 2.5);

                if (i > 50)
                    i = 50;
                else if (i < 1)
                    i = 1;
                //Cerca se nella relazione c'è già un evento sul regalo e aggiungi punti
                foreach (Event e in relation.RelationEvents)
                {
                    if (e.Motivation == Event.EventMotivation.GIFT && e.Type == Event.EventType.POSITIVE)
                    {
                        e.AddPointsToEvent(i);
                        return;
                    }
                }
                //Altrimenti creane uno nuovo
                relation.RelationEvents.Add(new Event(Event.EventType.POSITIVE, Event.EventMotivation.GIFT, i));
            }
        }
        static void SaveEmpire(XmlWriter xw, Empire e)
        {
            xw.WriteStartElement("EMPIRE");
            xw.WriteAttributeString("NAME", e.EmpireName);
            xw.WriteAttributeString("RELIGION", e.EmpireReligion.ToString());

            // Scrivi ora i sistemi posseduti e conosciuti
            SaveKnownSystem(xw, "OWNEDSYSTEMS", e.OwnedSystems);
            SaveKnownSystem(xw, "KNOWNSYSTEMS", e.KnownSystems);

            // Relazioni con altri imperi
            SaveRelation(xw, e.EmpireRelations);

            // Flotta
            SaveFleet(xw, e.Fleet);

            xw.WriteEndElement();//Di EMPIRE
        }
        public static void CreateCommerceEvent(Empire player, Empire commerced, int prize, bool playerSell)
        {
            Relation relation = null;
            foreach (Relation r in commerced.EmpireRelations)
            {
                if (r.EmpireName == player.EmpireName)
                    relation = r;
            }
            if (relation != null)
            {
                int i = prize / 1024;
                if (relation.RelationPoints < 0)
                    i = (int)(i * 1.5);
                else
                    i = (int)(i * 2.5);

                if (playerSell)
                    i = (int)(i * 0.88);
                else
                    i = (int)(i * 1.5);

                if (i > 50)
                    i = 50;
                else if (i < 1)
                    i = 1;
                //Cerca se nella relazione c'è già un evento sul commercio e aggiungi punti
                foreach(Event e in relation.RelationEvents)
                {
                    if (e.Motivation == Event.EventMotivation.COMMERCE && e.Type == Event.EventType.POSITIVE)
                    {
                        e.AddPointsToEvent(i);
                        return;
                    }
                }
                //Altrimenti creane uno nuovo
                relation.RelationEvents.Add(new Event(Event.EventType.POSITIVE, Event.EventMotivation.COMMERCE, i));
            }
        }
        /// <summary>
        /// Metodo che crea un nuovo gioco
        /// </summary>
        public static void NewGame()
        {
            isLoading = true;
            // Crea una nuova lista e cancellala se era già stata creata in precedenza
            solarSystems = new List<SolarSystem>();
            solarSystems.Clear();
            // Fai lo stesso per gli imperi
            empires = new List<Empire>();
            empires.Clear();
            // Prendi il numero dei sistemi e degli imperi
            int systems = GameParams.starNumber;
            int numEmpires = GameParams.empireNumber;

            List<Vector3> vect = new List<Vector3>();
            for (int i = -1 * systems / 2; i < systems / 2; i++)
                for (int j = -1 * systems / 2; j < systems / 2; j++)
                    vect.Add(new Vector3(i * 32, 0, j * 32));

            vect.Remove(new Vector3(0, 0, 0));
            Random rnd = new Random();
            for (int i = 0; i < systems; i++)
            {
                int index = rnd.Next(0, vect.Count);
                Vector3 pos = vect[index];
                SolarSystem solar = new SolarSystem(pos);
                solarSystems.Add(solar);
                vect.RemoveAt(index);
            }
            vect.Clear();
            // Crea i pianeti per ogni sistema solare
            foreach (SolarSystem ss in solarSystems)
                ss.CreatePlanets();
            // Crea gli imperi
            CreateEmpires();
            //Crea il sistema solare di partenza per il giocatore
            SolarSystem startingSystem = new SolarSystem(new Vector3(0, 0, 0));
            startingSystem.IsDiscovered = true;
            startingSystem.CreatePlanets(true);
            if (GameParams.name == null)
                GameParams.name = NameGenerator.GetName();
            playerEmpire = new Empire(startingSystem, GameParams.religionType, GameParams.name);
            solarSystems.Add(startingSystem);
            foreach (Planet p in startingSystem.Planets)
                if (p.PlanetSettlement != null)
                    playerCapital = p;

            //empires.Add(playerEmpire);
            PlayerShip.Initialize(new Vector3(0, 50, 0), 1500, 500);

            isLoading = false;
        }
        /// <summary>
        /// Metodo che crea gli imperi
        /// </summary>
        private static void CreateEmpires()
        {
            Random rnd = new Random();
            // Terrascore minimo definito a partire dal numero degli imperi da creare
            int terrascore = 24;
            int empireNumber = GameParams.empireNumber;
            if (empireNumber < 150)
                terrascore = 27;
            else if (empireNumber < 125)
                terrascore = 30;

            int empireCount = 0;
            foreach(SolarSystem ss in solarSystems)
            {
                foreach(Planet p in ss.Planets)
                {
                    // Se il terrascore va bene e non si sono creati abbastanza imperi, creane uno
                    if(p.Terrascore >= terrascore && empireCount < empireNumber)
                    {
                        Empire empire = new Empire(ss);
                        int money = rnd.Next(10000, 100000); // Soldi e abitanti random
                        int inhabitants = rnd.Next(10000, 1000000);

                        // Definisci potenza di attacco e difese a seconda della religione
                        int minD = 300; int minO = 10;
                        if (empire.EmpireReligion == Religion.ReligionType.ATOM || empire.EmpireReligion == Religion.ReligionType.BLESS)
                            minD = 1000;
                        else if (empire.EmpireReligion == Religion.ReligionType.CURSER)
                            minO = 100;
                        int defense = rnd.Next(minD, 10000);
                        int offense = rnd.Next(minO, 200);
                        // Crea insediamento
                        Settlement settlement = new Settlement(Settlement.SettlementType.CAPITAL, money, inhabitants, defense, offense, empire.EmpireReligion);
                        p.CreateSettlement(settlement);
                        empire.SetEmpireCapital(p);
                        // Aggiungilo agli imperi
                        empires.Add(empire);
                        empireCount++;
                        break;
                    }
                }
                // Se si sono creati tutti gli imperi, esci da for
                if (empireCount > empireNumber)
                    break;
            }
        }
 /// <summary>
 /// Metodo che controlla il proprietario del sistema su cui si trova attualmente la nave
 /// </summary>
 public static void SystemOwner()
 {
     actualSystemOwner = SystemOwner(actualSystem);
 }
 public static void SetActualSystemOwner(Empire e)
 {
     e.OwnedSystems.Add(actualSystem);
     SystemOwner();
 }
        public void CreateNewRelation(Empire otherEmpire)
        {
            List<Event> events = new List<Event>();
            //Evento religione
            int i = Religion.ReligionIndex(empireReligion, otherEmpire.EmpireReligion) * 10;
            Event.EventType type;
            if (i < 0)
                type = Event.EventType.NEGATIVE;
            else if (i == 0)
                type = Event.EventType.NEUTRAL;
            else
                type = Event.EventType.POSITIVE;

            events.Add(new Event(type, Event.EventMotivation.RELIGION, i));

            //Crea relazione e aggiungila alla lista
            empireRelations.Add(new Relation(otherEmpire.EmpireName, events));
        }