コード例 #1
0
 public DailyUpdateDocument(string title, SituationReport situationReport)
 {
     this.Title           = title;
     this.situationReport = situationReport;
 }
コード例 #2
0
ファイル: GameMain.cs プロジェクト: Beyonders/Beyond-Beyaan
        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);
        }
コード例 #3
0
        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";
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public NewGameDocument(SituationReport situationReport)
     : base("Day 1. Welcome to Sorpigal.", situationReport)
 {
 }