Ejemplo n.º 1
0
        internal void InternalPersonaStateChanged(SteamPlayer player, EOnlinePlayerChangedFlags flags)
        {
            if (player.isUpdatePending)
            {
                return;
            }

            if (DispatchAsyncPlayerGetCallbacks(player))
            {
                player.Dispose();
            }

            player.InvokePlayerChangedCallbacks(flags);

            if (_changedCallbacks != null)
            {
                if (_changedCallbacks.Count > 0)
                {
                    player.CheckDisposed();
                }
                for (int i = _changedCallbacks.Count - 1; i >= 0; --i)
                {
                    _changedCallbacks[i](player, flags);
                }
            }
        }
Ejemplo n.º 2
0
        void FriendshipChanged(SteamPlayer player, EOnlinePlayerChangedFlags flags)
        {
            bool doCallbacks = false;
            bool dispose     = false;

            if ((flags & EOnlinePlayerChangedFlags.FriendAdded) != 0)
            {
                if (!_friends.Contains(player))
                {
                    player.AddRef();
                    _friends.Add(player);
                    _friendSet.Add(player.id.uuid);
                    doCallbacks = true;
                }
            }
            else if (_friends.Remove(player))
            {
                _friendSet.Remove(player.id.uuid);
                doCallbacks = true;
                dispose     = true;
            }

            if (doCallbacks)
            {
                for (int i = _friendChangedCallbacks.Count - 1; i >= 0; --i)
                {
                    _friendChangedCallbacks[i](player, flags);
                }
            }

            if (dispose)
            {
                player.Dispose();
            }
        }
Ejemplo n.º 3
0
        static EOnlinePlayerChangedFlags GetChangedFlags(PersonaStateChange_t param)
        {
            EOnlinePlayerChangedFlags flags = 0;

            if ((param.m_nChangeFlags & EPersonaChange.k_EPersonaChangeAvatar) != 0)
            {
                flags |= EOnlinePlayerChangedFlags.Avatar;
            }
            if ((param.m_nChangeFlags & EPersonaChange.k_EPersonaChangeStatus) != 0)
            {
                flags |= EOnlinePlayerChangedFlags.Status;
            }
            if ((param.m_nChangeFlags & (EPersonaChange.k_EPersonaChangeName | EPersonaChange.k_EPersonaChangeNickname)) != 0)
            {
                flags |= EOnlinePlayerChangedFlags.Name;
            }
            if ((param.m_nChangeFlags & EPersonaChange.k_EPersonaChangeRelationshipChanged) != 0)
            {
                var relationship = SteamFriends.GetFriendRelationship(new CSteamID(param.m_ulSteamID));
                switch (relationship)
                {
                case EFriendRelationship.k_EFriendRelationshipFriend:
                    flags |= EOnlinePlayerChangedFlags.FriendAdded;
                    break;

                case EFriendRelationship.k_EFriendRelationshipNone:
                    flags |= EOnlinePlayerChangedFlags.FriendRemoved;
                    break;
                }
            }

            return(flags);
        }
Ejemplo n.º 4
0
 internal void InvokePlayerChangedCallbacks(EOnlinePlayerChangedFlags whatChanged)
 {
     if (_changedCallbacks != null)
     {
         for (int i = _changedCallbacks.Count - 1; i >= 0; --i)
         {
             _changedCallbacks[i](this, whatChanged);
         }
     }
 }