Beispiel #1
0
        /// <summary>
        /// Check to see if the player has exceeded the required score.
        /// </summary>
        /// <param name="raceName">Name of race to check.</param>
        /// <returns>Returns 1 if the required score has been met, otherwise 0.</returns>
        private int ScoreExceeded(int empireId)
        {
            if (GameSettings.Data.TotalScore.IsChecked == false)
            {
                return(0);
            }

            List <ScoreRecord> allScores = Scores.GetScores();


            foreach (ScoreRecord scoreDetail in allScores)
            {
                if (scoreDetail.EmpireId == empireId)
                {
                    if (scoreDetail.Score >= GameSettings.Data.TotalScore.NumericValue)
                    {
                        return(1);
                    }
                    break;
                }
            }
            return(0);
        }
Beispiel #2
0
        /// <summary>
        /// Save the turn data.
        /// </summary>
        /// <remarks>
        /// We have to be very careful that we have a consistent and self-contained data set in the turn file.
        /// For example, we write out "AllStars" but turnData.AllStars is not the same as stateData.AllStars.
        /// So make sure any pointers to AllStars refer to the copy in turnData otherwise we'll get
        /// duplicated (but separate) star objects.
        /// </remarks>
        public void WriteIntel()
        {
            foreach (EmpireData empire in serverState.AllEmpires.Values)
            {
                turnData = new Intel();
                turnData.AllMinefields = serverState.AllMinefields;
                turnData.EmpireState   = serverState.AllEmpires[empire.Id];


                // Copy any messages
                foreach (Message message in serverState.AllMessages)
                {
                    if (message.Audience == Global.Everyone || message.Audience == empire.Id)
                    {
                        turnData.Messages.Add(message);
                    }
                }

                // Don't try and generate a scores report on the very start of a new
                // game.

                if (serverState.TurnYear > Global.StartingYear)
                {
                    turnData.AllScores = scores.GetScores();
                }
                else
                {
                    turnData.AllScores = new List <ScoreRecord>();
                }

                serverState.GameFolder = FileSearcher.GetFolder(Global.ServerFolderKey, Global.ServerFolderName);
                if (serverState.GameFolder == null)
                {
                    Report.Error("Intel Writer: WriteIntel() - Unable to create file \"Nova.intel\".");
                    return;
                }
                string turnFileName = Path.Combine(serverState.GameFolder, empire.Race.Name + Global.IntelExtension);

                // Write out the intel file, as xml
                bool   waitForFile = false;
                double waitTime    = 0.0; // seconds
                do
                {
                    try
                    {
                        using (Stream turnFile = new FileStream(turnFileName /*+ ".xml"*/, FileMode.Create))
                        {
                            // Setup the XML document
                            XmlDocument xmldoc = new XmlDocument();
                            Global.InitializeXmlDocument(xmldoc);

                            // add the Intel to the document
                            xmldoc.ChildNodes.Item(1).AppendChild(turnData.ToXml(xmldoc));

                            xmldoc.Save(turnFile);
                        }
                        waitForFile = false;
                    }
                    catch (System.IO.IOException)
                    {
                        // IOException. Is the file locked? Try waiting.
                        if (waitTime < Global.TotalFileWaitTime)
                        {
                            waitForFile = true;
                            System.Threading.Thread.Sleep(Global.FileWaitRetryTime);
                            waitTime += 0.1;
                        }
                        else
                        {
                            // Give up, maybe something else is wrong?
                            throw;
                        }
                    }
                }while (waitForFile);
            }
        }