77 lines
1.9 KiB
C#
77 lines
1.9 KiB
C#
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}");
|
|
}
|
|
}
|
|
} |