Skip to content
Snippets Groups Projects
Commit c5a8dec1 authored by Jonathan Ehret's avatar Jonathan Ehret
Browse files

Merge branch 'feature/PointingFix' into 'develop'

#21 Pointing is now overlayed on top of Final Pose; Additionally, VH will...

See merge request VR-Group/unreal-development/character-plugin!6
parents e9aa4b7f 5542dd72
No related branches found
No related tags found
No related merge requests found
No preview for this file type
......@@ -2,6 +2,7 @@
#include "VHPointing.h"
#include "Helper/CharacterPluginLogging.h"
// Sets default values for this component's properties
UVHPointing::UVHPointing()
......@@ -19,7 +20,6 @@ void UVHPointing::BeginPlay()
{
Super::BeginPlay();
// ...
}
......@@ -28,7 +28,44 @@ void UVHPointing::BeginPlay()
void UVHPointing::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
if (VHAnimInstance == nullptr) {
if (Cast<USkeletalMeshComponent>(GetOwner()->GetComponentByClass(USkeletalMeshComponent::StaticClass()))->GetAnimInstance())
{
VHAnimInstance = Cast<UVHAnimInstance>(Cast<USkeletalMeshComponent>(GetOwner()->GetComponentByClass(USkeletalMeshComponent::StaticClass()))->GetAnimInstance());
}
else
{
VH_ERROR("[UVHPointing::TickComponent] No VHAnimInstance component attached");
}
}
else
{
VHAnimInstance->EffectorPosition = PointingTarget;
if (bIsPointing)
{
FVector DirVHTarget = PointingTarget - GetOwner()->GetActorLocation();
float AngleLeftRight = FVector::DotProduct(FVector::CrossProduct(GetOwner()->GetActorUpVector().GetSafeNormal(), DirVHTarget.GetSafeNormal()), GetOwner()->GetActorForwardVector().GetSafeNormal());
float AngleFrontTarget = FMath::Acos(FVector::DotProduct(DirVHTarget.GetSafeNormal(), GetOwner()->GetActorForwardVector().GetSafeNormal()));
if (AngleFrontTarget > (180-BlindAngle)*PI/180.0) {
VHAnimInstance->PointingUseHand = EPointingHand::HandNone;
}
else
{
if (AngleLeftRight > 0) {
VHAnimInstance->PointingUseHand = EPointingHand::HandLeft;
}
else
{
VHAnimInstance->PointingUseHand = EPointingHand::HandRight;
}
}
}
else
{
VHAnimInstance->PointingUseHand = EPointingHand::HandNone;
}
}
// ...
}
......@@ -6,6 +6,14 @@
#include "Animation/AnimInstance.h"
#include "VHAnimInstance.generated.h"
UENUM()
enum EPointingHand
{
HandNone = 0 UMETA(DisplayName = "None"),
HandLeft = 1 UMETA(DisplayName = "Left Hand"),
HandRight = 2 UMETA(DisplayName = "Right Hand")
};
UCLASS()
class CHARACTERPLUGIN_API UVHAnimInstance : public UAnimInstance {
GENERATED_UCLASS_BODY()
......@@ -34,4 +42,10 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FRotator SkelControl_Head = FRotator(0.0f, 0.0f, 0.0f);
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
TEnumAsByte<EPointingHand> PointingUseHand = EPointingHand::HandNone;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FVector EffectorPosition;
};
......@@ -4,9 +4,11 @@
#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "VHAnimInstance.h"
#include "VHPointing.generated.h"
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class CHARACTERPLUGIN_API UVHPointing : public UActorComponent
{
......@@ -20,12 +22,17 @@ protected:
// Called when the game starts
virtual void BeginPlay() override;
private:
UVHAnimInstance* VHAnimInstance;
public:
// Called every frame
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool isPointing;
bool bIsPointing;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FVector PointingTarget;
// Angle of back area at which pointing stops in degrees.
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float BlindAngle = 30.0;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment