Files
HelperLib/OmegaLeo.HelperLib.Steamworks/AchievementManager.cs
T
2026-04-13 23:49:07 +01:00

43 lines
1.8 KiB
C#

using Microsoft.Extensions.Logging;
using OmegaLeo.HelperLib.Shared.Attributes;
namespace OmegaLeo.HelperLib.Steamworks
{
[Documentation(nameof(AchievementManager), "Provides helper methods for unlocking and querying Steam achievements.", null,
@"```csharp
var achievements = new AchievementManager(logger);
achievements.UnlockAchievement(""ACH_WIN_ONE_GAME"");
```")]
public class AchievementManager
{
private readonly ILogger _logger;
public AchievementManager(ILogger logger = null)
{
_logger = logger ?? SteamManager.Logger;
}
[Documentation(nameof(UnlockAchievement), "Attempts to unlock the provided achievement and store user stats.", new[] { "achievementId: Steam achievement identifier to unlock." }, null)]
public void UnlockAchievement(string achievementId)
{
if (SteamManager.Instance.IsSteamworksInitialized)
{
SteamNativeApi.SetAchievement(achievementId);
SteamNativeApi.StoreStats(); // Don't forget to store the stats
_logger.LogInformation("Attempting to unlock achievement: {AchievementId}", achievementId);
}
}
[Documentation(nameof(IsAchievementUnlocked), "Checks whether a Steam achievement is currently unlocked.", new[] { "achievementId: Steam achievement identifier to check.", "unlocked: True when the achievement is unlocked." }, null)]
public bool IsAchievementUnlocked(string achievementId, out bool unlocked)
{
unlocked = false;
if (SteamManager.Instance.IsSteamworksInitialized)
{
return SteamNativeApi.GetAchievement(achievementId, out unlocked);
}
return false;
}
}
}