aboutsummaryrefslogtreecommitdiff
path: root/src/user_stats.rs
diff options
context:
space:
mode:
authorAlex Butler <[email protected]>2019-05-16 11:59:20 +0100
committerMatthew Collins <[email protected]>2019-05-16 17:35:04 +0100
commit7d2ed5ea57f3ea769e659d8c80fd52d60624553e (patch)
tree3156afb74c6f2249bd1beb37cb9761b1c40b723e /src/user_stats.rs
parentSkip fields with missing enum types (diff)
downloadarchived-steamworks-rs-7d2ed5ea57f3ea769e659d8c80fd52d60624553e.tar.xz
archived-steamworks-rs-7d2ed5ea57f3ea769e659d8c80fd52d60624553e.zip
Add stats & achievements API
Diffstat (limited to 'src/user_stats.rs')
-rw-r--r--src/user_stats.rs33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/user_stats.rs b/src/user_stats.rs
index 745b76a..2ab976b 100644
--- a/src/user_stats.rs
+++ b/src/user_stats.rs
@@ -1,4 +1,7 @@
+pub mod stats;
+mod stat_callback;
+pub use self::stat_callback::*;
use super::*;
/// Access to the steam user interface
@@ -141,6 +144,34 @@ impl <Manager> UserStats<Manager> {
});
}
}
+
+ /// Triggers a [`UserStatsReceived`](./struct.UserStatsReceived.html) callback.
+ pub fn request_current_stats(&self) {
+ unsafe { sys::SteamAPI_ISteamUserStats_RequestCurrentStats(self.user_stats); }
+ }
+
+ /// Send the changed stats and achievements data to the server for permanent storage.
+ ///
+ /// * Triggers a [`UserStatsStored`](../struct.UserStatsStored.html) callback if successful.
+ /// * Triggers a [`UserAchievementStored`](../struct.UserAchievementStored.html) callback
+ /// if achievements have been unlocked.
+ ///
+ /// Requires [`request_current_stats()`](#method.request_current_stats) to have been called
+ /// and a successful [`UserStatsReceived`](./struct.UserStatsReceived.html) callback processed.
+ pub fn store_stats(&self) -> Result<(), ()> {
+ let success = unsafe { sys::SteamAPI_ISteamUserStats_StoreStats(self.user_stats) };
+ if success { Ok(()) } else { Err(()) }
+ }
+
+ /// Access achievement API for a given achievement 'API Name'.
+ ///
+ /// Requires [`request_current_stats()`](#method.request_current_stats) to have been called
+ /// and a successful [`UserStatsReceived`](./struct.UserStatsReceived.html) callback processed.
+ #[inline]
+ #[must_use]
+ pub fn achievement(&self, name: &str) -> stats::AchievementHelper<'_, Manager> {
+ stats::AchievementHelper { name: CString::new(name).unwrap(), parent: self }
+ }
}
#[derive(Debug)]
@@ -211,4 +242,4 @@ fn test() {
single.run_callbacks();
::std::thread::sleep(::std::time::Duration::from_millis(100));
}
-} \ No newline at end of file
+}