private void HandleCombatUpdate(CombatUpdate update) { _update = update; foreach (CombatAssets assets in update.FriendlyAssets) { if (assets.Owner == _appContext.LocalPlayer.Empire) { // _playerAssetsCount = update.FriendlyAssets.Count(); _playerAssets = assets; //_playerCivilization = assets.Owner; break; } else { // _playerAssetsCount = update.HostileAssets.Count(); _otherAssets = assets; //_playerCivilization = assets.Owner; } } if (_playerAssets == null) { _playerAssets = update.FriendlyAssets[0]; // _playerCivilization = update.Owner[0]; } if (_otherAssets == null) { _otherAssets = update.HostileAssets[0]; // _playerCivilization = update.Owner[0]; } DataContext = _update; if (update.CombatUpdate_IsCombatOver) { if (_update.IsStandoff) { HeaderText.Text = ResourceManager.GetString("COMBAT_HEADER") + ": " + String.Format(ResourceManager.GetString("COMBAT_STANDOFF")); SubHeaderText.Text = String.Format( ResourceManager.GetString("COMBAT_TEXT_STANDOFF"), _update.Sector.Name); } else if (_playerAssets.HasSurvivingAssets) { HeaderText.Text = ResourceManager.GetString("COMBAT_HEADER") + ": " + String.Format(ResourceManager.GetString("COMBAT_VICTORY")); SubHeaderText.Text = String.Format( ResourceManager.GetString("COMBAT_TEXT_VICTORY"), _update.Sector.Name); } else { HeaderText.Text = ResourceManager.GetString("COMBAT_HEADER") + ": " + String.Format(ResourceManager.GetString("COMBAT_DEFEAT")); SubHeaderText.Text = String.Format( ResourceManager.GetString("COMBAT_TEXT_DEFEAT"), _update.Sector.Name); } } else { HeaderText.Text = ResourceManager.GetString("COMBAT_HEADER"); // + ": " //+ String.Format(ResourceManager.GetString("COMBAT_ROUND"), _update.RoundNumber); SubHeaderText.Text = String.Format( ResourceManager.GetString("COMBAT_TEXT_ENCOUNTER"), _update.Sector.Name); var soundPlayer = new SoundPlayer("Resources/SoundFX/REDALERT.wav"); { if (File.Exists("Resources/SoundFX/REDALERT.wav")) { soundPlayer.Play(); } } } SubHeader2Text.Text = String.Format( ResourceManager.GetString("COMBAT_TEXT_DURABILITY"), _update.Sector.Name); PopulateUnitTrees(); //We need combat assets to be able to engage EngageButton.IsEnabled = _update.FriendlyAssets.Any(fa => (fa.CombatShips.Count > 0) || (fa.Station != null)); //We need combat assets to be able to rush the opposition RushButton.IsEnabled = _update.FriendlyAssets.Any(fa => fa.CombatShips.Count > 0); //There needs to be transports in the opposition to be able to target them TransportsButton.IsEnabled = false;// (_update.HostileAssets.Any(ha => (ha.CombatShips.Any(ncs => (ncs.Source.OrbitalDesign.ShipType == "Transport") && ((ncs.Owner == _theTargeted1Civ) || (ncs.Owner == _theTargeted2Civ))))) // || _update.HostileAssets.Any(ha => (ha.NonCombatShips.Any(ncs => (ncs.Source.OrbitalDesign.ShipType == "Transport") && ((ncs.Owner == _theTargeted1Civ) || (ncs.Owner == _theTargeted2Civ)))))); //We need at least 3 ships to create a formation FormationButton.IsEnabled = _update.FriendlyAssets.Any(fa => fa.CombatShips.Count >= 3); //We need assets to be able to retreat RetreatButton.IsEnabled = _update.FriendlyAssets.Any(fa => (fa.CombatShips.Count > 0) || (fa.NonCombatShips.Count > 0)); //Can hail HailButton.IsEnabled = _update.FriendlyAssets.Any(fa => (fa.CombatShips.Count > 0 || fa.NonCombatShips.Count > 0 || fa.Station != null)); //(update.RoundNumber == 1); UpperButtonsPanel.Visibility = update.CombatUpdate_IsCombatOver ? Visibility.Collapsed : Visibility.Visible; LowerButtonsPanel.Visibility = update.CombatUpdate_IsCombatOver ? Visibility.Collapsed : Visibility.Visible; CloseButton.Visibility = update.CombatUpdate_IsCombatOver ? Visibility.Visible : Visibility.Collapsed; UpperButtonsPanel.IsEnabled = true; LowerButtonsPanel.IsEnabled = true; if (!IsVisible) { Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NullableBoolFunction(ShowDialog)); } }
public void NotifyCombatUpdate(CombatUpdate update) { Observable.ToAsync( () => ClientEvents.CombatUpdateReceived.Publish(new ClientDataEventArgs <CombatUpdate>(update)), _scheduler)(); }