Skip to content

Added calls to IsDataValid to various interactable objects #355

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Feb 27, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ UGBFInteractableComponent::UGBFInteractableComponent()
bIsEnabled = true;
}

#if WITH_EDITOR
EDataValidationResult UGBFInteractableComponent::IsDataValid( FDataValidationContext & context ) const
{
return InteractionOptionContainer.IsDataValid( context );
}
#endif

void UGBFInteractableComponent::UpdateInteractions( UGBFInteractionOptionsData * options_data )
{
if ( options_data == nullptr )
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
#include "Interaction/GBFInteractionOption.h"

#include "DVEDataValidator.h"

#if WITH_EDITOR
EDataValidationResult FGBFInteractionWidgetInfos::IsDataValid( FDataValidationContext & context ) const
{
return FDVEDataValidator( context )
.NotNull( VALIDATOR_GET_PROPERTY( InteractionWidgetClass ) )
.Result();
}
#endif

#if WITH_EDITOR
EDataValidationResult FGBFInteractionOption::IsDataValid( FDataValidationContext & context ) const
{
return FDVEDataValidator( context )
.NotEmpty( VALIDATOR_GET_PROPERTY( Text ) )
.NotNull( VALIDATOR_GET_PROPERTY( InteractionAbility ) )
.Result();
}
#endif

FGBFInteractionOptionContainer::FGBFInteractionOptionContainer() :
InteractionsId( INDEX_NONE )
{
Expand All @@ -26,4 +47,28 @@ void FGBFInteractionOptionContainer::ResetOptions()
{
Options.Reset();
IncrementId();
}
}

#if WITH_EDITOR
EDataValidationResult FGBFInteractionOptionContainer::IsDataValid( FDataValidationContext & context ) const
{
CommonWidgetInfos.IsDataValid( context );

for ( const auto & option : Options )
{
option.IsDataValid( context );

if ( DefaultInputAction == nullptr && option.InputAction == nullptr )
{
context.AddError( FText::FromString( TEXT( "No default input action is defined, and the option does not have any InputAction either" ) ) );
}
else if ( DefaultInputAction == option.InputAction )
{
context.AddWarning( FText::FromString( TEXT( "The same input action is defined for the default and for the option" ) ) );
}
}

return FDVEDataValidator( context )
.Result();
}
#endif
Original file line number Diff line number Diff line change
@@ -1,7 +1,24 @@
#include "Interaction/GBFInteractionOptionsData.h"

#include "DVEDataValidator.h"

UGBFInteractionOptionsData::UGBFInteractionOptionsData() :
bOverrideContainer( false ),
bRemoveAllOptions( false )
{
}
}

#if WITH_EDITOR
EDataValidationResult UGBFInteractionOptionsData::IsDataValid( FDataValidationContext & context ) const
{
OptionContainer.IsDataValid( context );

for ( const auto & option : Options )
{
option.IsDataValid( context );
}

return FDVEDataValidator( context )
.Result();
}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ EDataValidationResult AGBFPickupable::IsDataValid( FDataValidationContext & cont
{
return FDVEDataValidator( context )
.NotNull( VALIDATOR_GET_PROPERTY( EquipmentDefinition ) )
.CombineWith( InteractableComponent )
.Result();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ class GAMEBASEFRAMEWORK_API UGBFInteractableComponent : public UActorComponent
FGBFOnInteractableInteractionRadiusStateChangedDelegate & OnInteractableLeftRadius();
FGBFOnInteractionsUpdatedDelegate & OnInteractionsUpdated();

#if WITH_EDITOR
EDataValidationResult IsDataValid( FDataValidationContext & context ) const override;
#endif

const FGBFInteractionOptionContainer & GetInteractableOptions() const;
bool IsEnabled() const;
void SetEnabled( bool enabled );
Expand Down
12 changes: 12 additions & 0 deletions Source/GameBaseFramework/Public/Interaction/GBFInteractionOption.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ struct FGBFInteractionWidgetInfos
{
GENERATED_BODY()

#if WITH_EDITOR
EDataValidationResult IsDataValid( FDataValidationContext & context ) const;
#endif

/** The widget to show for this kind of interaction. */
UPROPERTY( EditAnywhere, BlueprintReadWrite )
TSoftClassPtr< UUserWidget > InteractionWidgetClass;
Expand Down Expand Up @@ -76,6 +80,10 @@ struct FGBFInteractionOption

FGBFInteractionOption() = default;

#if WITH_EDITOR
EDataValidationResult IsDataValid( FDataValidationContext & context ) const;
#endif

/** Simple text the interaction might return */
UPROPERTY( EditAnywhere, BlueprintReadOnly )
FText Text = FText::GetEmpty();
Expand Down Expand Up @@ -132,6 +140,10 @@ struct FGBFInteractionOptionContainer
const TArray< FGBFInteractionOption > & GetOptions() const;
int GetInteractionsId() const;

#if WITH_EDITOR
EDataValidationResult IsDataValid( FDataValidationContext & context ) const;
#endif

UPROPERTY( EditAnywhere, BlueprintReadOnly )
TSoftObjectPtr< UInputMappingContext > InputMappingContext;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ class GAMEBASEFRAMEWORK_API UGBFInteractionOptionsData final : public UDataAsset
public:
UGBFInteractionOptionsData();

#if WITH_EDITOR
EDataValidationResult IsDataValid( FDataValidationContext & context ) const override;
#endif

UPROPERTY( EditAnywhere, meta = ( InlineEditConditionToggle ) )
uint8 bOverrideContainer : 1;

Expand Down