From 0974ff30789a215a31255080251c01eaaf9a5297 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Thu, 5 Dec 2024 11:42:11 +0100 Subject: link with steam sdk and create bindings --- src/include/intermediate.h | 11 +++++++++++ src/intermediate.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 27 +++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 src/include/intermediate.h create mode 100644 src/intermediate.c (limited to 'src') diff --git a/src/include/intermediate.h b/src/include/intermediate.h new file mode 100644 index 0000000..d3188e4 --- /dev/null +++ b/src/include/intermediate.h @@ -0,0 +1,11 @@ +#ifndef INCLUDE_INTERMEDIATE +#define INCLUDE_INTERMEDIATE + +char STEAM_SteamAPI_Init(); +void STEAM_SteamAPI_ReleaseCurrentThreadMemory(); +char STEAM_SteamAPI_RestartAppIfNecessary(u32 unOwnAppID); +void STEAM_SteamAPI_RunCallbacks(); +u64 STEAM_SteamAPI_RequestUserStats(); +void STEAM_SteamAPI_Shutdown(); + +#endif \ No newline at end of file diff --git a/src/intermediate.c b/src/intermediate.c new file mode 100644 index 0000000..09edf10 --- /dev/null +++ b/src/intermediate.c @@ -0,0 +1,45 @@ +#include "steam/steam_api_flat.h" + +extern "C" char STEAM_SteamAPI_Init() +{ + return SteamAPI_Init(); +} + +extern "C" void STEAM_SteamAPI_Shutdown() +{ + return SteamAPI_Shutdown(); +} + +extern "C" void STEAM_SteamAPI_ReleaseCurrentThreadMemory() +{ + return SteamAPI_ReleaseCurrentThreadMemory(); +} + +extern "C" char STEAM_SteamAPI_RestartAppIfNecessary(uint32 unOwnAppID) +{ + return SteamAPI_RestartAppIfNecessary(unOwnAppID); +} + +extern "C" void STEAM_SteamAPI_RunCallbacks() +{ + SteamAPI_RunCallbacks(); +} + +extern "C" uint64_steamid STEAM_SteamAPI_RequestUserStats() +{ + uint64_steamid id = SteamAPI_ISteamUser_GetSteamID(SteamAPI_SteamUser()); + ISteamUserStats* stats = SteamAPI_SteamUserStats(); + SteamAPI_ISteamUserStats_RequestUserStats(stats, id); + return id; +} + +extern "C" void STEAM_SteamAPI_UnlockAchievement(const char* name) +{ + ISteamUserStats* stats = SteamAPI_SteamUserStats(); + + bool alreadyAchieved; + SteamAPI_ISteamUserStats_GetAchievement(stats, name, &alreadyAchieved); + SteamAPI_ISteamUserStats_SetAchievement(stats, name); + + if (!alreadyAchieved) SteamAPI_ISteamUserStats_StoreStats(stats); +} \ No newline at end of file diff --git a/src/main.c b/src/main.c index e93a4da..159dcc7 100644 --- a/src/main.c +++ b/src/main.c @@ -29,6 +29,8 @@ font* fnt_rd48; #define CONFIG_DIRECTORY "trucker_x" +#include "include/intermediate.h" + #include "include/settings.h" #include "include/ui/colors.h" #include "include/ui/animation.h" @@ -144,6 +146,19 @@ int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* ignore int main(int argc, char** argv) { + if (!STEAM_SteamAPI_Init()) { + log_info("Failed to init steam."); + return 1; + } + + if (STEAM_SteamAPI_RestartAppIfNecessary(480)) { + log_info("Game required restart from Steam."); + return 1; + } + + u64 steam_id = STEAM_SteamAPI_RequestUserStats(); + log_infox("User steam ID: %llu", steam_id); + platform_init(argc, argv, CONFIG_DIRECTORY); #define VALIDATE_VOLUME(_vol) if (_vol < 0.0f) _vol = 0.0f; else if (_vol > 1.0f) _vol = 1.0f; @@ -174,9 +189,19 @@ int main(int argc, char** argv) audio_set_mixer_volume(AUDIO_CHANNEL_SFX_1, volume_sfx*volume_global); audio_set_mixer_volume(AUDIO_CHANNEL_SFX_2, volume_sfx*volume_global); + double running_time = 0.0f; while(platform_keep_running(main_window)) { + STEAM_SteamAPI_RunCallbacks(); + main_window->do_draw = true; platform_handle_events(); + + running_time += frame_delta; + if (running_time > 120) { // Refresh user stats every 2 min as steam will unload stats after a while and we wont be able to set achievements. + running_time = 0.0f; + STEAM_SteamAPI_RequestUserStats(); + log_info("Refreshed Steam user stats."); + } } settings_set_number("window_w", main_window->width); @@ -190,5 +215,7 @@ int main(int argc, char** argv) settings_write_to_file(); platform_destroy(); + STEAM_SteamAPI_Shutdown(); + return 0; } \ No newline at end of file -- cgit v1.2.3-70-g09d2