| 260 | } |
| 261 | |
| 262 | void FURLabRpcDispatcher::Init(AAMjManager* InManager) |
| 263 | { |
| 264 | bDraining.store(false, std::memory_order_release); |
| 265 | |
| 266 | OwnerMgr = InManager; |
| 267 | if (!OwnerMgr.IsValid()) |
| 268 | return; |
| 269 | |
| 270 | // If the project pinned a non-Auto mode, lock it now so set_mode |
| 271 | // is rejected until the project relaxes. |
| 272 | const EStepMode InitMode = (OwnerMgr->StepMode == EStepMode::Auto) |
| 273 | ? EStepMode::Live |
| 274 | : OwnerMgr->StepMode; |
| 275 | ActiveStepMode.store(InitMode, std::memory_order_release); |
| 276 | // Mirror onto the manager so the physics loop paces off the resolved mode |
| 277 | // (Auto -> Live), not the configured StepMode which would stay Auto. |
| 278 | OwnerMgr->EffectiveStepMode.store(InitMode, std::memory_order_release); |
| 279 | const bool bPaused = (InitMode != EStepMode::Live); |
| 280 | OwnerMgr->bPublishersPaused.store(bPaused, std::memory_order_release); |
| 281 | FCameraZmqWorker::bPublishersPaused.store(bPaused, std::memory_order_release); |
| 282 | |
| 283 | if (InitMode == EStepMode::Puppet) |
| 284 | InstallPuppetHandler(); |
| 285 | else if (InitMode == EStepMode::Direct) |
| 286 | InstallDirectHandler(); |
| 287 | |
| 288 | // Cached on the game thread; worker threads later use Get() (TActorIterator |
| 289 | // asserts IsInGameThread). |
| 290 | if (UWorld* World = OwnerMgr->GetWorld()) |
| 291 | { |
| 292 | AActor* Actor = UGameplayStatics::GetActorOfClass( |
| 293 | World, AMjReplayManager::StaticClass()); |
| 294 | CachedReplayManager = Cast<AMjReplayManager>(Actor); |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | void FURLabRpcDispatcher::OnManagerGone() |
| 299 | { |
no test coverage detected