summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/intermediate.h11
-rw-r--r--src/intermediate.c45
-rw-r--r--src/main.c27
3 files changed, 83 insertions, 0 deletions
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