1
This commit is contained in:
@@ -29,14 +29,20 @@ public class GameManager : MonoSingleton<GameManager>
|
||||
/// </summary>
|
||||
/// <summary>头像更新事件</summary>
|
||||
public event Action<Sprite> OnAvatarChanged;
|
||||
/// <summary>头像框更新事件</summary>
|
||||
public event Action<Sprite> OnAvatarFrameChanged;
|
||||
/// <summary>用户数据更新事件(金币/钻石/等级等发生变化时触发)</summary>
|
||||
public event Action OnUserDataChanged;
|
||||
|
||||
/// <summary>头像字典(name → sprite),从 Resources/Avatar 加载</summary>
|
||||
private Dictionary<string, Sprite> avatarSpriteDict = new Dictionary<string, Sprite>();
|
||||
/// <summary>头像框字典(name → sprite),从 Resources/AvatarK 加载</summary>
|
||||
private Dictionary<string, Sprite> avatarFrameDict = new Dictionary<string, Sprite>();
|
||||
|
||||
/// <summary>默认头像(新账号无头像时使用)</summary>
|
||||
private Sprite defaultAvatar;
|
||||
/// <summary>默认头像框</summary>
|
||||
private Sprite defaultAvatarFrame;
|
||||
|
||||
/// <summary>触发头像更新事件</summary>
|
||||
public void TriggerAvatarChanged(Sprite sprite)
|
||||
@@ -114,6 +120,63 @@ public class GameManager : MonoSingleton<GameManager>
|
||||
});
|
||||
}
|
||||
|
||||
// ==================== 头像框 ====================
|
||||
|
||||
/// <summary>触发头像框更新事件</summary>
|
||||
public void TriggerAvatarFrameChanged(Sprite sprite)
|
||||
{
|
||||
OnAvatarFrameChanged?.Invoke(sprite);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化头像框缓存(从 Resources/AvatarK 加载所有Sprite)
|
||||
/// </summary>
|
||||
public void InitAvatarFrameCache()
|
||||
{
|
||||
avatarFrameDict.Clear();
|
||||
var sprites = Resources.LoadAll<Sprite>("AvatarK");
|
||||
foreach (var s in sprites)
|
||||
avatarFrameDict[s.name] = s;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据名称获取头像框 Sprite
|
||||
/// </summary>
|
||||
public Sprite GetAvatarFrameSprite(string avatarFrameName)
|
||||
{
|
||||
if (avatarFrameDict.Count == 0) InitAvatarFrameCache();
|
||||
if (string.IsNullOrEmpty(avatarFrameName) || !avatarFrameDict.TryGetValue(avatarFrameName, out var sprite))
|
||||
sprite = GetDefaultAvatarFrame();
|
||||
return sprite;
|
||||
}
|
||||
|
||||
private Sprite GetDefaultAvatarFrame()
|
||||
{
|
||||
if (defaultAvatarFrame == null && avatarFrameDict.Count > 0)
|
||||
{
|
||||
foreach (var kv in avatarFrameDict)
|
||||
{
|
||||
defaultAvatarFrame = kv.Value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return defaultAvatarFrame;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更换头像框:上传服务端 → 更新本地 → 触发全局刷新
|
||||
/// </summary>
|
||||
public void ApplyAvatarFrame(string avatarFrameName)
|
||||
{
|
||||
APIRequestList.UpdateAvatarFrame(avatarFrameName, (result) =>
|
||||
{
|
||||
user.BaseInfo.avatarFrame = avatarFrameName;
|
||||
|
||||
var sprite = GetAvatarFrameSprite(avatarFrameName);
|
||||
TriggerAvatarFrameChanged(sprite);
|
||||
});
|
||||
}
|
||||
|
||||
public void UpdataUserData(UserData user)
|
||||
{
|
||||
this.user = user;
|
||||
|
||||
Reference in New Issue
Block a user