コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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");
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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");
        }