fix a bug where sgpawn hand's finger collider interact with the world when the hand is not mesh visible
This commit is contained in:
@@ -118,6 +118,9 @@ struct ASGPawn::FImpl
|
||||
void UpdateRightHandLocationAndRotation(
|
||||
const FVector& Location, const FRotator& Rotation, const bool bUpdateVirtualHand);
|
||||
|
||||
void SetFingerColliderCollisionEnabled(USphereComponent* Collider, bool bEnabled) const;
|
||||
void SetAllFingersColliderCollisionEnabled(bool bRight, bool bEnabled) const;
|
||||
|
||||
FORCEINLINE void RegisterLeftHandOverlappedActor(const AActor* Actor) const
|
||||
{
|
||||
Owner->LeftHandOverlappedActors.AddUnique(Actor);
|
||||
@@ -254,15 +257,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
LeftThumbFingertipGrabCollider->SetCanEverAffectNavigation(false);
|
||||
LeftThumbFingertipGrabCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
LeftThumbFingertipGrabCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
LeftThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(LeftThumbFingertipGrabCollider, true);
|
||||
|
||||
LeftIndexFingertipGrabCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("LeftIndexFingertipGrabCollider"));
|
||||
@@ -274,15 +269,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
LeftIndexFingertipGrabCollider->SetCanEverAffectNavigation(false);
|
||||
LeftIndexFingertipGrabCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
LeftIndexFingertipGrabCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
LeftIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(LeftIndexFingertipGrabCollider, true);
|
||||
|
||||
LeftMiddleFingertipGrabCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("LeftMiddleFingertipGrabCollider"));
|
||||
@@ -294,15 +281,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
LeftMiddleFingertipGrabCollider->SetCanEverAffectNavigation(false);
|
||||
LeftMiddleFingertipGrabCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
LeftMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(LeftMiddleFingertipGrabCollider, true);
|
||||
|
||||
LeftThumbFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("LeftThumbFingertipTouchCollider"));
|
||||
@@ -314,15 +293,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
LeftThumbFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
LeftThumbFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
LeftThumbFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
LeftThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(LeftThumbFingertipTouchCollider, true);
|
||||
|
||||
LeftIndexFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("LeftIndexFingertipTouchCollider"));
|
||||
@@ -334,15 +305,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
LeftIndexFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
LeftIndexFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
LeftIndexFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
LeftIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(LeftIndexFingertipTouchCollider, true);
|
||||
|
||||
LeftMiddleFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("LeftMiddleFingertipTouchCollider"));
|
||||
@@ -355,14 +318,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
LeftMiddleFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
LeftMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(LeftMiddleFingertipTouchCollider, true);
|
||||
|
||||
LeftRingFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("LeftRingFingertipTouchCollider"));
|
||||
@@ -374,15 +330,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
LeftRingFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
LeftRingFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
LeftRingFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
LeftRingFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
LeftRingFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
LeftRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
LeftRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
LeftRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
LeftRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
LeftRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
LeftRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
LeftRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(LeftRingFingertipTouchCollider, true);
|
||||
|
||||
LeftPinkyFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("LeftPinkyFingertipTouchCollider"));
|
||||
@@ -394,15 +342,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
LeftPinkyFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
LeftPinkyFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
LeftPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(LeftPinkyFingertipTouchCollider, true);
|
||||
|
||||
WristTrackerRight = ObjectInitializer.CreateDefaultSubobject<USGWristTrackerComponent>(
|
||||
this, TEXT("WristTrackerRight"));
|
||||
@@ -476,15 +416,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightThumbFingertipGrabCollider->SetCanEverAffectNavigation(false);
|
||||
RightThumbFingertipGrabCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
RightThumbFingertipGrabCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
RightThumbFingertipGrabCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
RightThumbFingertipGrabCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
RightThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
RightThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
RightThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
RightThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
RightThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
RightThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
RightThumbFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(RightThumbFingertipGrabCollider, true);
|
||||
|
||||
RightIndexFingertipGrabCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightIndexFingertipGrabCollider"));
|
||||
@@ -496,15 +428,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightIndexFingertipGrabCollider->SetCanEverAffectNavigation(false);
|
||||
RightIndexFingertipGrabCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
RightIndexFingertipGrabCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
RightIndexFingertipGrabCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
RightIndexFingertipGrabCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
RightIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
RightIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
RightIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
RightIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
RightIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
RightIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
RightIndexFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(RightIndexFingertipGrabCollider, true);
|
||||
|
||||
RightMiddleFingertipGrabCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightMiddleFingertipGrabCollider"));
|
||||
@@ -516,15 +440,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightMiddleFingertipGrabCollider->SetCanEverAffectNavigation(false);
|
||||
RightMiddleFingertipGrabCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
RightMiddleFingertipGrabCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
RightMiddleFingertipGrabCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(RightMiddleFingertipGrabCollider, true);
|
||||
|
||||
RightThumbFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightThumbFingertipTouchCollider"));
|
||||
@@ -536,15 +452,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightThumbFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
RightThumbFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
RightThumbFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
RightThumbFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
RightThumbFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
RightThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
RightThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
RightThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
RightThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
RightThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
RightThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
RightThumbFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(RightThumbFingertipTouchCollider, true);
|
||||
|
||||
RightIndexFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightIndexFingertipTouchCollider"));
|
||||
@@ -556,15 +464,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightIndexFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
RightIndexFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
RightIndexFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
RightIndexFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
RightIndexFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
RightIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
RightIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
RightIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
RightIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
RightIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
RightIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
RightIndexFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(RightIndexFingertipTouchCollider, true);
|
||||
|
||||
RightMiddleFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightMiddleFingertipTouchCollider"));
|
||||
@@ -576,15 +476,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightMiddleFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
RightMiddleFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
RightMiddleFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
RightMiddleFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(RightMiddleFingertipTouchCollider, true);
|
||||
|
||||
RightRingFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightRingFingertipTouchCollider"));
|
||||
@@ -596,15 +488,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightRingFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
RightRingFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
RightRingFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
RightRingFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
RightRingFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
RightRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
RightRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
RightRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
RightRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
RightRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
RightRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
RightRingFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(RightRingFingertipTouchCollider, true);
|
||||
|
||||
RightPinkyFingertipTouchCollider = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(
|
||||
this, TEXT("RightPinkyFingertipTouchCollider"));
|
||||
@@ -616,15 +500,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightPinkyFingertipTouchCollider->SetCanEverAffectNavigation(false);
|
||||
RightPinkyFingertipTouchCollider->CanCharacterStepUpOn = ECanBeCharacterBase::ECB_Owner;
|
||||
RightPinkyFingertipTouchCollider->SetCollisionObjectType(ECC_Pawn);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
Pimpl->SetFingerColliderCollisionEnabled(RightPinkyFingertipTouchCollider, true);
|
||||
|
||||
MaxNumberOfHandVelocitySamples = 10;
|
||||
|
||||
@@ -702,6 +578,16 @@ void ASGPawn::BeginPlay()
|
||||
Pimpl->UpdateRightHandRotation(Rotation, !Pimpl->IsRightHandOverlappingWithAnyActor());
|
||||
});
|
||||
|
||||
HandLeft->OnHandVisibilityChanged().AddWeakLambda(this, [&](const bool bNewVisibility)-> void
|
||||
{
|
||||
Pimpl->SetAllFingersColliderCollisionEnabled(false, bNewVisibility);
|
||||
});
|
||||
|
||||
HandRight->OnHandVisibilityChanged().AddWeakLambda(this, [&](const bool bNewVisibility)-> void
|
||||
{
|
||||
Pimpl->SetAllFingersColliderCollisionEnabled(true, bNewVisibility);
|
||||
});
|
||||
|
||||
Pimpl->BindRealHandsOverlapEvents();
|
||||
|
||||
Pimpl->BindFingerGrabOverlapEvents();
|
||||
@@ -1904,6 +1790,60 @@ void ASGPawn::FImpl::UpdateRightHandLocationAndRotation(
|
||||
UpdateRightHandRotation(Rotation, bUpdateVirtualHand);
|
||||
}
|
||||
|
||||
void ASGPawn::FImpl::SetFingerColliderCollisionEnabled(USphereComponent* Collider, const bool bEnabled) const
|
||||
{
|
||||
if (!ensureAlwaysMsgf(IsValid(Collider), TEXT("Invalid collider object!")))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (bEnabled)
|
||||
{
|
||||
Collider->SetGenerateOverlapEvents(true);
|
||||
Collider->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
|
||||
Collider->SetCollisionResponseToAllChannels(ECR_Overlap);
|
||||
Collider->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap);
|
||||
Collider->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);
|
||||
Collider->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);
|
||||
Collider->SetCollisionResponseToChannel(ECC_Visibility, ECR_Overlap);
|
||||
Collider->SetCollisionResponseToChannel(ECC_PhysicsBody, ECR_Overlap);
|
||||
Collider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||
Collider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||
}
|
||||
else
|
||||
{
|
||||
Collider->SetGenerateOverlapEvents(false);
|
||||
Collider->SetCollisionEnabled(ECollisionEnabled::NoCollision);
|
||||
Collider->SetCollisionResponseToAllChannels(ECR_Ignore);
|
||||
}
|
||||
}
|
||||
|
||||
void ASGPawn::FImpl::SetAllFingersColliderCollisionEnabled(const bool bRight, const bool bEnabled) const
|
||||
{
|
||||
if (bRight)
|
||||
{
|
||||
SetFingerColliderCollisionEnabled(Owner->RightThumbFingertipGrabCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->RightThumbFingertipTouchCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->RightIndexFingertipGrabCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->RightIndexFingertipTouchCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->RightMiddleFingertipGrabCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->RightMiddleFingertipTouchCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->RightRingFingertipTouchCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->RightPinkyFingertipTouchCollider, bEnabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetFingerColliderCollisionEnabled(Owner->LeftThumbFingertipGrabCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->LeftThumbFingertipTouchCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->LeftIndexFingertipGrabCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->LeftIndexFingertipTouchCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->LeftMiddleFingertipGrabCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->LeftMiddleFingertipTouchCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->LeftRingFingertipTouchCollider, bEnabled);
|
||||
SetFingerColliderCollisionEnabled(Owner->LeftPinkyFingertipTouchCollider, bEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
void ASGPawn::FImpl::DisableActorPhysics(const AActor* Actor) const
|
||||
{
|
||||
UPrimitiveComponent* ActorRootComponent{Cast<UPrimitiveComponent>(Actor->GetRootComponent())};
|
||||
|
||||
Reference in New Issue
Block a user