public DailyUpdateDocument(string title, SituationReport situationReport) { this.Title = title; this.situationReport = situationReport; }
public bool Initalize(int screenWidth, int screenHeight, DirectoryInfo dataSet, bool showTutorial, Form parentForm, out string reason) { _parentForm = parentForm; Random = new Random(); MousePos = new Point(); ScreenWidth = screenWidth; ScreenHeight = screenHeight; GameDataSet = dataSet; Galaxy = new Galaxy(); EmpireManager = new EmpireManager(this); ShipShader = GorgonLibrary.Graphics.FXShader.FromFile("ColorShader.fx", GorgonLibrary.Graphics.ShaderCompileOptions.OptimizationLevel3); StarShader = GorgonLibrary.Graphics.FXShader.FromFile("StarShader.fx", GorgonLibrary.Graphics.ShaderCompileOptions.OptimizationLevel3); if (!SpriteManager.Initialize(GameDataSet, out reason)) { return(false); } if (!FontManager.Initialize(GameDataSet, out reason)) { return(false); } RaceManager = new RaceManager(); if (!RaceManager.Initialize(GameDataSet, Random, out reason)) { return(false); } AIManager = new AIManager(); if (!AIManager.Initialize(GameDataSet, out reason)) { return(false); } MasterTechnologyManager = new MasterTechnologyManager(); if (!MasterTechnologyManager.Initialize(this, out reason)) { return(false); } _mainGameMenu = new MainGameMenu(); if (!_mainGameMenu.Initialize(this, out reason)) { return(false); } _screenInterface = _mainGameMenu; _currentScreen = Screen.MainMenu; _situationReport = new SituationReport(this); Cursor = SpriteManager.GetSprite("Cursor", Random); if (Cursor == null) { reason = "Cursor is not defined in sprites.xml"; return(false); } reason = string.Empty; return(true); }
private async Task GetSituations() { if (ErrorBanner.Visibility == Visibility.Visible) { ErrorBanner.Visibility = Visibility.Collapsed; } RefreshButton.Content = "Updating, Please Wait"; GetSettings(); ReportTitle.Text = situationReport.FactionName + " Situation Report"; if (string.IsNullOrEmpty(situationReport.FactionName)) { var popup = new Settings(); popup.ShowDialog(); RefreshButton.Content = "Refresh"; } situationReport.CriticalReports.Clear(); situationReport.WarningReports.Clear(); situationReport.OpportunityReports.Clear(); situationReport.DataReports.Clear(); situationReport.ControlledReports.Clear(); situationReport.PartialReports.Clear(); try { situationReport = await situationReportsService.GenerateReport(situationReport); } catch (Exception ex) { ErrorBanner.Visibility = Visibility.Visible; ErrorBanner.Text = "An error has occurred, try again later. (" + ex.Message + ")"; RefreshButton.Content = "Refresh"; } CriticalGrid.DataContext = situationReport.CriticalReports; if (!situationReport.CriticalReports.Any()) { CriticalTitle.Visibility = Visibility.Collapsed; CriticalGrid.Visibility = Visibility.Collapsed; } else { CriticalTitle.Visibility = Visibility.Visible; CriticalGrid.Visibility = Visibility.Visible; } CriticalGrid.Items.Refresh(); WarningGrid.DataContext = situationReport.WarningReports; if (!situationReport.WarningReports.Any()) { WarningTitle.Visibility = Visibility.Collapsed; WarningGrid.Visibility = Visibility.Collapsed; } else { WarningTitle.Visibility = Visibility.Visible; WarningGrid.Visibility = Visibility.Visible; } WarningGrid.Items.Refresh(); OpportunitiesGrid.DataContext = situationReport.OpportunityReports; if (!situationReport.OpportunityReports.Any()) { OpportunitiesTitle.Visibility = Visibility.Collapsed; OpportunitiesGrid.Visibility = Visibility.Collapsed; } else { OpportunitiesTitle.Visibility = Visibility.Visible; OpportunitiesGrid.Visibility = Visibility.Visible; } OpportunitiesGrid.Items.Refresh(); DataReportsGrid.DataContext = situationReport.DataReports; if (!situationReport.DataReports.Any()) { DataReportsTitle.Visibility = Visibility.Collapsed; DataReportsGrid.Visibility = Visibility.Collapsed; } else { DataReportsTitle.Visibility = Visibility.Visible; DataReportsGrid.Visibility = Visibility.Visible; } DataReportsGrid.Items.Refresh(); ControlledGrid.DataContext = situationReport.ControlledReports; if (!situationReport.ControlledReports.Any()) { ControlledTitle.Visibility = Visibility.Collapsed; ControlledGrid.Visibility = Visibility.Collapsed; } else { ControlledTitle.Visibility = Visibility.Visible; ControlledGrid.Visibility = Visibility.Visible; } ControlledGrid.Items.Refresh(); PartialGrid.DataContext = situationReport.PartialReports; if (!situationReport.PartialReports.Any()) { PartialTitle.Visibility = Visibility.Collapsed; PartialGrid.Visibility = Visibility.Collapsed; } else { PartialTitle.Visibility = Visibility.Visible; PartialGrid.Visibility = Visibility.Visible; } PartialGrid.Items.Refresh(); RefreshButton.Content = "Refresh"; }
public async Task <SituationReport> GenerateReport(SituationReport situationReport) { // Get Tick var tick = await _tickService.Get(); Faction faction = situationReport.Faction; // Get Faction if (situationReport.Faction.UpdatedOn < tick) { faction = await _factionsService.Get(situationReport.FactionName); } faction.SolarSystems = await _solarSystemsService.GetByFactionName(situationReport.FactionName); // Get Each System's Assets foreach (var solarSystem in faction.SolarSystems) { // Update system assets solarSystem.Assets = await _assetsService.GetAssets(solarSystem.Name); } situationReport.Faction = faction; // Generate Reports foreach (var system in faction.SolarSystems) { if (situationReport.OffLimits.Any(e => e.ToLower() == system.Name.ToLower())) { continue; } var influences = system.SubFactions.OrderByDescending(e => e.Influence).Select(e => e.Influence).ToList(); bool weControl = false; bool totalControl = true; bool inConflict = false; bool closeToConflict = false; bool closeToExpansion = false; bool closeToRetreat = false; string states = string.Empty; if (system.ControllingFaction.Equals(situationReport.FactionName, StringComparison.OrdinalIgnoreCase)) { weControl = true; } if (influences[0] - 0.10 <= influences[1]) { closeToConflict = true; } if (system.Conflicts.Any(e => e.Factions.Any(f => f.FactionName.ToLower() == situationReport.FactionName.ToLower()))) { inConflict = true; } if (influences[0] <= 0.075) { closeToRetreat = true; } else if (influences[0] >= 0.65) { closeToExpansion = true; } if (system.Assets.Any(e => e.Faction.ToLower() != situationReport.FactionName.ToLower())) { totalControl = false; } if (!string.IsNullOrEmpty(system.State)) { states = system.State; } // Stale Data if (system.UpdatedOn <= tick.AddDays(-2)) { situationReport.DataReports.Add(new Report(system.Name, "Stale Data", "System info is behind by roughly " + (tick - system.UpdatedOn).Days.ToString() + " ticks", states)); } else if (system.UpdatedOn < tick) { situationReport.DataReports.Add(new Report(system.Name, "Stale Data", "System info is behind by at least 1 tick.", states)); } // In or Pending Conflict if (inConflict) { var conflict = system.Conflicts.FirstOrDefault(e => e.Factions.Any(f => f.FactionName == situationReport.FactionName)); situationReport.CriticalReports.Add(new Report(system.Name, conflict.Type, conflict.Status, "Asset at stake: " + conflict.Factions.Any(e => e.Stake != string.Empty))); } // Asset Reallocation opportunity else if (!totalControl && closeToConflict) { situationReport.OpportunityReports.Add(new Report(system.Name, "Asset Reallocation Opportunity", "inf gap : " + Math.Round(influences[0] - influences[1], 2).ToString("p"), states)); } // Pointless conflict risk else if (closeToConflict) { situationReport.WarningReports.Add(new Report(system.Name, "Pointless Conflict Risk", "inf gap : " + Math.Round(influences[0] - influences[1], 2).ToString("p"), states)); } // Expansion warning if (closeToExpansion && weControl) { situationReport.WarningReports.Add(new Report(system.Name, "System is nearing expansion.", "current influence : " + Math.Round(influences[0], 2).ToString("p"), states)); } // Near retreat warning else if (closeToRetreat) { situationReport.WarningReports.Add(new Report(system.Name, "System is nearing retreat.", "current influence : " + Math.Round(influences[0], 2).ToString("p"), states)); } // Total Control if (totalControl) { situationReport.ControlledReports.Add(new Report(system.Name, "Total Control", system.Assets.Count + " assets controlled.", states)); } // Unclaimed Assets else { situationReport.PartialReports.Add(new Report(system.Name, "Unclamed Assets", system.Assets.Count(e => e.Faction.ToLower() != situationReport.FactionName.ToLower()) + " of " + system.Assets.Count + " assets unclaimed.", states)); } // Conquest opportunity if (!weControl && !inConflict) { situationReport.OpportunityReports.Add(new Report(system.Name, "Conquest Opportunity", "inf gap : " + Math.Round(influences[0] - influences[1], 2).ToString("p"), states)); } // Subfaction considerations foreach (var subFaction in system.SubFactions) { // We're in retreat if (subFaction.Name == faction.Name && subFaction.ActiveStates.Exists(e => e.ToLower() == "retreat")) { situationReport.CriticalReports.Add(new Report(system.Name, "Retreat", "We're in retreat!!!", states)); } // Attempt to guess if someone is near retreat who's not a "home" faction if (subFaction.Name != faction.Name && !subFaction.HomeSystem && subFaction.Influence < 0.05 && !subFaction.ActiveStates.Exists(e => e.ToLower() == "retreat") && !subFaction.PendingStates.Exists(e => e.ToLower() == "retreat")) { situationReport.WarningReports.Add(new Report(system.Name, "Retreat Risk Warning", subFaction.Name + " is close to retreat", states)); } // Other faction is in retreat if (subFaction.Name != faction.Name && !subFaction.HomeSystem && (subFaction.ActiveStates.Exists(e => e.ToLower() == "retreat" || subFaction.PendingStates.Exists(e => e.ToLower() == "retreat")))) { situationReport.CriticalReports.Add(new Report(system.Name, "Retreat Warning", subFaction.Name + " is in retreat.", states)); } // Non-native faction in conflict if (situationReport.ShowNonNativeConflictReports && !subFaction.HomeSystem && system.Conflicts.Any(e => e.Status == "active" && e.Factions.Any(f => f.FactionName.ToLower() == subFaction.Name.ToLower()))) { situationReport.WarningReports.Add(new Report(system.Name, "Non-native Conflict Warning", "Non-native faction " + subFaction.Name + " is in active conflict.", states)); } } } return(situationReport); }
public NewGameDocument(SituationReport situationReport) : base("Day 1. Welcome to Sorpigal.", situationReport) { }