refactor and remove the need to cache the component in the grab/release workflow
This commit is contained in:
@@ -80,6 +80,9 @@ struct ASGPawn::FImpl
|
|||||||
|
|
||||||
void BindFingerTouchOverlapEvents();
|
void BindFingerTouchOverlapEvents();
|
||||||
void UnbindFingerTouchOverlapEvents();
|
void UnbindFingerTouchOverlapEvents();
|
||||||
|
|
||||||
|
void DisableActorPhysics(const AActor* Actor) const;
|
||||||
|
void EnableActorPhysics(const AActor* Actor) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||||
@@ -429,10 +432,10 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
|||||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Vehicle, ECR_Overlap);
|
||||||
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
RightPinkyFingertipTouchCollider->SetCollisionResponseToChannel(ECC_Destructible, ECR_Overlap);
|
||||||
|
|
||||||
LeftHandGrabState = FSGGrabState(HandLeft, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
|
LeftHandGrabState = FSGGrabState(HandLeft, nullptr, nullptr, nullptr, nullptr);
|
||||||
LeftHandTouchState = FSGTouchState(HandLeft, nullptr, nullptr, nullptr, nullptr, nullptr);
|
LeftHandTouchState = FSGTouchState(HandLeft, nullptr, nullptr, nullptr, nullptr, nullptr);
|
||||||
|
|
||||||
RightHandGrabState = FSGGrabState(HandLeft, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
|
RightHandGrabState = FSGGrabState(HandLeft, nullptr, nullptr, nullptr, nullptr);
|
||||||
RightHandTouchState = FSGTouchState(HandRight, nullptr, nullptr, nullptr, nullptr, nullptr);
|
RightHandTouchState = FSGTouchState(HandRight, nullptr, nullptr, nullptr, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -503,7 +506,6 @@ void ASGPawn::OnLeftThumbFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
LeftHandGrabState.ActorThumbCanGrab = OtherActor;
|
LeftHandGrabState.ActorThumbCanGrab = OtherActor;
|
||||||
LeftHandGrabState.ComponentThumbCanGrab = OtherComp;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -520,7 +522,6 @@ void ASGPawn::OnLeftThumbFingertipGrabColliderOverlapEnds(
|
|||||||
if (LeftHandGrabState.ActorThumbCanGrab == OtherActor)
|
if (LeftHandGrabState.ActorThumbCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
LeftHandGrabState.ActorThumbCanGrab = nullptr;
|
LeftHandGrabState.ActorThumbCanGrab = nullptr;
|
||||||
LeftHandGrabState.ComponentThumbCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -541,7 +542,6 @@ void ASGPawn::OnLeftIndexFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
LeftHandGrabState.ActorIndexCanGrab = OtherActor;
|
LeftHandGrabState.ActorIndexCanGrab = OtherActor;
|
||||||
LeftHandGrabState.ComponentIndexCanGrab = OtherComp;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -558,7 +558,6 @@ void ASGPawn::OnLeftIndexFingertipGrabColliderOverlapEnds(
|
|||||||
if (LeftHandGrabState.ActorIndexCanGrab == OtherActor)
|
if (LeftHandGrabState.ActorIndexCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
LeftHandGrabState.ActorIndexCanGrab = nullptr;
|
LeftHandGrabState.ActorIndexCanGrab = nullptr;
|
||||||
LeftHandGrabState.ComponentIndexCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -579,7 +578,6 @@ void ASGPawn::OnLeftMiddleFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
LeftHandGrabState.ActorMiddleCanGrab = OtherActor;
|
LeftHandGrabState.ActorMiddleCanGrab = OtherActor;
|
||||||
LeftHandGrabState.ComponentMiddleCanGrab = OtherComp;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -596,7 +594,6 @@ void ASGPawn::OnLeftMiddleFingertipGrabColliderOverlapEnds(
|
|||||||
if (LeftHandGrabState.ActorMiddleCanGrab == OtherActor)
|
if (LeftHandGrabState.ActorMiddleCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
LeftHandGrabState.ActorMiddleCanGrab = nullptr;
|
LeftHandGrabState.ActorMiddleCanGrab = nullptr;
|
||||||
LeftHandGrabState.ComponentMiddleCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(LeftHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -807,7 +804,6 @@ void ASGPawn::OnRightThumbFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
RightHandGrabState.ActorThumbCanGrab = OtherActor;
|
RightHandGrabState.ActorThumbCanGrab = OtherActor;
|
||||||
RightHandGrabState.ComponentThumbCanGrab = OtherComp;
|
|
||||||
TouchStateUpdatedEvent.Broadcast(LeftHandTouchState);
|
TouchStateUpdatedEvent.Broadcast(LeftHandTouchState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -824,7 +820,6 @@ void ASGPawn::OnRightThumbFingertipGrabColliderOverlapEnds(
|
|||||||
if (RightHandGrabState.ActorThumbCanGrab == OtherActor)
|
if (RightHandGrabState.ActorThumbCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
RightHandGrabState.ActorThumbCanGrab = nullptr;
|
RightHandGrabState.ActorThumbCanGrab = nullptr;
|
||||||
RightHandGrabState.ComponentThumbCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -845,7 +840,6 @@ void ASGPawn::OnRightIndexFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
RightHandGrabState.ActorIndexCanGrab = OtherActor;
|
RightHandGrabState.ActorIndexCanGrab = OtherActor;
|
||||||
RightHandGrabState.ComponentIndexCanGrab = OtherComp;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -862,7 +856,6 @@ void ASGPawn::OnRightIndexFingertipGrabColliderOverlapEnds(
|
|||||||
if (RightHandGrabState.ActorThumbCanGrab == OtherActor)
|
if (RightHandGrabState.ActorThumbCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
RightHandGrabState.ActorIndexCanGrab = nullptr;
|
RightHandGrabState.ActorIndexCanGrab = nullptr;
|
||||||
RightHandGrabState.ComponentIndexCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -883,7 +876,6 @@ void ASGPawn::OnRightMiddleFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
RightHandGrabState.ActorMiddleCanGrab = OtherActor;
|
RightHandGrabState.ActorMiddleCanGrab = OtherActor;
|
||||||
RightHandGrabState.ComponentMiddleCanGrab = OtherComp;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -900,7 +892,6 @@ void ASGPawn::OnRightMiddleFingertipGrabColliderOverlapEnds(
|
|||||||
if (RightHandGrabState.ActorMiddleCanGrab == OtherActor)
|
if (RightHandGrabState.ActorMiddleCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
RightHandGrabState.ActorMiddleCanGrab = nullptr;
|
RightHandGrabState.ActorMiddleCanGrab = nullptr;
|
||||||
RightHandGrabState.ComponentMiddleCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
GrabStateUpdatedEvent.Broadcast(RightHandGrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1122,7 +1113,7 @@ bool ASGPawn::IsGrabbing(const USGVirtualHandComponent* Hand, AActor*& OutActor)
|
|||||||
return Hand == HandLeft ? IsLeftHandGrabbing(OutActor) : IsRightHandGrabbing(OutActor);
|
return Hand == HandLeft ? IsLeftHandGrabbing(OutActor) : IsRightHandGrabbing(OutActor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ASGPawn::Grab(USGVirtualHandComponent* Hand, AActor* Actor, UPrimitiveComponent* Component)
|
void ASGPawn::Grab(USGVirtualHandComponent* Hand, AActor* Actor)
|
||||||
{
|
{
|
||||||
if (!ensureAlwaysMsgf(IsValid(Actor), TEXT("%s"), TEXT("ERROR: invalid actor!")))
|
if (!ensureAlwaysMsgf(IsValid(Actor), TEXT("%s"), TEXT("ERROR: invalid actor!")))
|
||||||
{
|
{
|
||||||
@@ -1147,26 +1138,7 @@ void ASGPawn::Grab(USGVirtualHandComponent* Hand, AActor* Actor, UPrimitiveCompo
|
|||||||
|
|
||||||
if (GrabComponent->GetAffectPhysicsState())
|
if (GrabComponent->GetAffectPhysicsState())
|
||||||
{
|
{
|
||||||
const USceneComponent* ActorRootComponent{Cast<USceneComponent>(Actor->GetRootComponent())};
|
Pimpl->DisableActorPhysics(Actor);
|
||||||
if (!ensureAlwaysMsgf(IsValid(ActorRootComponent), TEXT("%s"), TEXT("ERROR: invalid actor's root component!")))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
TArray<USceneComponent*> ActorChildrenComponents;
|
|
||||||
ActorRootComponent->GetChildrenComponents(true, ActorChildrenComponents);
|
|
||||||
for (USceneComponent* SceneComponent: ActorChildrenComponents)
|
|
||||||
{
|
|
||||||
UPrimitiveComponent* PrimitiveComponent{Cast<UPrimitiveComponent>(SceneComponent)};
|
|
||||||
if (IsValid(PrimitiveComponent))
|
|
||||||
{
|
|
||||||
PrimitiveComponent->SetSimulatePhysics(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsValid(Component))
|
|
||||||
{
|
|
||||||
Component->SetSimulatePhysics(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool bAttached = Actor->AttachToComponent(Hand, MoveTemp(AttachmentRules), SocketName);
|
const bool bAttached = Actor->AttachToComponent(Hand, MoveTemp(AttachmentRules), SocketName);
|
||||||
@@ -1202,31 +1174,10 @@ void ASGPawn::ReleaseLeft()
|
|||||||
|
|
||||||
if (GrabComponent->GetAffectPhysicsState())
|
if (GrabComponent->GetAffectPhysicsState())
|
||||||
{
|
{
|
||||||
const UPrimitiveComponent* ActorRootComponent{
|
Pimpl->EnableActorPhysics(LeftHandGrabState.GrabbedActor);
|
||||||
Cast<UPrimitiveComponent>(LeftHandGrabState.GrabbedActor->GetRootComponent())
|
|
||||||
};
|
|
||||||
if (ensureAlwaysMsgf(IsValid(ActorRootComponent), TEXT("%s"), TEXT("ERROR: invalid actor's root component!")))
|
|
||||||
{
|
|
||||||
TArray<USceneComponent*> ActorChildrenComponents;
|
|
||||||
ActorRootComponent->GetChildrenComponents(true, ActorChildrenComponents);
|
|
||||||
for (USceneComponent* SceneComponent: ActorChildrenComponents)
|
|
||||||
{
|
|
||||||
UPrimitiveComponent* PrimitiveComponent{Cast<UPrimitiveComponent>(SceneComponent)};
|
|
||||||
if (IsValid(PrimitiveComponent))
|
|
||||||
{
|
|
||||||
PrimitiveComponent->SetSimulatePhysics(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsValid(LeftHandGrabState.GrabbedComponent))
|
|
||||||
{
|
|
||||||
LeftHandGrabState.GrabbedComponent->SetSimulatePhysics(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LeftHandGrabState.GrabbedActor = nullptr;
|
LeftHandGrabState.GrabbedActor = nullptr;
|
||||||
LeftHandGrabState.GrabbedComponent = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ASGPawn::ReleaseRight()
|
void ASGPawn::ReleaseRight()
|
||||||
@@ -1251,31 +1202,10 @@ void ASGPawn::ReleaseRight()
|
|||||||
|
|
||||||
if (GrabComponent->GetAffectPhysicsState())
|
if (GrabComponent->GetAffectPhysicsState())
|
||||||
{
|
{
|
||||||
const UPrimitiveComponent* ActorRootComponent{
|
Pimpl->EnableActorPhysics(RightHandGrabState.GrabbedActor);
|
||||||
Cast<UPrimitiveComponent>(LeftHandGrabState.GrabbedActor->GetRootComponent())
|
|
||||||
};
|
|
||||||
if (ensureAlwaysMsgf(IsValid(ActorRootComponent), TEXT("%s"), TEXT("ERROR: invalid actor's root component!")))
|
|
||||||
{
|
|
||||||
TArray<USceneComponent*> ActorChildrenComponents;
|
|
||||||
ActorRootComponent->GetChildrenComponents(true, ActorChildrenComponents);
|
|
||||||
for (USceneComponent* SceneComponent: ActorChildrenComponents)
|
|
||||||
{
|
|
||||||
UPrimitiveComponent* PrimitiveComponent{Cast<UPrimitiveComponent>(SceneComponent)};
|
|
||||||
if (IsValid(PrimitiveComponent))
|
|
||||||
{
|
|
||||||
PrimitiveComponent->SetSimulatePhysics(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsValid(RightHandGrabState.GrabbedComponent))
|
|
||||||
{
|
|
||||||
RightHandGrabState.GrabbedComponent->SetSimulatePhysics(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RightHandGrabState.GrabbedActor = nullptr;
|
RightHandGrabState.GrabbedActor = nullptr;
|
||||||
RightHandGrabState.GrabbedComponent = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ASGPawn::FImpl::FImpl(ASGPawn* InOwner)
|
ASGPawn::FImpl::FImpl(ASGPawn* InOwner)
|
||||||
@@ -1470,6 +1400,38 @@ void ASGPawn::FImpl::UnbindFingerTouchOverlapEvents()
|
|||||||
Owner, &ASGPawn::OnRightPinkyFingertipTouchColliderOverlapEnds);
|
Owner, &ASGPawn::OnRightPinkyFingertipTouchColliderOverlapEnds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ASGPawn::FImpl::DisableActorPhysics(const AActor* Actor) const
|
||||||
|
{
|
||||||
|
TArray<USceneComponent*> ActorComponents;
|
||||||
|
Actor->GetComponents(ActorComponents);
|
||||||
|
for (USceneComponent* SceneComponent: ActorComponents)
|
||||||
|
{
|
||||||
|
UPrimitiveComponent* PrimitiveComponent{Cast<UPrimitiveComponent>(SceneComponent)};
|
||||||
|
if (IsValid(PrimitiveComponent))
|
||||||
|
{
|
||||||
|
PrimitiveComponent->SetEnableGravity(false);
|
||||||
|
PrimitiveComponent->SetSimulatePhysics(false);
|
||||||
|
PrimitiveComponent->SetCollisionEnabled(ECollisionEnabled::NoCollision);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASGPawn::FImpl::EnableActorPhysics(const AActor* Actor) const
|
||||||
|
{
|
||||||
|
TArray<USceneComponent*> ActorComponents;
|
||||||
|
Actor->GetComponents(ActorComponents);
|
||||||
|
for (USceneComponent* SceneComponent: ActorComponents)
|
||||||
|
{
|
||||||
|
UPrimitiveComponent* PrimitiveComponent{Cast<UPrimitiveComponent>(SceneComponent)};
|
||||||
|
if (IsValid(PrimitiveComponent))
|
||||||
|
{
|
||||||
|
PrimitiveComponent->SetEnableGravity(true);
|
||||||
|
PrimitiveComponent->SetSimulatePhysics(true);
|
||||||
|
PrimitiveComponent->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ASGPawn::FImpl::~FImpl() = default;
|
ASGPawn::FImpl::~FImpl() = default;
|
||||||
|
|
||||||
void ASGPawn::FImplDeleter::operator()(const FImpl* P) const
|
void ASGPawn::FImplDeleter::operator()(const FImpl* P) const
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ void ASGPlayerController::BeginPlay()
|
|||||||
{
|
{
|
||||||
if (SGPawn->CanGrab(GrabState.Hand, GrabState.ActorThumbCanGrab))
|
if (SGPawn->CanGrab(GrabState.Hand, GrabState.ActorThumbCanGrab))
|
||||||
{
|
{
|
||||||
SGPawn->Grab(GrabState.Hand, GrabState.ActorThumbCanGrab, GrabState.ComponentThumbCanGrab);
|
SGPawn->Grab(GrabState.Hand, GrabState.ActorThumbCanGrab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ ASGVirtualHandActor::ASGVirtualHandActor(const FObjectInitializer& ObjectInitial
|
|||||||
|
|
||||||
WristTracker->SetRight(VirtualHand->IsRight());
|
WristTracker->SetRight(VirtualHand->IsRight());
|
||||||
|
|
||||||
GrabState = FSGGrabState(VirtualHand, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
|
GrabState = FSGGrabState(VirtualHand, nullptr, nullptr, nullptr, nullptr);
|
||||||
TouchState = FSGTouchState(VirtualHand, nullptr, nullptr, nullptr, nullptr, nullptr);
|
TouchState = FSGTouchState(VirtualHand, nullptr, nullptr, nullptr, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +307,6 @@ void ASGVirtualHandActor::OnThumbFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
GrabState.ActorThumbCanGrab = OtherActor;
|
GrabState.ActorThumbCanGrab = OtherActor;
|
||||||
GrabState.ComponentThumbCanGrab = OtherComp;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(GrabState);
|
GrabStateUpdatedEvent.Broadcast(GrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -324,7 +323,6 @@ void ASGVirtualHandActor::OnThumbFingertipGrabColliderOverlapEnds(
|
|||||||
if (GrabState.ActorThumbCanGrab == OtherActor)
|
if (GrabState.ActorThumbCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
GrabState.ActorThumbCanGrab = nullptr;
|
GrabState.ActorThumbCanGrab = nullptr;
|
||||||
GrabState.ComponentThumbCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(GrabState);
|
GrabStateUpdatedEvent.Broadcast(GrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -345,7 +343,6 @@ void ASGVirtualHandActor::OnIndexFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
GrabState.ActorIndexCanGrab = OtherActor;
|
GrabState.ActorIndexCanGrab = OtherActor;
|
||||||
GrabState.ComponentIndexCanGrab = OtherComp;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(GrabState);
|
GrabStateUpdatedEvent.Broadcast(GrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -362,7 +359,6 @@ void ASGVirtualHandActor::OnIndexFingertipGrabColliderOverlapEnds(
|
|||||||
if (GrabState.ActorIndexCanGrab == OtherActor)
|
if (GrabState.ActorIndexCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
GrabState.ActorIndexCanGrab = nullptr;
|
GrabState.ActorIndexCanGrab = nullptr;
|
||||||
GrabState.ComponentIndexCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(GrabState);
|
GrabStateUpdatedEvent.Broadcast(GrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -383,7 +379,6 @@ void ASGVirtualHandActor::OnMiddleFingertipGrabColliderOverlapBegins(
|
|||||||
if (USGGrabComponent::IsGrabbable(OtherActor))
|
if (USGGrabComponent::IsGrabbable(OtherActor))
|
||||||
{
|
{
|
||||||
GrabState.ActorMiddleCanGrab = OtherActor;
|
GrabState.ActorMiddleCanGrab = OtherActor;
|
||||||
GrabState.ComponentMiddleCanGrab = OtherComp;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(GrabState);
|
GrabStateUpdatedEvent.Broadcast(GrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -400,7 +395,6 @@ void ASGVirtualHandActor::OnMiddleFingertipGrabColliderOverlapEnds(
|
|||||||
if (GrabState.ActorMiddleCanGrab == OtherActor)
|
if (GrabState.ActorMiddleCanGrab == OtherActor)
|
||||||
{
|
{
|
||||||
GrabState.ActorMiddleCanGrab = nullptr;
|
GrabState.ActorMiddleCanGrab = nullptr;
|
||||||
GrabState.ComponentMiddleCanGrab = nullptr;
|
|
||||||
GrabStateUpdatedEvent.Broadcast(GrabState);
|
GrabStateUpdatedEvent.Broadcast(GrabState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,6 @@
|
|||||||
|
|
||||||
#include "SenseGlove/Haptics/SGGrabState.h"
|
#include "SenseGlove/Haptics/SGGrabState.h"
|
||||||
|
|
||||||
#include "Components/SphereComponent.h"
|
|
||||||
#include "GameFramework/Actor.h"
|
#include "GameFramework/Actor.h"
|
||||||
|
|
||||||
#include "SenseGlove/Components/SGVirtualHandComponent.h"
|
#include "SenseGlove/Components/SGVirtualHandComponent.h"
|
||||||
@@ -43,33 +42,21 @@
|
|||||||
FSGGrabState::FSGGrabState()
|
FSGGrabState::FSGGrabState()
|
||||||
: Hand(nullptr),
|
: Hand(nullptr),
|
||||||
ActorThumbCanGrab(nullptr),
|
ActorThumbCanGrab(nullptr),
|
||||||
ComponentThumbCanGrab(nullptr),
|
|
||||||
ActorIndexCanGrab(nullptr),
|
ActorIndexCanGrab(nullptr),
|
||||||
ComponentIndexCanGrab(nullptr),
|
|
||||||
ActorMiddleCanGrab(nullptr),
|
ActorMiddleCanGrab(nullptr),
|
||||||
ComponentMiddleCanGrab(nullptr),
|
GrabbedActor(nullptr)
|
||||||
GrabbedActor(nullptr),
|
|
||||||
GrabbedComponent(nullptr)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
FSGGrabState::FSGGrabState(USGVirtualHandComponent* InHand,
|
FSGGrabState::FSGGrabState(USGVirtualHandComponent* InHand,
|
||||||
AActor* InActorThumbCanGrab,
|
AActor* InActorThumbCanGrab,
|
||||||
UPrimitiveComponent* InComponentThumbCanGrab,
|
|
||||||
AActor* InActorIndexCanGrab,
|
AActor* InActorIndexCanGrab,
|
||||||
UPrimitiveComponent* InComponentIndexCanGrab,
|
|
||||||
AActor* InActorMiddleCanGrab,
|
AActor* InActorMiddleCanGrab,
|
||||||
UPrimitiveComponent* InComponentMiddleCanGrab,
|
AActor* InGrabbedActor)
|
||||||
AActor* InGrabbedActor,
|
|
||||||
UPrimitiveComponent* InGrabbedComponent)
|
|
||||||
: Hand(InHand),
|
: Hand(InHand),
|
||||||
ActorThumbCanGrab(InActorThumbCanGrab),
|
ActorThumbCanGrab(InActorThumbCanGrab),
|
||||||
ComponentThumbCanGrab(InComponentThumbCanGrab),
|
|
||||||
ActorIndexCanGrab(InActorIndexCanGrab),
|
ActorIndexCanGrab(InActorIndexCanGrab),
|
||||||
ComponentIndexCanGrab(InComponentIndexCanGrab),
|
|
||||||
ActorMiddleCanGrab(InActorMiddleCanGrab),
|
ActorMiddleCanGrab(InActorMiddleCanGrab),
|
||||||
ComponentMiddleCanGrab(InComponentMiddleCanGrab),
|
GrabbedActor(InGrabbedActor)
|
||||||
GrabbedActor(InGrabbedActor),
|
|
||||||
GrabbedComponent(InGrabbedComponent)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -589,17 +589,17 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FORCEINLINE void GrabLeft(AActor* Actor, UPrimitiveComponent* Component)
|
FORCEINLINE void GrabLeft(AActor* Actor)
|
||||||
{
|
{
|
||||||
Grab(HandLeft, Actor, Component);
|
Grab(HandLeft, Actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCEINLINE void GrabRight(AActor* Actor, UPrimitiveComponent* Component)
|
FORCEINLINE void GrabRight(AActor* Actor)
|
||||||
{
|
{
|
||||||
Grab(HandRight, Actor, Component);
|
Grab(HandRight, Actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Grab(USGVirtualHandComponent* Hand, AActor* Actor, UPrimitiveComponent* Component);
|
void Grab(USGVirtualHandComponent* Hand, AActor* Actor);
|
||||||
|
|
||||||
void ReleaseLeft();
|
void ReleaseLeft();
|
||||||
|
|
||||||
|
|||||||
@@ -56,37 +56,21 @@ public:
|
|||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
||||||
AActor* ActorThumbCanGrab;
|
AActor* ActorThumbCanGrab;
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
|
||||||
UPrimitiveComponent* ComponentThumbCanGrab;
|
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
||||||
AActor* ActorIndexCanGrab;
|
AActor* ActorIndexCanGrab;
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
|
||||||
UPrimitiveComponent* ComponentIndexCanGrab;
|
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
||||||
AActor* ActorMiddleCanGrab;
|
AActor* ActorMiddleCanGrab;
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
|
||||||
UPrimitiveComponent* ComponentMiddleCanGrab;
|
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
||||||
AActor* GrabbedActor;
|
AActor* GrabbedActor;
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SenseGlove")
|
|
||||||
UPrimitiveComponent* GrabbedComponent;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FSGGrabState();
|
FSGGrabState();
|
||||||
|
|
||||||
explicit FSGGrabState(USGVirtualHandComponent* InHand,
|
explicit FSGGrabState(USGVirtualHandComponent* InHand,
|
||||||
AActor* InActorThumbCanGrab,
|
AActor* InActorThumbCanGrab,
|
||||||
UPrimitiveComponent* InComponentThumbCanGrab,
|
|
||||||
AActor* InActorIndexCanGrab,
|
AActor* InActorIndexCanGrab,
|
||||||
UPrimitiveComponent* InComponentIndexCanGrab,
|
|
||||||
AActor* InActorMiddleCanGrab,
|
AActor* InActorMiddleCanGrab,
|
||||||
UPrimitiveComponent* InComponentMiddleCanGrab,
|
AActor* InGrabbedActor);
|
||||||
AActor* InGrabbedActor,
|
|
||||||
UPrimitiveComponent* InGrabbedComponent);
|
|
||||||
};
|
};
|
||||||
@@ -208,20 +208,19 @@ bool UPawnKismetLibrary::IsGrabbing(const ASGPawn* Pawn, const USGVirtualHandCom
|
|||||||
return Pawn->IsGrabbing(Hand);
|
return Pawn->IsGrabbing(Hand);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UPawnKismetLibrary::GrabLeft(ASGPawn* Pawn, AActor* Actor, UPrimitiveComponent* Component)
|
void UPawnKismetLibrary::GrabLeft(ASGPawn* Pawn, AActor* Actor)
|
||||||
{
|
{
|
||||||
Pawn->GrabLeft(Actor, Component);
|
Pawn->GrabLeft(Actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UPawnKismetLibrary::GrabRight(ASGPawn* Pawn, AActor* Actor, UPrimitiveComponent* Component)
|
void UPawnKismetLibrary::GrabRight(ASGPawn* Pawn, AActor* Actor)
|
||||||
{
|
{
|
||||||
Pawn->GrabRight(Actor, Component);
|
Pawn->GrabRight(Actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UPawnKismetLibrary::Grab(
|
void UPawnKismetLibrary::Grab(ASGPawn* Pawn, USGVirtualHandComponent* Hand, AActor* Actor)
|
||||||
ASGPawn* Pawn, USGVirtualHandComponent* Hand, AActor* Actor, UPrimitiveComponent* Component)
|
|
||||||
{
|
{
|
||||||
Pawn->Grab(Hand, Actor, Component);
|
Pawn->Grab(Hand, Actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UPawnKismetLibrary::ReleaseLeft(ASGPawn* Pawn)
|
void UPawnKismetLibrary::ReleaseLeft(ASGPawn* Pawn)
|
||||||
|
|||||||
@@ -162,13 +162,13 @@ public:
|
|||||||
static bool IsGrabbing(const ASGPawn* Pawn, const USGVirtualHandComponent* Hand);
|
static bool IsGrabbing(const ASGPawn* Pawn, const USGVirtualHandComponent* Hand);
|
||||||
|
|
||||||
UFUNCTION(BlueprintCallable, Category="SenseGlove | Game Framework | Pawn")
|
UFUNCTION(BlueprintCallable, Category="SenseGlove | Game Framework | Pawn")
|
||||||
static void GrabLeft(UPARAM(ref) ASGPawn* Pawn, AActor* Actor, UPrimitiveComponent* Component);
|
static void GrabLeft(UPARAM(ref) ASGPawn* Pawn, AActor* Actor);
|
||||||
|
|
||||||
UFUNCTION(BlueprintCallable, Category="SenseGlove | Game Framework | Pawn")
|
UFUNCTION(BlueprintCallable, Category="SenseGlove | Game Framework | Pawn")
|
||||||
static void GrabRight(UPARAM(ref) ASGPawn* Pawn, AActor* Actor, UPrimitiveComponent* Component);
|
static void GrabRight(UPARAM(ref) ASGPawn* Pawn, AActor* Actor);
|
||||||
|
|
||||||
UFUNCTION(BlueprintCallable, Category="SenseGlove | Game Framework | Pawn")
|
UFUNCTION(BlueprintCallable, Category="SenseGlove | Game Framework | Pawn")
|
||||||
void Grab(UPARAM(ref) ASGPawn* Pawn, USGVirtualHandComponent* Hand, AActor* Actor, UPrimitiveComponent* Component);
|
void Grab(UPARAM(ref) ASGPawn* Pawn, USGVirtualHandComponent* Hand, AActor* Actor);
|
||||||
|
|
||||||
UFUNCTION(BlueprintCallable, Category="SenseGlove | Game Framework | Pawn")
|
UFUNCTION(BlueprintCallable, Category="SenseGlove | Game Framework | Pawn")
|
||||||
void ReleaseLeft(UPARAM(ref) ASGPawn* Pawn);
|
void ReleaseLeft(UPARAM(ref) ASGPawn* Pawn);
|
||||||
|
|||||||
Reference in New Issue
Block a user