This commit is contained in:
2026-07-05 02:10:44 +08:00
parent f1720ab889
commit e4fae4dbc8
115 changed files with 9453 additions and 390 deletions
@@ -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;