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(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(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(); } } }