Skip to content
Snippets Groups Projects
Commit af35f5a9 authored by David Gilbert's avatar David Gilbert :bug:
Browse files

Merge branch 'feature/IntenSelectMulti' into 'dev/5.3'

Adds possibility to have more than one ScoringBehaviour attached to IntenSelectable

See merge request !82
parents 38efda25 ea8a93a4
No related branches found
No related tags found
2 merge requests!83Hotfix: Intenselect and InputActions,!82Adds possibility to have more than one ScoringBehaviour attached to IntenSelectable
Pipeline #373193 passed
// Fill out your copyright notice in the Description page of Project Settings. // Fill out your copyright notice in the Description page of Project Settings.
#include "Interaction/Interactables/IntenSelect/IntenSelectable.h" #include "Interaction/Interactables/IntenSelect/IntenSelectable.h"
#include "Interaction/Interactables/IntenSelect/IntenSelectableScoring.h" #include "Interaction/Interactables/IntenSelect/IntenSelectableScoring.h"
#include "Interaction/Interactables/IntenSelect/IntenSelectableSinglePointScoring.h" #include "Interaction/Interactables/IntenSelect/IntenSelectableSinglePointScoring.h"
#include "Kismet/KismetSystemLibrary.h" #include "Kismet/KismetSystemLibrary.h"
...@@ -16,8 +15,44 @@ TPair<FHitResult, float> UIntenSelectable::GetBestPointScorePair(const FVector& ...@@ -16,8 +15,44 @@ TPair<FHitResult, float> UIntenSelectable::GetBestPointScorePair(const FVector&
const float ConeAngle, const float LastValue, const float ConeAngle, const float LastValue,
const float DeltaTime) const const float DeltaTime) const
{ {
checkf(ScoringBehaviour, TEXT("%s"), *GetOwner()->GetName()) return ScoringBehaviour->GetBestPointScorePair( checkf(ScoringBehaviours.Num() > 0, TEXT("%s"), *GetOwner()->GetName());
float MaxScore = -1;
FHitResult MaxResult;
for (UIntenSelectableScoring* s : ScoringBehaviours)
{
const TPair<FHitResult, float> Score_Pair = s->GetBestPointScorePair(
ConeOrigin, ConeForwardDirection, ConeBackwardShiftDistance, ConeAngle, LastValue, DeltaTime); ConeOrigin, ConeForwardDirection, ConeBackwardShiftDistance, ConeAngle, LastValue, DeltaTime);
if (Score_Pair.Value >= MaxScore)
{
MaxResult = Score_Pair.Key;
MaxScore = Score_Pair.Value;
}
}
return TPair<FHitResult, float>{MaxResult, MaxScore};
}
void UIntenSelectable::BeginPlay()
{
Super::BeginPlay();
TInlineComponentArray<UIntenSelectable*> AttachedIntenSelectables;
GetOwner()->GetComponents(AttachedIntenSelectables, false);
if (AttachedIntenSelectables.Num() > 1)
{
if (ScoringBehaviours.Num() == 0)
{
ShowErrorAndQuit(
"Please assign the Scoring Behaviour manually when using more than one IntenSelectable Component!");
}
}
else
{
InitDefaultBehaviourReferences();
}
} }
void UIntenSelectable::HandleOnSelectStartEvents(const UIntenSelectComponent* IntenSelect, const FHitResult& HitResult) void UIntenSelectable::HandleOnSelectStartEvents(const UIntenSelectComponent* IntenSelect, const FHitResult& HitResult)
...@@ -58,18 +93,24 @@ void UIntenSelectable::HandleOnClickEndEvents(UIntenSelectComponent* IntenSelect ...@@ -58,18 +93,24 @@ void UIntenSelectable::HandleOnClickEndEvents(UIntenSelectComponent* IntenSelect
void UIntenSelectable::InitDefaultBehaviourReferences() void UIntenSelectable::InitDefaultBehaviourReferences()
{ {
// Scoring // Scoring
if (UIntenSelectableScoring* AttachedScoring =
Cast<UIntenSelectableScoring>(GetOwner()->GetComponentByClass(UIntenSelectableScoring::StaticClass()))) for (TSet<UActorComponent*> AllComponents = GetOwner()->GetComponents(); UActorComponent * c : AllComponents)
{ {
ScoringBehaviour = AttachedScoring; if (UIntenSelectableScoring* TryToGetScoring = Cast<UIntenSelectableScoring>(c))
{
ScoringBehaviours.Add(TryToGetScoring);
} }
else }
if (ScoringBehaviours.Num() == 0)
{ {
ScoringBehaviour = NewObject<UIntenSelectableSinglePointScoring>( const auto InitScoringBehaviour = NewObject<UIntenSelectableSinglePointScoring>(
this, UIntenSelectableSinglePointScoring::StaticClass(), "Default Scoring"); this, UIntenSelectableSinglePointScoring::StaticClass(), "Default Scoring");
ScoringBehaviour->SetWorldLocation(GetOwner()->GetActorLocation()); InitScoringBehaviour->SetWorldLocation(GetOwner()->GetActorLocation());
ScoringBehaviour->AttachToComponent(GetOwner()->GetRootComponent(), InitScoringBehaviour->AttachToComponent(GetOwner()->GetRootComponent(),
FAttachmentTransformRules::SnapToTargetNotIncludingScale); FAttachmentTransformRules::SnapToTargetNotIncludingScale);
ScoringBehaviours.Add(InitScoringBehaviour);
} }
// Selecting // Selecting
...@@ -93,24 +134,3 @@ void UIntenSelectable::ShowErrorAndQuit(const FString& Message) const ...@@ -93,24 +134,3 @@ void UIntenSelectable::ShowErrorAndQuit(const FString& Message) const
#endif #endif
UKismetSystemLibrary::QuitGame(this, nullptr, EQuitPreference::Quit, false); UKismetSystemLibrary::QuitGame(this, nullptr, EQuitPreference::Quit, false);
} }
void UIntenSelectable::BeginPlay()
{
Super::BeginPlay();
TInlineComponentArray<UIntenSelectable*> AttachedIntenSelectables;
GetOwner()->GetComponents(AttachedIntenSelectables, false);
if (AttachedIntenSelectables.Num() > 1)
{
if (!ScoringBehaviour)
{
ShowErrorAndQuit(
"Please assign the Scoring Behaviour manually when using more than one IntenSelectable Component!");
}
}
else
{
InitDefaultBehaviourReferences();
}
}
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "InputActionValue.h" #include "InputActionValue.h"
#include "Components/ActorComponent.h" #include "Components/ActorComponent.h"
#include "Interaction/Interactables/ActionBehaviour.h"
#include "Interaction/Interactables/HoverBehaviour.h"
#include "IntenSelectable.generated.h" #include "IntenSelectable.generated.h"
...@@ -23,7 +25,7 @@ public: ...@@ -23,7 +25,7 @@ public:
bool IsSelectable = true; bool IsSelectable = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite) UPROPERTY(EditAnywhere, BlueprintReadWrite)
UIntenSelectableScoring* ScoringBehaviour; TArray<UIntenSelectableScoring*> ScoringBehaviours;
UPROPERTY(EditAnywhere, BlueprintReadWrite) UPROPERTY(EditAnywhere, BlueprintReadWrite)
TArray<UHoverBehaviour*> OnSelectBehaviours; TArray<UHoverBehaviour*> OnSelectBehaviours;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment