diff --git a/include/scrimmage/simcontrol/SimControl.h b/include/scrimmage/simcontrol/SimControl.h index 0d7f0b121d..40549c08b2 100644 --- a/include/scrimmage/simcontrol/SimControl.h +++ b/include/scrimmage/simcontrol/SimControl.h @@ -212,7 +212,8 @@ class SimControl { * parameters. */ bool generate_entity(const int &ent_desc_id, - std::map ¶ms); + std::map ¶ms, + int request_id=0); /// @brief Get the pointer to the MissionParser instance. MissionParsePtr mp(); diff --git a/msgs/Event.proto b/msgs/Event.proto index 00b6dcbf13..2b24cea1bf 100644 --- a/msgs/Event.proto +++ b/msgs/Event.proto @@ -26,6 +26,7 @@ message UserForcedExit { message EntityGenerated { int32 entity_id = 1; + int32 request_id = 2; } message EntityRemoved { @@ -45,4 +46,5 @@ message GenerateEntity { scrimmage_proto.State state = 2; repeated KeyValuePair entity_param = 3; int32 entity_id = 4; + int32 request_id = 5; } diff --git a/src/simcontrol/SimControl.cpp b/src/simcontrol/SimControl.cpp index c8385e5cdc..bb8ca3fac3 100644 --- a/src/simcontrol/SimControl.cpp +++ b/src/simcontrol/SimControl.cpp @@ -282,11 +282,12 @@ bool SimControl::generate_entity(const int &ent_desc_id) { if (it_params == mp_->entity_descriptions().end()) { return false; } - return generate_entity(ent_desc_id, it_params->second); + return generate_entity(ent_desc_id, it_params->second, 0); } bool SimControl::generate_entity(const int &ent_desc_id, - std::map ¶ms) { + std::map ¶ms, + int request_id) { #if ENABLE_JSBSIM == 1 params["JSBSIM_ROOT"] = jsbsim_root_; #endif @@ -394,6 +395,7 @@ bool SimControl::generate_entity(const int &ent_desc_id, auto msg = std::make_shared>(); msg->data.set_entity_id(ent->id().id()); + msg->data.set_request_id(request_id); pub_ent_gen_->publish(msg); return true; @@ -864,10 +866,13 @@ bool SimControl::start() { params[msg->data.entity_param(i).key()] = msg->data.entity_param(i).value(); } + int request_id = 0; + request_id = msg->data.request_id(); + // Recreate the rtree with one additional size for this entity. this->create_rtree(1); - if (not this->generate_entity(it_ent_desc_id->second, params)) { + if (not this->generate_entity(it_ent_desc_id->second, params, request_id)) { cout << "Failed to generate entity with tag: " << msg->data.entity_tag() << endl; return;