Add achievement system with unlock and UI popup functionality (#8)
This commit is contained in:
77
Autoloads/SteamManager.cs
Normal file
77
Autoloads/SteamManager.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using Godot;
|
||||
using Steamworks;
|
||||
using Steamworks.Data;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class SteamManager : Node
|
||||
{
|
||||
private const uint AppId = 3575090;
|
||||
|
||||
public static string PlayerName { get; private set; } = "Player";
|
||||
public static bool IsSteamInitialized { get; private set; } = false;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
try
|
||||
{
|
||||
SteamClient.Init(AppId);
|
||||
IsSteamInitialized = true;
|
||||
|
||||
PlayerName = SteamClient.Name;
|
||||
|
||||
GD.Print($"Steam initialized successfully for user: {PlayerName}");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
GD.PushError("Failed to initialize Steamworks. Is Steam running?");
|
||||
GD.PushError(e.Message);
|
||||
IsSteamInitialized = false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (IsSteamInitialized) SteamClient.RunCallbacks();
|
||||
}
|
||||
|
||||
public override void _Notification(int what)
|
||||
{
|
||||
if (what == NotificationWMCloseRequest)
|
||||
{
|
||||
if (IsSteamInitialized)
|
||||
{
|
||||
SteamClient.Shutdown();
|
||||
}
|
||||
GetTree().Quit();
|
||||
}
|
||||
}
|
||||
|
||||
public static void UnlockAchievement(string achievementId)
|
||||
{
|
||||
if (!IsSteamInitialized)
|
||||
{
|
||||
GD.Print($"Steam not initialized. Cannot unlock achievement '{achievementId}'.");
|
||||
return;
|
||||
}
|
||||
|
||||
var ach = new Achievement(achievementId);
|
||||
|
||||
if (ach.State)
|
||||
{
|
||||
GD.Print($"Achievement '{achievementId}' is already unlocked.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ach.Trigger())
|
||||
{
|
||||
SteamUserStats.StoreStats();
|
||||
GD.Print($"Successfully triggered achievement: {ach.Name} ({ach.Identifier})");
|
||||
}
|
||||
else
|
||||
{
|
||||
GD.PrintErr($"Failed to trigger achievement: {achievementId}");
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user