From 3907783437a6e4ea4ce3089a2989551ec7b266f8 Mon Sep 17 00:00:00 2001 From: Tarasa24 Date: Tue, 3 Nov 2020 21:28:55 +0100 Subject: [PATCH] small optimizations and fixes --- SCS_RPC2.cpp | 28 +++++++++++++++++++--------- custom_types.h | 2 +- handlers.h | 12 +++++++++--- helper_functions.h | 5 +++-- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/SCS_RPC2.cpp b/SCS_RPC2.cpp index 593d544..2a6348b 100644 --- a/SCS_RPC2.cpp +++ b/SCS_RPC2.cpp @@ -35,10 +35,12 @@ #include "custom_types.h" #include "handlers.h" -telemetry_state telemetry; +telemetry_state telemetry{}; SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_init_params_t* const params) { + memset(&telemetry, 0, sizeof(telemetry)); + const scs_telemetry_init_params_v101_t* const version_params = static_cast(params); game_log = version_params->common.log; @@ -60,14 +62,22 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in telemetry.cities = construct_tree(&telemetry); - version_params->register_for_event(SCS_TELEMETRY_EVENT_frame_start, handle_frame_start, &telemetry); - version_params->register_for_event(SCS_TELEMETRY_EVENT_paused, handle_pause_start, &telemetry); - version_params->register_for_event(SCS_TELEMETRY_EVENT_started, handle_pause_start, &telemetry); - version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_world_placement, SCS_U32_NIL, SCS_VALUE_TYPE_dvector, SCS_TELEMETRY_CHANNEL_FLAG_no_value, handle_position, &telemetry); - version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_speed, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_no_value, handle_speed, &telemetry); - version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_navigation_distance, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_no_value, handle_distance, &telemetry); - version_params->register_for_channel(SCS_TELEMETRY_TRAILER_CHANNEL_connected, SCS_U32_NIL, SCS_VALUE_TYPE_bool, SCS_TELEMETRY_CHANNEL_FLAG_no_value, handle_trailer_connect, &telemetry); - version_params->register_for_event(SCS_TELEMETRY_EVENT_configuration, handle_configuration, &telemetry); + bool registered = ( + version_params->register_for_event(SCS_TELEMETRY_EVENT_frame_start, handle_frame_start, &telemetry) == SCS_RESULT_ok && + version_params->register_for_event(SCS_TELEMETRY_EVENT_paused, handle_pause_start, &telemetry) == SCS_RESULT_ok && + version_params->register_for_event(SCS_TELEMETRY_EVENT_started, handle_pause_start, &telemetry) == SCS_RESULT_ok && + version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_world_placement, SCS_U32_NIL, SCS_VALUE_TYPE_dvector, SCS_TELEMETRY_CHANNEL_FLAG_no_value, handle_position, &telemetry) == SCS_RESULT_ok && + version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_speed, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_no_value, handle_speed, &telemetry) == SCS_RESULT_ok && + version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_navigation_distance, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_no_value, handle_distance, &telemetry) == SCS_RESULT_ok && + version_params->register_for_channel(SCS_TELEMETRY_TRAILER_CHANNEL_connected, SCS_U32_NIL, SCS_VALUE_TYPE_bool, SCS_TELEMETRY_CHANNEL_FLAG_no_value, handle_trailer_connect, &telemetry) == SCS_RESULT_ok && + version_params->register_for_event(SCS_TELEMETRY_EVENT_configuration, handle_configuration, &telemetry) == SCS_RESULT_ok + ); + + if (!registered) + { + log_ingame("Unable to register callbacks"); + return SCS_RESULT_generic_error; + } telemetry.start_timestamp = seconds_since_epoch(); diff --git a/custom_types.h b/custom_types.h index 1284657..9c8c2a2 100644 --- a/custom_types.h +++ b/custom_types.h @@ -48,7 +48,7 @@ typedef kdtree tree2d; std::unique_ptr discordCore; long start_timestamp; - tree2d* cities{}; + std::unique_ptr cities{}; bool paused = true; int game; diff --git a/handlers.h b/handlers.h index 56d4e17..0a9fcbb 100644 --- a/handlers.h +++ b/handlers.h @@ -24,7 +24,7 @@ SCSAPI_VOID handle_frame_start(const scs_event_t UNUSED(event), const void* cons if (telemetry->game == ETS2) small_text << telemetry->truck.brand << " " << telemetry->truck.name <<" (" << (int)(telemetry->speed * 3.6) << " km/h)"; else if (telemetry->game == ATS) small_text << telemetry->truck.brand << " " << telemetry->truck.name << " (" << (int)(telemetry->speed * 2.237) << " mph)"; - set_activity(telemetry->paused ? "Paused" : on_job ? details.str() : u8"🚚 Free roaming 💨", + set_activity(!telemetry->position.avalible || telemetry->paused ? "Paused" : on_job ? details.str() : u8"🚚 Free roaming 💨", !telemetry->position.avalible || telemetry->paused ? "" : state.str(), small_image.str(), small_text.str(), telemetry); @@ -88,8 +88,11 @@ SCSAPI_VOID handle_configuration(const scs_event_t event, const void* const even std::string id = info->id; if (id.compare(SCS_TELEMETRY_CONFIG_job) == 0) { - for (const scs_named_value_t* current = info->attributes; current->name; ++current) { + for (size_t i = 0; i < sizeof(info->attributes) / sizeof(scs_named_value_t); i++) + { + const scs_named_value_t* current = &info->attributes[i]; const std::string name = current->name; + if (name.compare(SCS_TELEMETRY_CONFIG_ATTRIBUTE_cargo) == 0) { telemetry->cargo.name = current->value.value_string.value; } @@ -102,8 +105,11 @@ SCSAPI_VOID handle_configuration(const scs_event_t event, const void* const even } } else if (id.compare(SCS_TELEMETRY_CONFIG_truck) == 0) { - for (const scs_named_value_t* current = info->attributes; current->name; ++current) { + for (size_t i = 0; i < sizeof(info->attributes) / sizeof(scs_named_value_t); i++) + { + const scs_named_value_t* current = &info->attributes[i]; const std::string name = current->name; + if (name.compare(SCS_TELEMETRY_CONFIG_ATTRIBUTE_brand) == 0) { telemetry->truck.brand = current->value.value_string.value; } diff --git a/helper_functions.h b/helper_functions.h index 8646269..b1b5883 100644 --- a/helper_functions.h +++ b/helper_functions.h @@ -3,6 +3,7 @@ #include #include #include +#include #include "cities_ets2.h" #include "cities_ats.h" @@ -38,7 +39,7 @@ void set_activity(std::string details, std::string state, std::string smallImage telemetry->discordCore->ActivityManager().UpdateActivity(activity, [](discord::Result result) {}); } -tree2d* construct_tree(telemetry_state* telemetry) { +std::unique_ptr construct_tree(telemetry_state* telemetry) { city* cities = NULL; size_t length; @@ -69,5 +70,5 @@ tree2d* construct_tree(telemetry_state* telemetry) { points.push_back(p); } - return new tree2d(std::begin(points), std::end(points)); + return std::make_unique(std::begin(points), std::end(points)); } \ No newline at end of file