private void UpdateSlots(ILobbyData lobbyData) { if ((lobbyData == null) || (lobbyData.Slots == null) || (lobbyData.Players == null)) { return; } var localPlayer = AppContext.LocalPlayer; if (AppContext.IsSinglePlayerGame) { GameLog.Client.General.InfoFormat("AppContext.IsSinglePlayerGame={0}", AppContext.IsSinglePlayerGame); return; } foreach (var slotView in PlayerInfoPanel.Children.OfType <PlayerSlotView>()) { var playerSlot = lobbyData.Slots[slotView.Slot.SlotID]; var assignablePlayers = lobbyData.Players.ToList(); if (localPlayer.IsGameHost) { //GameLog.Print("localPlayer.Name={0}, is hosting...", localPlayer.Name); assignablePlayers.Add(Player.Unassigned); assignablePlayers.Add(Player.Computer); //assignablePlayers.Add(Player.TurnedToMinor); //assignablePlayers.Add(Player.TurnedToExpandingPower); } else { GameLog.Client.General.DebugFormat("localplayer.Name={0} is NOT hosting...", localPlayer.Name); assignablePlayers.RemoveAll(o => !Equals(o, localPlayer) && !Equals(o, playerSlot.Player)); if (playerSlot.IsVacant) { assignablePlayers.Add(Player.Unassigned); } else { if (Equals(playerSlot.Player, localPlayer)) { assignablePlayers.Add(Player.Unassigned); } else { assignablePlayers.RemoveAll(o => Equals(o, localPlayer)); if (Equals(playerSlot.Player, Player.Computer)) { assignablePlayers.Add(Player.Computer); } } } } using (slotView.EnterUpdateScope()) { slotView.AssignablePlayers = assignablePlayers.ToList(); slotView.Slot = playerSlot; } } }
private void OnLocalPlayerJoined(LocalPlayerJoinedEventArgs args) { var localPlayer = args.Player; if (localPlayer == null) { return; } _accessLock.EnterWriteLock(); try { _lobbyData = args.LobbyData; _localPlayer = localPlayer; _isSinglePlayerGame = !_lobbyData.IsMultiplayerGame; _isGameHost = localPlayer.IsGameHost; } finally { _accessLock.ExitWriteLock(); } OnPropertyChanged("LocalPlayer"); OnPropertyChanged("IsGameHost"); OnPropertyChanged("IsSinglePlayerGame"); OnPropertyChanged("LobbyData"); }
private void CreateSlots(ILobbyData lobbyData) { if ((lobbyData == null) || (lobbyData.Slots == null) || (lobbyData.Players == null)) { return; } ClearSlots(); foreach (var slot in lobbyData.Slots) { var slotView = new PlayerSlotView { Slot = slot }; slotView.AssignedPlayerChanged += OnSlotViewAssignedPlayerChanged; slotView.SlotClosed += OnSlotViewSlotClosed; slotView.SlotOpened += OnSlotViewSlotOpened; PlayerInfoPanel.Children.Add(slotView); } UpdateSlots(lobbyData); }
private void OnLobbyUpdated(DataEventArgs <ILobbyData> args) { var lobbyData = args.Value; if (lobbyData != null) { _accessLock.EnterUpgradeableReadLock(); try { _lobbyData = lobbyData; _isSinglePlayerGame = !lobbyData.IsMultiplayerGame; if (_localPlayer != null) { _accessLock.EnterWriteLock(); try { _localPlayer = lobbyData.Players.Where(o => o.PlayerID == _localPlayer.PlayerID).FirstOrDefault(); _remotePlayers = lobbyData.Players.Cast <IPlayer>().Where(o => o != _localPlayer); _allPlayers.Clear(); _allPlayers.AddRange(lobbyData.Players); } finally { _accessLock.ExitWriteLock(); } } } finally { _accessLock.ExitUpgradeableReadLock(); } } OnPropertyChanged("LocalPlayer"); OnPropertyChanged("LocalPlayerEmpire"); OnPropertyChanged("RemotePlayers"); OnPropertyChanged("IsSinglePlayerGame"); }