69 lines
2.0 KiB
C#
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();
|
|
}
|
|
}
|
|
} |