Files
A-Fairytale-Gone-Bad-Briar-…/Assets/Scripts/Framework/Managers/Achievements/Steam/SteamManager.cs

69 lines
2.0 KiB
C#

using System;
using System.Linq;
using BriarQueen.Framework.Coordinators.Events;
using BriarQueen.Framework.Events.Progression;
using BriarQueen.Framework.Registries;
using Steamworks;
using UnityEngine;
using VContainer;
namespace BriarQueen.Framework.Managers.Achievements.Steam
{
public class SteamManager : IDisposable, IManager
{
private const uint STEAM_APP_ID = 0;
private readonly AchievementRegistry _achievementRegistry;
private readonly EventCoordinator _eventCoordinator;
public bool Initialized { get; private set; }
[Inject]
public SteamManager(EventCoordinator eventCoordinator, AchievementRegistry achievementRegistry)
{
_eventCoordinator = eventCoordinator;
_achievementRegistry = achievementRegistry;
}
public void Dispose()
{
_eventCoordinator.Unsubscribe<UnlockAchievementEvent>(OnUnlockAchievement);
}
public void Initialize()
{
try
{
SteamClient.Init(STEAM_APP_ID);
Initialized = true;
}
catch (Exception e)
{
Debug.Log($"[Steam Manager] Steam Failed to Init {e.Message}");
return;
}
_eventCoordinator.Subscribe<UnlockAchievementEvent>(OnUnlockAchievement);
}
private void OnUnlockAchievement(UnlockAchievementEvent evt)
{
if (!_achievementRegistry.TryGetAchievement(evt.AchievementID, out var achievement))
return;
var steamAch =
SteamUserStats.Achievements.FirstOrDefault(x => x.Identifier == achievement.SteamUniqueIdentifier);
if (string.IsNullOrEmpty(steamAch.Identifier))
{
Debug.LogWarning($"Steam achievement '{evt.AchievementID}' not found in Steamworks.");
return;
}
if (steamAch.State) return;
steamAch.Trigger();
}
}
}