コード例 #1
0
        /// <summary>
        /// Update friend list.
        /// </summary>
        void UpdateFriendList()
        {
            if (inviteCooldown > 0.0f)
            {
                inviteCooldown -= Time.deltaTime;
            }
            else
            {
                // Reset invited friend steam id.

                invitedFriendSteamId.Clear();
            }

            timeToUpdateFriendList -= Time.deltaTime;
            if (timeToUpdateFriendList > 0.0f)
            {
                return;
            }

            onlineFriends.Clear();

            Steamworks.EFriendFlags friendFlags =
                Steamworks.EFriendFlags.k_EFriendFlagImmediate;
            int friendsCount = Steamworks.SteamFriends.GetFriendCount(friendFlags);

            for (int i = 0; i < friendsCount; ++i)
            {
                Steamworks.CSteamID friendSteamId =
                    Steamworks.SteamFriends.GetFriendByIndex(i, friendFlags);

                if (Steamworks.SteamFriends.GetFriendPersonaState(friendSteamId) ==
                    Steamworks.EPersonaState.k_EPersonaStateOffline)
                {
                    continue;
                }

                FriendEntry friend = new FriendEntry();
                friend.steamId = friendSteamId;
                friend.name    = Steamworks.SteamFriends.GetFriendPersonaName(friendSteamId);

                Steamworks.FriendGameInfo_t gameInfo;
                Steamworks.SteamFriends.GetFriendGamePlayed(friendSteamId, out gameInfo);
                friend.playingMSC = (gameInfo.m_gameID.AppID() == Client.GAME_APP_ID);

                if (friend.playingMSC)
                {
                    onlineFriends.Insert(0, friend);
                }
                else
                {
                    onlineFriends.Add(friend);
                }
            }

            timeToUpdateFriendList = FRIENDLIST_UPDATE_INTERVAL;
        }
コード例 #2
0
ファイル: MPController.cs プロジェクト: kuppa213/MSCMP
        /// <summary>
        /// Updates invite panel IMGUI.
        /// </summary>
        private void UpdateInvitePanel()
        {
            if (!netManager.IsHost || netManager.IsNetworkPlayerConnected())
            {
                friendStateOverride.Clear();
                return;
            }

            GUI.color = Color.white;

            Steamworks.EFriendFlags friendFlags = Steamworks.EFriendFlags.k_EFriendFlagImmediate;
            int friendsCount = Steamworks.SteamFriends.GetFriendCount(friendFlags);

            List <Steamworks.CSteamID> onlineFriends = new List <Steamworks.CSteamID>();

            for (int i = 0; i < friendsCount; ++i)
            {
                Steamworks.CSteamID friendSteamId = Steamworks.SteamFriends.GetFriendByIndex(i, friendFlags);

                if (Steamworks.SteamFriends.GetFriendPersonaState(friendSteamId) == Steamworks.EPersonaState.k_EPersonaStateOffline)
                {
                    continue;
                }

                onlineFriends.Add(friendSteamId);
            }

            int onlineFriendsCount = onlineFriends.Count;

            friendsScrollViewPos = GUI.BeginScrollView(new Rect(0, 30.0f, 270.0f, 400.0f), friendsScrollViewPos, new Rect(0, 0, 260.0f, 20.0f * (1 + onlineFriendsCount)));

            for (int i = 0; i < onlineFriendsCount; ++i)
            {
                Steamworks.CSteamID friendSteamId = onlineFriends[i];

                string friendName = Steamworks.SteamFriends.GetFriendPersonaName(friendSteamId);

                Rect friendRect = new Rect(2, 1 + 20 * i, 200.0f, 20);

                // TODO: Draw nice state here - for now let's assume all players are ready to join.
                string state = "";
                if (friendStateOverride.ContainsKey(friendSteamId))
                {
                    state = " - " + friendStateOverride[friendSteamId];
                }

                GUI.Label(friendRect, friendName + state);

                friendRect.x    += 200.0f;
                friendRect.width = 50.0f;

                if (GUI.Button(friendRect, "Invite"))
                {
                    if (netManager.InviteToMyLobby(friendSteamId))
                    {
                        friendStateOverride.Add(friendSteamId, "INVITED!");
                    }
                    else
                    {
                        friendStateOverride.Add(friendSteamId, "FAILED TO INVITE");
                    }
                }
            }

            GUI.EndScrollView();
        }