Special Condition Validation
Type: Plugin/Engine only for the validation API itself. External systems may be required depending on your gameplay rule.
This example shows how to use the new validation API with:
- a reusable validator object
- an actor interactable
- a foliage-compatible validation path
Goal
Imagine you want:
- doors to require a key state
- ore nodes to require a pickaxe state
Instead of hardcoding that in the plugin, you create validators.
Example validator
#pragma once
#include "CoreMinimal.h"
#include "Validation/EDInteractionConditionValidator.h"
#include "MyRequireInteractionTagValidator.generated.h"
UCLASS(BlueprintType, EditInlineNew, DefaultToInstanced)
class UMyRequireInteractionTagValidator : public UEDInteractionConditionValidator
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Validation")
FName RequiredPawnTag = TEXT("CanUseSpecialInteractables");
virtual void ValidateInteraction_Implementation(const FEDInteractionValidationContext& Context, FEDInteractionValidationResult& InOutResult) override;
};
#include "MyRequireInteractionTagValidator.h"
#include "GameFramework/Pawn.h"
void UMyRequireInteractionTagValidator::ValidateInteraction_Implementation(
const FEDInteractionValidationContext& Context,
FEDInteractionValidationResult& InOutResult)
{
Super::ValidateInteraction_Implementation(Context, InOutResult);
if (!InOutResult.bAllowInteraction)
{
return;
}
if (!IsValid(Context.InstigatorPawn) || !Context.InstigatorPawn->ActorHasTag(RequiredPawnTag))
{
InOutResult.bAllowInteraction = false;
InOutResult.DenyReason = EEDInteractionDenyReason::SpecialCondition;
InOutResult.FailureMessage = FText::FromString(TEXT("Missing required interaction tag."));
}
}
Actor usage
Assign the validator inline on:
UEDInteractableComponent -> ValidationRules
That lets each actor Blueprint choose its own rule set.
Foliage usage
Assign the validator class on:
Project Settings -> ED Interaction System -> InteractableFoliage -> ValidationRuleClasses
That lets each foliage mesh config use a dedicated validation rule.
Why this is better than hardcoding
- works in C++
- works in Blueprint
- works for actors
- works for foliage
- keeps project gameplay rules outside plugin internals