From 1a47b32458d762252ee1ccbec81f34c79b8ea70c Mon Sep 17 00:00:00 2001 From: Garry Newman Date: Sun, 25 Jun 2017 11:51:53 +0100 Subject: [PATCH] Fixed Friend.IsOnline not working, added IsAway, IsBusy, IsSnoozing --- Facepunch.Steamworks/Client/Friends.cs | 34 +++++++++++++++++++------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/Facepunch.Steamworks/Client/Friends.cs b/Facepunch.Steamworks/Client/Friends.cs index 82354f2..d579837 100644 --- a/Facepunch.Steamworks/Client/Friends.cs +++ b/Facepunch.Steamworks/Client/Friends.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using SteamNative; namespace Facepunch.Steamworks { @@ -32,12 +33,12 @@ namespace Facepunch.Steamworks /// /// Return true if blocked /// - public bool IsBlocked { get; internal set; } + public bool IsBlocked => relationship == FriendRelationship.Blocked; /// /// Return true if is a friend. Returns false if blocked, request etc. /// - public bool IsFriend { get; internal set; } + public bool IsFriend => relationship == FriendRelationship.Friend; /// /// Their current display name @@ -47,17 +48,32 @@ namespace Facepunch.Steamworks /// /// Returns true if this friend is online /// - public bool IsOnline { get; internal set; } + public bool IsOnline => personaState != PersonaState.Offline; + + /// + /// Returns true if this friend is marked as away + /// + public bool IsAway => personaState == PersonaState.Away; + + /// + /// Returns true if this friend is marked as busy + /// + public bool IsBusy => personaState == PersonaState.Busy; + + /// + /// Returns true if this friend is marked as snoozing + /// + public bool IsSnoozing => personaState == PersonaState.Snooze; /// /// Returns true if this friend is online and playing this game /// - public bool IsPlayingThisGame { get { return CurrentAppId == Client.AppId; } } + public bool IsPlayingThisGame => CurrentAppId == Client.AppId; /// /// Returns true if this friend is online and playing this game /// - public bool IsPlaying { get { return CurrentAppId != 0; } } + public bool IsPlaying => CurrentAppId != 0; /// /// The AppId this guy is playing @@ -70,6 +86,8 @@ namespace Facepunch.Steamworks public ulong ServerLobbyId { get; internal set; } internal Client Client { get; set; } + private PersonaState personaState; + private FriendRelationship relationship; /// /// Returns null if the value doesn't exist @@ -88,10 +106,8 @@ namespace Facepunch.Steamworks { Name = Client.native.friends.GetFriendPersonaName( Id ); - SteamNative.FriendRelationship relationship = (SteamNative.FriendRelationship) Client.native.friends.GetFriendRelationship( Id ); - - IsBlocked = relationship == SteamNative.FriendRelationship.Blocked; - IsFriend = relationship == SteamNative.FriendRelationship.Friend; + relationship = Client.native.friends.GetFriendRelationship( Id ); + personaState = Client.native.friends.GetFriendPersonaState( Id ); CurrentAppId = 0; ServerIp = 0;