First commit for private source control. Older commits available on Github.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user