void UGripMotionControllerComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); // Moved this here instead of in the polling function, it was ticking once per frame anyway so no loss of perf // It doesn't need to be there and now I can pre-check // Also epics implementation in the polling function didn't work anyway as it was based off of playercontroller which is not the owner of this controller // Cache state from the game thread for use on the render thread // No need to check if in game thread here as tick always is bHasAuthority = IsLocallyControlled(); bIsServer = IsServer(); // Server/remote clients don't set the controller position in VR // Don't call positional checks and don't create the late update scene view if (bHasAuthority) { if (!ViewExtension.IsValid() && GEngine) { TSharedPtr< FViewExtension, ESPMode::ThreadSafe > NewViewExtension(new FViewExtension(this)); ViewExtension = NewViewExtension; GEngine->ViewExtensions.Add(ViewExtension); } // This is the owning player, now you can get the controller's location and rotation from the correct source FVector Position; FRotator Orientation; bTracked = PollControllerState(Position, Orientation); if (bTracked) { SetRelativeLocationAndRotation(Position, Orientation); } if (!bTracked && !bUseWithoutTracking) return; // Don't update anything including location // Don't bother with any of this if not replicating transform if (bReplicates && bTracked) { ReplicatedControllerTransform.Position = Position; ReplicatedControllerTransform.Orientation = Orientation; if (GetNetMode() == NM_Client)//bReplicateControllerTransform) { ControllerNetUpdateCount += DeltaTime; if (ControllerNetUpdateCount >= (1.0f / ControllerNetUpdateRate)) { ControllerNetUpdateCount = 0.0f; Server_SendControllerTransform(ReplicatedControllerTransform); } } } } // Process the gripped actors TickGrip(); }
//============================================================================= void UMotionControllerComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); if (bIsActive) { FVector Position; FRotator Orientation; bTracked = PollControllerState(Position, Orientation); if (bTracked) { SetRelativeLocationAndRotation(Position, Orientation); } if (!ViewExtension.IsValid() && GEngine) { TSharedPtr< FViewExtension, ESPMode::ThreadSafe > NewViewExtension(new FViewExtension(this)); ViewExtension = NewViewExtension; GEngine->ViewExtensions.Add(ViewExtension); } } }