diff options
| author | Alex Butler <[email protected]> | 2019-05-16 11:59:20 +0100 |
|---|---|---|
| committer | Matthew Collins <[email protected]> | 2019-05-16 17:35:04 +0100 |
| commit | 7d2ed5ea57f3ea769e659d8c80fd52d60624553e (patch) | |
| tree | 3156afb74c6f2249bd1beb37cb9761b1c40b723e /steamworks-sys | |
| parent | Skip fields with missing enum types (diff) | |
| download | steamworks-rs-7d2ed5ea57f3ea769e659d8c80fd52d60624553e.tar.xz steamworks-rs-7d2ed5ea57f3ea769e659d8c80fd52d60624553e.zip | |
Add stats & achievements API
Diffstat (limited to 'steamworks-sys')
| -rwxr-xr-x | steamworks-sys/build.rs | 21 | ||||
| -rw-r--r-- | steamworks-sys/src/lib.rs | 35 |
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 +} |