X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=steam.h;h=dadcd90309e6ace26db0dc668d5f7c9b29fda0a1;hb=76315944e5a98838163e0aba8601ed3522f0724d;hp=969f632aadeb0500de27fe474f72ee63efb03794;hpb=be8ea6efdbfd9c0fdad97401ed7d92041d8c8778;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/steam.h b/steam.h index 969f632..dadcd90 100644 --- a/steam.h +++ b/steam.h @@ -16,16 +16,6 @@ #include "vg/vg_steam_user_stats.h" #include "submodules/anyascii/impl/c/anyascii.c" -enum steam_controller_type{ - k_steam_controller_type_keyboard, - k_steam_controller_type_xbox, - k_steam_controller_type_playstation, - k_steam_controller_type_steam, - k_steam_controller_type_steam_deck -}; - -VG_STATIC enum steam_controller_type steam_display_controller; - /* * We only want to use steamworks if building for the networked version, * theres not much point otherwise. We mainly want steamworks for setting @@ -37,9 +27,9 @@ VG_STATIC enum steam_controller_type steam_display_controller; * nothing. */ -VG_STATIC char steam_username_at_startup[128]; +static char steam_username_at_startup[128] = "Unassigned"; -VG_STATIC void recv_steam_warning( int severity, const char *msg ) +static void recv_steam_warning( int severity, const char *msg ) { if( severity == 0 ) vg_low( "%s\n", msg ); @@ -47,34 +37,46 @@ VG_STATIC void recv_steam_warning( int severity, const char *msg ) vg_info( "%s\n", msg ); } -VG_STATIC int steam_ready = 0, - steam_stats_ready = 0; +static int steam_ready = 0, + steam_stats_ready = 0; -VG_STATIC void *hSteamNetworkingSockets, +static void *hSteamNetworkingSockets, *hSteamUser; -VG_STATIC ISteamUserStats *hSteamUserStats; -VG_STATIC HSteamPipe hSteamClientPipe; +static ISteamUserStats *hSteamUserStats; +static HSteamPipe hSteamClientPipe; -VG_STATIC const char *steam_achievement_names[] = +static const char *steam_achievement_names[] = { - "ALBERT", "MARC", + "ALBERT", "MARC", "JANET", "BERNADETTA", "ROUTE_MPY", "ROUTE_MPG", "ROUTE_MPB", "ROUTE_MPR", - "ROUTE_TO", "ROUTE_TC" + "ROUTE_TO", "ROUTE_TC", "CITY_COMPLETE", "MTZERO_SILVER", "MTZERO_GOLD", + "80FT" }; -VG_STATIC void steam_store_achievements(void) +static void steam_store_achievements(void) { if( steam_ready && steam_stats_ready ){ SteamAPI_ISteamUserStats_StoreStats( hSteamUserStats ); } } -VG_STATIC void steam_set_achievement( const char *name ) -{ +static void update_ach_models(void); +static void steam_set_achievement( const char *name ){ + if( skaterift.demo_mode ) + return; + + /* hack lol */ + if( !strcmp(name,"MARC") ) skaterift.achievements |= 0x1; + if( !strcmp(name,"ALBERT") ) skaterift.achievements |= 0x2; + if( !strcmp(name,"JANET") ) skaterift.achievements |= 0x4; + if( !strcmp(name,"BERNADETTA") ) skaterift.achievements |= 0x8; + update_ach_models(); + if( steam_ready && steam_stats_ready ){ if( SteamAPI_ISteamUserStats_SetAchievement( hSteamUserStats, name ) ){ vg_success( "Achievement set! '%s'\n", name ); + } else{ vg_warn( "Failed to set achievement: %s\n", name ); @@ -85,7 +87,7 @@ VG_STATIC void steam_set_achievement( const char *name ) } } -VG_STATIC void steam_clear_achievement( const char *name ) +static void steam_clear_achievement( const char *name ) { if( steam_ready && steam_stats_ready ){ if( SteamAPI_ISteamUserStats_ClearAchievement( hSteamUserStats, name ) ){ @@ -101,13 +103,12 @@ VG_STATIC void steam_clear_achievement( const char *name ) } -VG_STATIC int steam_list_achievements( int argc, char const *argv[] ) -{ +static void steam_print_all_achievements(void){ vg_info( "Achievements: \n" ); if( steam_ready && steam_stats_ready ){ for( int i=0; im_pubParam; @@ -165,15 +167,32 @@ VG_STATIC void steam_on_recieve_current_stats( CallbackMsg_t *msg ) vg_info( "Recieved stats for: %lu (user: %lu)\n", rec->m_nGameID, rec->m_steamIDUser ); steam_stats_ready = 1; + + steamapi_bool set = 0; + if( SteamAPI_ISteamUserStats_GetAchievement( + hSteamUserStats, "MARC", &set ) ){ + if( set ) skaterift.achievements |= 0x1; + } + if( SteamAPI_ISteamUserStats_GetAchievement( + hSteamUserStats, "ALBERT", &set ) ){ + if( set ) skaterift.achievements |= 0x2; + } + if( SteamAPI_ISteamUserStats_GetAchievement( + hSteamUserStats, "JANET", &set ) ){ + if( set ) skaterift.achievements |= 0x4; + } + if( SteamAPI_ISteamUserStats_GetAchievement( + hSteamUserStats, "BERNADETTA", &set ) ){ + if( set ) skaterift.achievements |= 0x8; + } + update_ach_models(); } else{ vg_error( "Error recieveing stats for user (%u)\n", rec->m_eResult ); } } -VG_STATIC ISteamInput *steam_hInput; - -VG_STATIC u32 utf8_byte0_byte_count( u8 char0 ) +static u32 utf8_byte0_byte_count( u8 char0 ) { for( u32 k=2; k<4; k++ ){ if( !(char0 & (0x80 >> k)) ) @@ -183,13 +202,12 @@ VG_STATIC u32 utf8_byte0_byte_count( u8 char0 ) return 0; } -VG_STATIC void str_utf8_collapse( const char *str, char *buf, u32 length ) -{ +static u32 str_utf8_collapse( const char *str, char *buf, u32 length ){ u8 *ustr = (u8 *)str; u32 utf32_code = 0x00000000; u32 i=0, j=0, utf32_byte_ct=0; - for(;i < length-1;){ + for(;j < length-1;){ if( ustr[i] == 0x00 ) break; @@ -222,11 +240,11 @@ VG_STATIC void str_utf8_collapse( const char *str, char *buf, u32 length ) } buf[j] = 0x00; + return j; } -VG_STATIC int steam_init(void) -{ - const char *username = NULL; +static int steam_init(void){ + const char *username = "offline player"; #ifdef SR_NETWORKED vg_info( "Initializing steamworks\n" ); @@ -260,7 +278,6 @@ VG_STATIC int steam_init(void) * -------------------------------------------------------- */ hSteamUserStats = SteamAPI_SteamUserStats(); - steam_register_callback( k_iUserStatsReceived, steam_on_recieve_current_stats ); @@ -268,14 +285,8 @@ VG_STATIC int steam_init(void) vg_warn( "No Steam Logon: Cannot request stats\n" ); - vg_console_reg_cmd( "ach_list", steam_list_achievements, NULL ); - vg_console_reg_cmd( "ach_clear_all", steam_clear_all_achievements, NULL ); - vg_console_reg_cmd( "ach_set", steam_set_achievemnt_test, NULL ); + vg_console_reg_cmd( "ach", steam_achievement_ccmd, NULL ); - steam_hInput = SteamAPI_SteamInput(); - SteamAPI_ISteamInput_Init( steam_hInput, 0 ); - SteamAPI_ISteamInput_RunFrame( steam_hInput, 0 ); - #endif /* TODO: On username update callback */ @@ -285,55 +296,14 @@ VG_STATIC int steam_init(void) return 1; } -VG_STATIC void steam_update(void) +static void steam_update(void) { if( steam_ready ){ steamworks_event_loop( hSteamClientPipe ); - - /* TODO - * We can probably request this from SDL too - */ - if( steam_hInput ){ - SteamAPI_ISteamInput_RunFrame( steam_hInput, 0 ); - - InputHandle_t joy0 = SteamAPI_ISteamInput_GetControllerForGamepadIndex( - steam_hInput, 0 ); - - vg_input.controller_should_use_trackpad_look = 0; - if( joy0 != 0 ){ - ESteamInputType type = SteamAPI_ISteamInput_GetInputTypeForHandle( - steam_hInput, joy0 ); - - if( type == k_ESteamInputType_SteamController ){ - vg_input.controller_should_use_trackpad_look = 1; - steam_display_controller = k_steam_controller_type_steam; - } - else if( type == k_ESteamInputType_SteamDeckController ){ - steam_display_controller = k_steam_controller_type_steam_deck; - } - else if( type == k_ESteamInputType_PS3Controller || - type == k_ESteamInputType_PS4Controller || - type == k_ESteamInputType_PS5Controller ) - { - steam_display_controller = k_steam_controller_type_playstation; - } - else if( type == k_ESteamInputType_XBox360Controller || - type == k_ESteamInputType_XBoxOneController ) - { - steam_display_controller = k_steam_controller_type_xbox; - } - else{ - /* currently unsupported controller */ - steam_display_controller = k_steam_controller_type_xbox; - } - } - else - steam_display_controller = k_steam_controller_type_keyboard; - } } } -VG_STATIC void steam_end(void) +static void steam_end(void) { if( steam_ready ){ vg_info( "Shutting down\n..." );