From d5c30d7b11cc6f50c8ddc4349dcdbe5da384b2df Mon Sep 17 00:00:00 2001 From: Jonathan Wendt <wendt@vr.rwth-aachen.de> Date: Thu, 5 Dec 2019 09:07:45 +0100 Subject: [PATCH] update attachement method --- .../Private/WidgetInteraction.cpp | 102 +++++++----------- .../Public/WidgetInteraction.h | 2 + 2 files changed, 40 insertions(+), 64 deletions(-) diff --git a/Source/WidgetInteraction/Private/WidgetInteraction.cpp b/Source/WidgetInteraction/Private/WidgetInteraction.cpp index 9ab7b4c..cf653cc 100644 --- a/Source/WidgetInteraction/Private/WidgetInteraction.cpp +++ b/Source/WidgetInteraction/Private/WidgetInteraction.cpp @@ -8,6 +8,8 @@ #define LOCTEXT_NAMESPACE "FWidgetInteractionModule" +DEFINE_LOG_CATEGORY(WidgetIntLog); + void FWidgetInteractionModule::StartupModule() { on_world_tick_start_delegate_.BindRaw(this, &FWidgetInteractionModule::OnWorldTickStart); @@ -25,77 +27,49 @@ void FWidgetInteractionModule::OnWorldTickStart(ELevelTick level_tick, float val auto worlds = GEngine->GetWorldContexts(); - for (auto world_context : worlds) { - - auto world = world_context.World(); - - if (last_world == world && widget_interaction_cmp_ != nullptr) { - if (widget_interaction_cmp_->IsValidLowLevel() == true) { - continue; - } - else { - widget_interaction_cmp_ = nullptr; - } - } - - if (world == nullptr) - continue; - - auto player_controller = world->GetFirstPlayerController(); - if (player_controller == nullptr) - continue; - - auto vr_pawn = dynamic_cast<AVirtualRealityPawn*>(player_controller->AcknowledgedPawn); - if (vr_pawn == nullptr) - continue; - - UE_LOG(LogTemp, Warning, TEXT("OnWorldTickStart called and interaction component will be updated")); - - FString name = ""; - UClass* component_class = UMotionControllerComponent::StaticClass(); - - - if (IDisplayCluster::Get().GetClusterMgr()->IsStandalone()) { - //if this is a standalone setup ... - if (UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayEnabled()) { - //.. with an HMD, we attach the intercation component to the right hand - name = FString("HMDRightMotionController"); - component_class = UMotionControllerComponent::StaticClass(); - } - else { - //... without an HMD, we also attach it to the virtual right hand, since it exists in this case - name = TEXT("HMDRightMotionController"); - component_class = UMotionControllerComponent::StaticClass(); - } - } - else { - //if this is a cluster setup we attach it to the flystick - name = TEXT("flystick"); - component_class = UDisplayClusterSceneComponent::StaticClass(); - } - - auto parent_vec = vr_pawn->GetComponentsByClass(component_class); - bool success; - for (auto parent : parent_vec) { - if (parent->GetName() == FString(name)) { - CreateWidgetInteraction(dynamic_cast<USceneComponent*>(parent), vr_pawn); - success = true; - last_world = world; - } - } - - if (!success) - UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s\", cannot attach widget interaction component"), *name); - } + for (auto world_context : worlds) { + + auto world = world_context.World(); + + if (last_world == world && widget_interaction_cmp_ != nullptr) { + if (widget_interaction_cmp_->IsValidLowLevel() == true) { + continue; + } + else { + widget_interaction_cmp_ = nullptr; + } + } + + if (world == nullptr) + continue; + + auto player_controller = world->GetFirstPlayerController(); + if (player_controller == nullptr) + continue; + + auto vr_pawn = dynamic_cast<AVirtualRealityPawn*>(player_controller->AcknowledgedPawn); + if (vr_pawn == nullptr) + continue; + + + FString name = ""; + UClass* component_class = UMotionControllerComponent::StaticClass(); + + auto right_hand = vr_pawn->GetRightHandComponent(); + CreateWidgetInteraction(vr_pawn->GetRightHandComponent(), vr_pawn); + last_world = world; + + UE_LOG(WidgetIntLog, Verbose, TEXT("VRInteractionComponent attached to right hand")); + } } -URwthComponent* FWidgetInteractionModule::GetWidgetInteractionComponent() { +UVRWidgetInteractionComponent* FWidgetInteractionModule::GetWidgetInteractionComponent() { return widget_interaction_cmp_; } void FWidgetInteractionModule::CreateWidgetInteraction(USceneComponent * parent, AVirtualRealityPawn* outer) { - widget_interaction_cmp_ = NewObject<URwthComponent>(outer, URwthComponent::StaticClass()); + widget_interaction_cmp_ = NewObject<UVRWidgetInteractionComponent>(outer, UVRWidgetInteractionComponent::StaticClass()); widget_interaction_cmp_->AttachToComponent(parent, FAttachmentTransformRules(EAttachmentRule::KeepRelative, false)); widget_interaction_cmp_->Init(); } diff --git a/Source/WidgetInteraction/Public/WidgetInteraction.h b/Source/WidgetInteraction/Public/WidgetInteraction.h index b970b95..08f46b5 100644 --- a/Source/WidgetInteraction/Public/WidgetInteraction.h +++ b/Source/WidgetInteraction/Public/WidgetInteraction.h @@ -7,6 +7,8 @@ #include "VRWidgetInteractionComponent.h" #include "Modules/ModuleManager.h" +DECLARE_LOG_CATEGORY_EXTERN(WidgetIntLog, Log, All); + class WIDGETINTERACTION_API FWidgetInteractionModule : public IModuleInterface { public: -- GitLab