/// <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); }
/// <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); } }