/// <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; }
/// <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(); }