diff --git a/Content/Blueprints/OptiXVRPawnStandaloneBP.uasset b/Content/Blueprints/OptiXVRPawnStandaloneBP.uasset index 36bc9229c9a4658af64c2590b1abb276505a6368..12db22255292780000c3e46138b4197f6a08265c 100644 Binary files a/Content/Blueprints/OptiXVRPawnStandaloneBP.uasset and b/Content/Blueprints/OptiXVRPawnStandaloneBP.uasset differ diff --git a/Content/UI/ThumbstickMode.uasset b/Content/UI/ThumbstickMode.uasset index 00e8f66d364755ce02dfac63e5fce600dee332f2..e140c88573714e70c5a69a3813ba5a115e43ce5b 100644 Binary files a/Content/UI/ThumbstickMode.uasset and b/Content/UI/ThumbstickMode.uasset differ diff --git a/Content/UI/Translator/PositionCounter.uasset b/Content/UI/Translator/PositionCounter.uasset index bf647f5736feec2a317a69af1e0171c500721156..74c0eff5190021be8876809da5a93520c10f3497 100644 Binary files a/Content/UI/Translator/PositionCounter.uasset and b/Content/UI/Translator/PositionCounter.uasset differ diff --git a/Source/OptiX/Private/OptiXVRPawn.cpp b/Source/OptiX/Private/OptiXVRPawn.cpp index 61386d0519e58cd1ded4fc68d7986c6fa40d74f2..372df9f72e2af545ce5b24bc2a24b2af0f16ad96 100644 --- a/Source/OptiX/Private/OptiXVRPawn.cpp +++ b/Source/OptiX/Private/OptiXVRPawn.cpp @@ -71,7 +71,18 @@ void AOptiXVRPawn::UpdateTranslation(UPrimitiveComponent* Interaction) TArray<USceneComponent*> Parents; GrabbedLever->GetParentComponents(Parents); - Parents[0]->SetRelativeScale3D(FVector(ScaleX / 39.0, 1, 1)); + + if (ScaleX < 0) + { + GrabbedLever->SetWorldScale3D(FVector(-0.6, -0.6, -0.6)); + } + else + { + GrabbedLever->SetWorldScale3D(FVector(0.6, 0.6, 0.6)); + } + + Parents[0]->SetWorldScale3D(FVector(ScaleX / 39.0, 0.6, 0.6)); + FVector NewDist = GetDistanceVector(Interaction); GrabDistanceX = NewDist.X; diff --git a/Source/OptiX/Private/SelectableActorBase.cpp b/Source/OptiX/Private/SelectableActorBase.cpp index 29bf7a23abcde7cabf37840cc1d239e9b0d9b4f7..53ef56dbc8fbc441d6f3e7c80dc6c9c0f6afcf01 100644 --- a/Source/OptiX/Private/SelectableActorBase.cpp +++ b/Source/OptiX/Private/SelectableActorBase.cpp @@ -26,12 +26,14 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti Gizmo = CreateDefaultSubobject<USceneComponent>(TEXT("Gizmo")); Gizmo->SetupAttachment(GetStaticMeshComponent()); Gizmo->SetHiddenInGame(true); + //Gizmo->SetAbsolute(false, true, true); SupportWidget = CreateDefaultSubobject<UWidgetComponent>(TEXT("SupportWidget")); + SupportWidget->SetAbsolute(false, true, true); + SupportWidget->SetupAttachment(Gizmo); static ConstructorHelpers::FClassFinder<UUserWidget> SupportWidgetClass(TEXT("/OptiX/UI/SupportSwapWidget2")); SupportWidget->SetWidgetClass(SupportWidgetClass.Class); - SupportWidget->SetAbsolute(false, true, false); SupportWidget->SetWorldScale3D(FVector(0.05, 0.05, 0.05)); SupportWidget->SetDrawSize(FVector2D(800, 2300)); SupportWidget->SetGenerateOverlapEvents(false); @@ -45,11 +47,11 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti TranslationSupport->SetupAttachment(Gizmo); TranslateX = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("TranslateX")); + TranslateX->SetAbsolute(false, true, true); TranslateX->SetupAttachment(TranslationSupport); static ConstructorHelpers::FObjectFinder<UStaticMesh> TranslateXMesh(TEXT("StaticMesh'/OptiX/UI/Translator/Arrowbody.Arrowbody'")); TranslateX->SetStaticMesh(TranslateXMesh.Object); - TranslateX->SetAbsolute(false, true, false); - TranslateX->SetWorldScale3D(FVector(0.8f, 0.8f, 0.8f)); + TranslateX->SetWorldScale3D(FVector(0.6f, 0.6f, 0.6f)); TranslateX->SetGenerateOverlapEvents(false); TranslateX->SetHiddenInGame(true); @@ -58,15 +60,15 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti TranslateX->SetCanEverAffectNavigation(false); ArrowX = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("ArrowX")); + ArrowX->SetAbsolute(false, false, true); + ArrowX->SetWorldScale3D(FVector(0.6f, 0.6f, 0.6f)); ArrowX->SetupAttachment(TranslateX); static ConstructorHelpers::FObjectFinder<UStaticMesh> TranslateArrow(TEXT("StaticMesh'/OptiX/UI/Translator/Arrowhead.Arrowhead'")); ArrowX->SetStaticMesh(TranslateArrow.Object); //ArrowX->SetAbsolute(false, true, false); - //ArrowX->SetWorldScale3D(FVector(0.8f, 0.8f, 0.8f)); ArrowX->SetRelativeLocation(FVector(39, 0, 0)); ArrowX->SetGenerateOverlapEvents(false); ArrowX->SetHiddenInGame(true); - ArrowX->SetAbsolute(false, false, true); ArrowX->CastShadow = 0; ArrowX->bVisibleInReflectionCaptures = false; @@ -87,9 +89,10 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti // todo TranslateY = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("TranslateY")); + TranslateY->SetAbsolute(false, true, true); + TranslateY->SetupAttachment(TranslationSupport); TranslateY->SetStaticMesh(TranslateXMesh.Object); - TranslateY->SetAbsolute(false, true, false); TranslateY->SetWorldScale3D(FVector(0.6f, 0.6f, 0.6f)); TranslateY->SetGenerateOverlapEvents(false); TranslateY->SetHiddenInGame(true); @@ -100,6 +103,8 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti TranslateY->SetCanEverAffectNavigation(false); ArrowY = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("ArrowY")); + ArrowY->SetAbsolute(false, false, true); + ArrowY->SetupAttachment(TranslateY); ArrowY->SetStaticMesh(TranslateArrow.Object); //ArrowY->SetAbsolute(false, true, false); @@ -107,7 +112,6 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti ArrowY->SetRelativeLocation(FVector(39, 0, 0)); ArrowY->SetGenerateOverlapEvents(false); ArrowY->SetHiddenInGame(true); - ArrowY->SetAbsolute(false, false, true); ArrowY->CastShadow = 0; ArrowY->bVisibleInReflectionCaptures = false; @@ -125,9 +129,9 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti //TranslateWidgetY->SetTwoSided(true); TranslateZ = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("TranslateZ")); + TranslateZ->SetAbsolute(false, true, true); TranslateZ->SetupAttachment(TranslationSupport); TranslateZ->SetStaticMesh(TranslateXMesh.Object); - TranslateZ->SetAbsolute(false, true, false); TranslateZ->SetWorldScale3D(FVector(0.6f, 0.6f, 0.6f)); TranslateZ->SetGenerateOverlapEvents(false); TranslateZ->SetHiddenInGame(true); @@ -136,7 +140,9 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti TranslateZ->CastShadow = 0; TranslateZ->bVisibleInReflectionCaptures = false; + ArrowZ = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("ArrowZ")); + ArrowZ->SetAbsolute(false, false, true); ArrowZ->SetupAttachment(TranslateZ); ArrowZ->SetStaticMesh(TranslateArrow.Object); //ArrowZ->SetAbsolute(false, true, false); @@ -144,7 +150,6 @@ ASelectableActorBase::ASelectableActorBase(const FObjectInitializer& ObjectIniti ArrowZ->SetRelativeLocation(FVector(39, 0, 0)); ArrowZ->SetGenerateOverlapEvents(false); ArrowZ->SetHiddenInGame(true); - ArrowZ->SetAbsolute(false, false, true); ArrowZ->SetCanEverAffectNavigation(false); ArrowZ->CastShadow = 0; ArrowZ->bVisibleInReflectionCaptures = false; @@ -476,6 +481,14 @@ void ASelectableActorBase::DeleteActor() void ASelectableActorBase::SetRodPosition(FVector TablePosition) { + + // Flip socket? + if (Socket->GetComponentLocation().Z > GetActorLocation().Z) + { + Socket->SetRelativeLocation(-1 * Socket->RelativeLocation); + } + + FVector TableZero = TablePosition + FVector(0, 0, 95); // Table Height // Far away from the table or below table, make it go straight down @@ -499,8 +512,16 @@ void ASelectableActorBase::SetRodPosition(FVector TablePosition) } // TODO Material highlighting - swap material slots? -void ASelectableActorBase::OnOverlapBegin(UPrimitiveComponent * OverlapComponent, AActor * OtherActor, UPrimitiveComponent * OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult) +void ASelectableActorBase::OnOverlapBegin_Implementation(UPrimitiveComponent * OverlapComponent, AActor * OtherActor, UPrimitiveComponent * OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult) { + + AOptiXVRPawn* OverlappingPawn = Cast<AOptiXVRPawn>(OtherActor); + + if (OverlappingPawn != nullptr) + { + OverlappingPawn->OnOverlapBeginWithLever(OverlapComponent); + } + //int32 N = OverlapComponent->GetNumMaterials(); //for (int32 i = 0; i < N; i++) //{ @@ -508,8 +529,16 @@ void ASelectableActorBase::OnOverlapBegin(UPrimitiveComponent * OverlapComponent //} } -void ASelectableActorBase::OnOverlapEnd(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) +void ASelectableActorBase::OnOverlapEnd_Implementation(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) { + + AOptiXVRPawn* OverlappingPawn = Cast<AOptiXVRPawn>(OtherActor); + + if (OverlappingPawn != nullptr) + { + OverlappingPawn->OnOverlapEndWithLever(OverlappedComp); + } + //int32 N = OverlappedComp->GetNumMaterials(); //for (int32 i = 0; i < N; i++) //{ diff --git a/Source/OptiX/Public/OptiXVRPawn.h b/Source/OptiX/Public/OptiXVRPawn.h index 0278cb9f6e14e19e6c22715be87b36ded1d9c85a..afc8760b91c9e34a6a6b1a65947f6f9de85c3bf2 100644 --- a/Source/OptiX/Public/OptiXVRPawn.h +++ b/Source/OptiX/Public/OptiXVRPawn.h @@ -52,6 +52,12 @@ public: UFUNCTION(BlueprintImplementableEvent, BlueprintCallable, /*meta = (BlueprintProtected)*/ Category = "OptiXActor") void UIEventDelete(); + UFUNCTION(BlueprintImplementableEvent, BlueprintCallable, /*meta = (BlueprintProtected)*/ Category = "OptiXActor") + void OnOverlapBeginWithLever(UPrimitiveComponent* Lever); + + UFUNCTION(BlueprintImplementableEvent, BlueprintCallable, /*meta = (BlueprintProtected)*/ Category = "OptiXActor") + void OnOverlapEndWithLever(UPrimitiveComponent* Lever); + public: UPROPERTY(BlueprintReadWrite, EditAnywhere) diff --git a/Source/OptiX/Public/SelectableActorBase.h b/Source/OptiX/Public/SelectableActorBase.h index 682cd71eb4b9d2195cf98219fad58bbd21059442..068d93a2ab701d56fce54fe9d74b7523d1f05bb0 100644 --- a/Source/OptiX/Public/SelectableActorBase.h +++ b/Source/OptiX/Public/SelectableActorBase.h @@ -57,10 +57,10 @@ public: UFUNCTION(BlueprintCallable, /*meta = (BlueprintProtected)*/ Category = "OptiXActor") void SetRodPosition(FVector TablePosition); - UFUNCTION() + UFUNCTION(BlueprintNativeEvent) void OnOverlapBegin(class UPrimitiveComponent* OverlapComponent, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult); - UFUNCTION() + UFUNCTION(BlueprintNativeEvent) void OnOverlapEnd(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);