aboutsummaryrefslogtreecommitdiff
path: root/steamworks-sys
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 /steamworks-sys
parentSkip fields with missing enum types (diff)
downloadsteamworks-rs-7d2ed5ea57f3ea769e659d8c80fd52d60624553e.tar.xz
steamworks-rs-7d2ed5ea57f3ea769e659d8c80fd52d60624553e.zip
Add stats & achievements API
Diffstat (limited to 'steamworks-sys')
-rwxr-xr-xsteamworks-sys/build.rs21
-rw-r--r--steamworks-sys/src/lib.rs35
2 files changed, 47 insertions, 9 deletions
diff --git a/steamworks-sys/build.rs b/steamworks-sys/build.rs
index 80bcf75..d48e409 100755
--- a/steamworks-sys/build.rs
+++ b/steamworks-sys/build.rs
@@ -112,12 +112,12 @@ use libc::*;
}
};
let fty_rust = if fty == "const char*" || fty == "*const char" || fty == "const char *" {
- "*const libc::c_char".into()
+ "*const c_char".into()
} else if fty == "char*" {
- "*mut libc::c_char".into()
+ "*mut c_char".into()
} else if fty == "const char **" {
- "*mut *const libc::c_char".into()
- }else if fty.ends_with("*") {
+ "*mut *const c_char".into()
+ } else if fty.ends_with("*") {
if fty.starts_with("const") {
let trimmed = fty.trim_start_matches("const ").trim_end_matches("*").trim();
format!("*const {}", c_to_rust(trimmed)?.1).into()
@@ -126,9 +126,13 @@ use libc::*;
format!("*mut {}", c_to_rust(trimmed)?.1).into()
}
} else if fty.contains("[") {
- let num_start = fty.chars().position(|v| v == '[').unwrap_or(0);
- let num_end = fty.chars().position(|v| v == ']').unwrap_or(0);
- format!("[{}; {}]", c_to_rust(&fty[..num_start].trim())?.1, &fty[num_start + 1 .. num_end]).into()
+ let open_square = fty.char_indices().find(|ic| ic.1 == '[').unwrap().0;
+ let close_square = fty.char_indices().find(|ic| ic.1 == ']').unwrap().0;
+ format!(
+ "[{}; {}]",
+ c_to_rust(&fty[..open_square].trim())?.1,
+ &fty[open_square + 1..close_square],
+ ).into()
} else if fty.contains("(") {
eprintln!("Unsupported field type function pointer: {:?}", fty);
return None;
@@ -152,6 +156,7 @@ use libc::*;
"uintp" => "usize".into(),
"class CSteamID" => "CSteamID".into(),
"class CGameID" => "CGameID".into(),
+ "char" => "c_char".into(),
val if val.contains("class") => return None,
val => val.into(),
}
@@ -244,4 +249,4 @@ pub struct {} {{"#, packing, derive, s.struct_)?;
.compile("steamrust");
Ok(())
-} \ No newline at end of file
+}
diff --git a/steamworks-sys/src/lib.rs b/steamworks-sys/src/lib.rs
index 4f064a5..fa96442 100644
--- a/steamworks-sys/src/lib.rs
+++ b/steamworks-sys/src/lib.rs
@@ -151,6 +151,39 @@ extern "C" {
pub fn SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(instance: *mut ISteamUserStats, leaderboard: SteamLeaderboard_t, data_request: ELeaderboardDataRequest, start: c_int, end: c_int) -> SteamAPICall_t;
pub fn SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(instance: *mut ISteamUserStats, entries: SteamLeaderboardEntries_t, index: c_int, entry: *mut LeaderboardEntry_t, details: *mut i32, details_max: c_int) -> u8;
+ /// https://partner.steamgames.com/doc/api/ISteamUserStats#RequestCurrentStats
+ ///
+ /// Returns true if successful
+ pub fn SteamAPI_ISteamUserStats_RequestCurrentStats(
+ instance: *mut ISteamUserStats,
+ ) -> bool;
+ /// https://partner.steamgames.com/doc/api/ISteamUserStats#GetAchievement
+ ///
+ /// Returns true if successful
+ pub fn SteamAPI_ISteamUserStats_GetAchievement(
+ instance: *mut ISteamUserStats,
+ name: *const c_char,
+ achieved: *mut bool,
+ ) -> bool;
+ /// https://partner.steamgames.com/doc/api/ISteamUserStats#SetAchievement
+ ///
+ /// Returns true if successful
+ pub fn SteamAPI_ISteamUserStats_SetAchievement(
+ instance: *mut ISteamUserStats,
+ name: *const c_char,
+ ) -> bool;
+ /// https://partner.steamgames.com/doc/api/ISteamUserStats#ClearAchievement
+ ///
+ /// Returns true if successful
+ pub fn SteamAPI_ISteamUserStats_ClearAchievement(
+ instance: *mut ISteamUserStats,
+ name: *const c_char,
+ ) -> bool;
+ /// https://partner.steamgames.com/doc/api/ISteamUserStats#StoreStats
+ ///
+ /// Returns true if successful
+ pub fn SteamAPI_ISteamUserStats_StoreStats(instance: *mut ISteamUserStats) -> bool;
+
pub fn SteamAPI_ISteamGameServer_LogOnAnonymous(instance: *mut ISteamGameServer);
pub fn SteamAPI_ISteamGameServer_SetProduct(instance: *mut ISteamGameServer, product: *const c_char);
pub fn SteamAPI_ISteamGameServer_SetGameDescription(instance: *mut ISteamGameServer, description: *const c_char);
@@ -160,4 +193,4 @@ extern "C" {
pub fn SteamAPI_ISteamGameServer_BeginAuthSession(instance: *mut ISteamGameServer, ticket: *const c_void, ticket_size: *mut u32, steam_id: CSteamID) -> EBeginAuthSessionResult;
pub fn SteamAPI_ISteamGameServer_EndAuthSession(instance: *mut ISteamGameServer, steam_id: CSteamID);
pub fn SteamAPI_ISteamGameServer_CancelAuthTicket(instance: *mut ISteamGameServer, auth_ticket: HAuthTicket);
-} \ No newline at end of file
+}