X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=steam.h;h=5d768b88c88ffd84b09581bd73b7026b4c6552b4;hb=0a40a20806ec52fc13817fd78a43793de5e32ffa;hp=fbb4f8a5b7dce0a1a8f3ba5ed58d333d5b972ab7;hpb=70792eeb23451cef1f3a103e0c9515b833f81899;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/steam.h b/steam.h index fbb4f8a..5d768b8 100644 --- a/steam.h +++ b/steam.h @@ -6,6 +6,7 @@ #ifndef STEAM_H #define STEAM_H +#define VG_GAME #include "vg/vg_steam.h" #include "vg/vg_steam_utils.h" #include "vg/vg_steam_networking.h" @@ -25,9 +26,9 @@ * nothing. */ -static char steam_username_at_startup[128]; +VG_STATIC char steam_username_at_startup[128]; -static void recv_steam_warning( int severity, const char *msg ) +VG_STATIC void recv_steam_warning( int severity, const char *msg ) { if( severity == 0 ) vg_low( "%s\n", msg ); @@ -35,28 +36,31 @@ static void recv_steam_warning( int severity, const char *msg ) vg_info( "%s\n", msg ); } -static int steam_ready = 0, +VG_STATIC int steam_ready = 0, steam_stats_ready = 0; -static void *hSteamNetworkingSockets, +VG_STATIC void *hSteamNetworkingSockets, *hSteamUser; -static ISteamUserStats *hSteamUserStats; -static HSteamPipe hSteamClientPipe; +VG_STATIC ISteamUserStats *hSteamUserStats; +VG_STATIC HSteamPipe hSteamClientPipe; -static const char *steam_achievement_names[] = +VG_STATIC const char *steam_achievement_names[] = { "ALBERT", "MARC", "ROUTE_MPY", "ROUTE_MPG", "ROUTE_MPB", "ROUTE_MPR", "ROUTE_TO", "ROUTE_TC" }; -static void steam_store_achievements(void) +VG_STATIC void steam_store_achievements(void) { - SteamAPI_ISteamUserStats_StoreStats( hSteamUserStats ); + if( steam_ready && steam_stats_ready ) + { + SteamAPI_ISteamUserStats_StoreStats( hSteamUserStats ); + } } -static void steam_set_achievement( const char *name ) +VG_STATIC void steam_set_achievement( const char *name ) { if( steam_ready && steam_stats_ready ) { @@ -75,7 +79,7 @@ static void steam_set_achievement( const char *name ) } } -static void steam_clear_achievement( const char *name ) +VG_STATIC void steam_clear_achievement( const char *name ) { if( steam_ready && steam_stats_ready ) { @@ -95,7 +99,7 @@ static void steam_clear_achievement( const char *name ) } -static int steam_list_achievements( int argc, char const *argv[] ) +VG_STATIC int steam_list_achievements( int argc, char const *argv[] ) { vg_info( "Achievements: \n" ); @@ -125,7 +129,7 @@ static int steam_list_achievements( int argc, char const *argv[] ) return 0; } -static int steam_clear_all_achievements( int argc, char const *argv[] ) +VG_STATIC int steam_clear_all_achievements( int argc, char const *argv[] ) { if( steam_ready && steam_stats_ready ) { @@ -144,7 +148,7 @@ static int steam_clear_all_achievements( int argc, char const *argv[] ) return 0; } -static int steam_set_achievemnt_test( int argc, char const *argv[] ) +VG_STATIC int steam_set_achievemnt_test( int argc, char const *argv[] ) { if( argc < 2 ) return 0; @@ -158,7 +162,7 @@ static int steam_set_achievemnt_test( int argc, char const *argv[] ) return 0; } -static void steam_on_recieve_current_stats( CallbackMsg_t *msg ) +VG_STATIC void steam_on_recieve_current_stats( CallbackMsg_t *msg ) { UserStatsReceived_t *rec = (UserStatsReceived_t *)msg->m_pubParam; @@ -174,7 +178,9 @@ static void steam_on_recieve_current_stats( CallbackMsg_t *msg ) } } -static int steam_init(void) +VG_STATIC ISteamInput *steam_hInput; + +VG_STATIC int steam_init(void) { const char *username = NULL; @@ -237,6 +243,10 @@ static int steam_init(void) .function = steam_set_achievemnt_test }); + steam_hInput = SteamAPI_SteamInput(); + SteamAPI_ISteamInput_Init( steam_hInput, 0 ); + SteamAPI_ISteamInput_RunFrame( steam_hInput, 0 ); + #endif /* TODO: On username update callback */ @@ -246,13 +256,61 @@ static int steam_init(void) return 1; } -static void steam_update(void) +VG_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; + menu_display_controller = k_menu_controller_type_steam; + } + else if( type == k_ESteamInputType_SteamDeckController ) + { + menu_display_controller = k_menu_controller_type_steam_deck; + } + else if( type == k_ESteamInputType_PS3Controller || + type == k_ESteamInputType_PS4Controller || + type == k_ESteamInputType_PS5Controller ) + { + menu_display_controller = k_menu_controller_type_playstation; + } + else if( type == k_ESteamInputType_XBox360Controller || + type == k_ESteamInputType_XBoxOneController ) + { + menu_display_controller = k_menu_controller_type_xbox; + } + else + { + /* currently unsupported controller */ + menu_display_controller = k_menu_controller_type_xbox; + } + } + else + menu_display_controller = k_menu_controller_type_keyboard; + } + } } -static void steam_end(void *nothing) +VG_STATIC void steam_end(void) { if( steam_ready ) {