static ISteamUserStats *hSteamUserStats;
static HSteamPipe hSteamClientPipe;
-static const char *steam_achievement_names[] =
-{
- "MASTER_ENGINEER", "CAN_DO_THAT", "BANG", "GOOD_ENOUGH",
- "TUTORIALS", "MIGHTY_CONSUMER", "GRADUATE"
+enum mc_achievement {
+ k_mc_achievement_master_engineer,
+ k_mc_achievement_can_do_that,
+ k_mc_achievement_bang,
+ k_mc_achievement_good_enough,
+ k_mc_achievement_tutorials,
+ k_mc_achievement_mighty_consumer,
+ k_mc_achievement_graduate,
+ k_mc_achievement_max
};
-static void steam_store_achievements(void)
-{
+static const char *steam_achievement_names[] = {
+ [k_mc_achievement_master_engineer] = "MASTER_ENGINEER",
+ [k_mc_achievement_can_do_that] = "CAN_DO_THAT",
+ [k_mc_achievement_bang] = "BANG",
+ [k_mc_achievement_good_enough] = "GOOD_ENOUGH",
+ [k_mc_achievement_tutorials] = "TUTORIALS",
+ [k_mc_achievement_mighty_consumer] = "MIGHTY_CONSUMER",
+ [k_mc_achievement_graduate] = "GRADUATE"
+};
+
+static bool steam_achievement_set[k_mc_achievement_max];
+
+static void steam_store_achievements(void){
if( steam_ready && steam_stats_ready ){
SteamAPI_ISteamUserStats_StoreStats( hSteamUserStats );
}
}
-static void steam_set_achievement( const char *name ){
+static void steam_set_achievement( enum mc_achievement id ){
+ if( steam_achievement_set[ id ] ) return;
+ const char *name = steam_achievement_names[ id ];
+
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 (steam not ready): %s\n", name );
}
+
+ steam_achievement_set[ id ] = 1;
}
static void sw_set_achievement( const char *name ){
- steam_set_achievement( name );
- steam_store_achievements();
+ for( u32 i=0; i<k_mc_achievement_max; i ++ ){
+ if( !strcmp( name, steam_achievement_names[i] ) ){
+ steam_set_achievement( i );
+ steam_store_achievements();
+ return;
+ }
+ }
}
-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 ) ){
vg_info( "Achievement cleared: '%s'\n", name );
if( argc == 2 ){
if( !strcmp( argv[0], "set" ) ){
- steam_set_achievement( argv[1] );
- steam_store_achievements();
+ sw_set_achievement( argv[1] );
return 0;
}
else if( strcmp( argv[0], "clear" ) ){