43 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|