mirror of
https://github.com/Facepunch/Facepunch.Steamworks.git
synced 2024-12-25 14:15:47 +03:00
Fixed avatar downloading
This commit is contained in:
parent
8d410969c3
commit
70c1513c19
@ -50,16 +50,23 @@ public void Avatar()
|
|||||||
{
|
{
|
||||||
Assert.IsTrue( client.IsValid );
|
Assert.IsTrue( client.IsValid );
|
||||||
|
|
||||||
var friend = client.Friends.All.First();
|
ulong id = (ulong)( 76561197960279927 + (new Random().Next() % 10000));
|
||||||
bool passed = false;
|
bool passed = false;
|
||||||
|
|
||||||
client.Friends.GetAvatar( Steamworks.Friends.AvatarSize.Medium, friend.Id, (avatar) =>
|
client.Friends.GetAvatar( Steamworks.Friends.AvatarSize.Medium, id, ( avatar) =>
|
||||||
|
{
|
||||||
|
if ( avatar == null )
|
||||||
|
{
|
||||||
|
Console.WriteLine( "No Avatar" );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
Assert.AreEqual( avatar.Width, 64 );
|
Assert.AreEqual( avatar.Width, 64 );
|
||||||
Assert.AreEqual( avatar.Height, 64 );
|
Assert.AreEqual( avatar.Height, 64 );
|
||||||
Assert.AreEqual( avatar.Data.Length, avatar.Width * avatar.Height * 4 );
|
Assert.AreEqual( avatar.Data.Length, avatar.Width * avatar.Height * 4 );
|
||||||
|
|
||||||
DrawImage( avatar );
|
DrawImage( avatar );
|
||||||
|
}
|
||||||
passed = true;
|
passed = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -105,6 +112,7 @@ public static void DrawImage( Image img )
|
|||||||
|
|
||||||
var brightness = 1 - ((float)(p.r + p.g + p.b) / (255.0f * 3.0f));
|
var brightness = 1 - ((float)(p.r + p.g + p.b) / (255.0f * 3.0f));
|
||||||
var c = (int) ((grad.Length) * brightness);
|
var c = (int) ((grad.Length) * brightness);
|
||||||
|
if ( c > 3 ) c = 3;
|
||||||
str += grad[c];
|
str += grad[c];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -145,6 +145,7 @@ public override void Update()
|
|||||||
|
|
||||||
RunCallbacks();
|
RunCallbacks();
|
||||||
Voice.Update();
|
Voice.Update();
|
||||||
|
Friends.Cycle();
|
||||||
|
|
||||||
base.Update();
|
base.Update();
|
||||||
}
|
}
|
||||||
|
@ -292,21 +292,24 @@ public Image GetCachedAvatar( AvatarSize size, ulong steamid )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( imageid == 0 || imageid == 2 )
|
||||||
|
return null;
|
||||||
|
|
||||||
var img = new Image()
|
var img = new Image()
|
||||||
{
|
{
|
||||||
Id = imageid
|
Id = imageid
|
||||||
};
|
};
|
||||||
|
|
||||||
if (imageid != 0 && img.TryLoad(client.native.utils))
|
if ( !img.TryLoad( client.native.utils ) )
|
||||||
return img;
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback will be called when the avatar is ready. If we fail to get an
|
/// Callback will be called when the avatar is ready. If we fail to get an
|
||||||
/// avatar, it'll be called with a null Image.
|
/// avatar, might be called with a null Image.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void GetAvatar( AvatarSize size, ulong steamid, Action<Image> callback )
|
public void GetAvatar( AvatarSize size, ulong steamid, Action<Image> callback )
|
||||||
{
|
{
|
||||||
@ -329,17 +332,18 @@ public void GetAvatar( AvatarSize size, ulong steamid, Action<Image> callback )
|
|||||||
PersonaCallbacks.Add( new PersonaCallback
|
PersonaCallbacks.Add( new PersonaCallback
|
||||||
{
|
{
|
||||||
SteamId = steamid,
|
SteamId = steamid,
|
||||||
Callback = () =>
|
Size = size,
|
||||||
{
|
Callback = callback,
|
||||||
callback( GetCachedAvatar(size, steamid) );
|
Time = DateTime.Now
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PersonaCallback
|
private class PersonaCallback
|
||||||
{
|
{
|
||||||
public ulong SteamId;
|
public ulong SteamId;
|
||||||
public Action Callback;
|
public AvatarSize Size;
|
||||||
|
public Action<Image> Callback;
|
||||||
|
public DateTime Time;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PersonaCallback> PersonaCallbacks = new List<PersonaCallback>();
|
List<PersonaCallback> PersonaCallbacks = new List<PersonaCallback>();
|
||||||
@ -357,9 +361,49 @@ public SteamFriend Get( ulong steamid )
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void Cycle()
|
||||||
|
{
|
||||||
|
if ( PersonaCallbacks.Count == 0 ) return;
|
||||||
|
|
||||||
|
var timeOut = DateTime.Now.AddSeconds( -10 );
|
||||||
|
|
||||||
|
for ( int i = 0; i < PersonaCallbacks.Count; i++ )
|
||||||
|
{
|
||||||
|
var cb = PersonaCallbacks[i];
|
||||||
|
|
||||||
|
// Timeout
|
||||||
|
if ( cb.Time < timeOut )
|
||||||
|
{
|
||||||
|
if ( cb.Callback != null )
|
||||||
|
{
|
||||||
|
cb.Callback( null );
|
||||||
|
}
|
||||||
|
|
||||||
|
PersonaCallbacks.Remove( cb );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnPersonaStateChange( PersonaStateChange_t data )
|
private void OnPersonaStateChange( PersonaStateChange_t data )
|
||||||
{
|
{
|
||||||
// HUH
|
if ( (data.ChangeFlags & 0x0040) != 0x0040 ) return; // wait for k_EPersonaChangeAvatar
|
||||||
|
|
||||||
|
for ( int i=0; i< PersonaCallbacks.Count; i++ )
|
||||||
|
{
|
||||||
|
var cb = PersonaCallbacks[i];
|
||||||
|
if ( cb.SteamId != data.SteamID ) continue;
|
||||||
|
|
||||||
|
var image = GetCachedAvatar( cb.Size, cb.SteamId );
|
||||||
|
if ( image == null ) continue;
|
||||||
|
|
||||||
|
PersonaCallbacks.Remove( cb );
|
||||||
|
|
||||||
|
if ( cb.Callback != null )
|
||||||
|
{
|
||||||
|
cb.Callback( image );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user