@@ -239,7 +239,8 @@ class FCarlaServer::FPimpl: public carla::rpc::RpcServerInterface
239239 */
240240 carla::rpc::Response<uint64_t > call_tick (
241241 carla::rpc::synchronization_client_id_type const &client_id,
242- carla::rpc::synchronization_participant_id_type const &participant_id) override ;
242+ carla::rpc::synchronization_participant_id_type const &participant_id,
243+ carla::rpc::SynchronizationTickMode synchronization_tick_mode) override ;
243244 carla::rpc::Response<carla::rpc::synchronization_participant_id_type> call_register_synchronization_participant (
244245 carla::rpc::synchronization_client_id_type const &client_id,
245246 carla::rpc::synchronization_participant_id_type const &participant_id_hint = carla::rpc::ALL_PARTICIPANTS) override ;
@@ -424,6 +425,7 @@ void FCarlaServer::FPimpl::BindActions()
424425
425426 BIND_SYNC (tick_cue) << [this ]() -> R<uint64_t >
426427 {
428+ REQUIRE_CARLA_EPISODE ();
427429 TRACE_CPUPROFILER_EVENT_SCOPE (TickCueReceived);
428430 UE_LOG (
429431 LogCarlaServer,
@@ -432,7 +434,7 @@ void FCarlaServer::FPimpl::BindActions()
432434 UTF8_TO_TCHAR (SynchronizationClientId ().c_str ()),
433435 TickParticipantId (),
434436 ::rpc::this_session ().id());
435- return call_tick (SynchronizationClientId (), TickParticipantId ());
437+ return call_tick (SynchronizationClientId (), TickParticipantId (), carla::rpc::SynchronizationTickMode::TICK_ONLY_IF_SYNC_ENABLED );
436438 };
437439
438440 // ~~ Load new episode ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -3667,12 +3669,20 @@ void FCarlaServer::FPimpl::NotifyEndEpisode()
36673669
36683670carla::rpc::Response<uint64_t > FCarlaServer::FPimpl::call_tick (
36693671 carla::rpc::synchronization_client_id_type const &client_id,
3670- carla::rpc::synchronization_participant_id_type const &participant_id)
3672+ carla::rpc::synchronization_participant_id_type const &participant_id,
3673+ carla::rpc::SynchronizationTickMode synchronization_tick_mode)
36713674{
3672- REQUIRE_CARLA_EPISODE ();
36733675 auto Current = FCarlaEngine::GetFrameCounter ();
3674- auto const TargetGameTime = Episode->GetElapsedGameTime () + GetTickDeltaSeconds ();
3675- (void ) call_update_synchronization_window (client_id, participant_id, TargetGameTime);
3676+
3677+ if ( (synchronization_tick_mode == carla::rpc::SynchronizationTickMode::FORCE_ENABLE_SYNC)
3678+ || ServerSync.IsSynchronousModeActive () ) {
3679+ auto const TargetGameTime = Episode->GetElapsedGameTime () + GetTickDeltaSeconds ();
3680+ ServerSync.UpdateSynchronizationWindow (client_id, participant_id, TargetGameTime);
3681+ }
3682+ else {
3683+ UE_LOG (LogCarla, Warning, TEXT (" CarlaServer::call_tick[%s:%d] received, but synchronous mode not running. Tick is ignored." ),
3684+ UTF8_TO_TCHAR (client_id.c_str ()), participant_id);
3685+ }
36763686 return Current + 1 ;
36773687}
36783688
@@ -3879,9 +3889,11 @@ double FCarlaServer::GetTickDeltaSeconds() {
38793889
38803890void FCarlaServer::Tick ()
38813891{
3882- (void )Pimpl->call_tick (Pimpl->SynchronizationClientId (), Pimpl->ServerSynchronizationParticipantId );
3892+ (void )Pimpl->call_tick (Pimpl->SynchronizationClientId (),
3893+ Pimpl->ServerSynchronizationParticipantId ,
3894+ carla::rpc::SynchronizationTickMode::TICK_ONLY_IF_SYNC_ENABLED);
38833895}
3884-
3896+
38853897bool FCarlaServer::TickCueReceived ()
38863898{
38873899 return Pimpl->IsNextGameTickAllowed ();
@@ -3987,12 +3999,12 @@ carla::rpc::Response<carla::rpc::VehicleTelemetryData> FCarlaServer::call_get_te
39873999 return Pimpl->call_get_telemetry_data (ActorId);
39884000}
39894001
3990-
39914002carla::rpc::Response<uint64_t > FCarlaServer::call_tick (
39924003 carla::rpc::synchronization_client_id_type const &client_id,
3993- carla::rpc::synchronization_participant_id_type const &synchronization_participant)
4004+ carla::rpc::synchronization_participant_id_type const &synchronization_participant,
4005+ carla::rpc::SynchronizationTickMode synchronization_tick_mode)
39944006{
3995- return Pimpl->call_tick (client_id, synchronization_participant);
4007+ return Pimpl->call_tick (client_id, synchronization_participant, synchronization_tick_mode );
39964008}
39974009
39984010carla::rpc::Response<carla::rpc::synchronization_participant_id_type> FCarlaServer::call_register_synchronization_participant (
0 commit comments