Skip to content
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

Refactor of Input / Interaction System and Major Updates to Maps #81

Merged
merged 15 commits into from
Aug 20, 2023
Merged
Show file tree
Hide file tree
Changes from all 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
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,6 @@
[submodule "unreal/Plugins/BlockoutToolsPlugin"]
path = unreal/Plugins/BlockoutToolsPlugin
url = [email protected]:well-known-game-studio/blockouttoolsplugin
[submodule "unreal/Content/UltraDynamicSky"]
path = unreal/Content/UltraDynamicSky
url = [email protected]:well-known-game-studio/ultra-dynamic-sky
3 changes: 3 additions & 0 deletions unreal/Config/DefaultEditor.ini
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ bBlueprintIsNotBlueprintType= true

[/Script/AdvancedPreviewScene.SharedProfiles]

[/Script/UnrealEd.EditorPerformanceProjectSettings]
NonRealtimeScreenPercentageMode=BasedOnDisplayResolution

4 changes: 4 additions & 0 deletions unreal/Config/DefaultEngine.ini
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,14 @@ r.DynamicGlobalIlluminationMethod=1
r.ReflectionMethod=1
r.Shadow.Virtual.Enable=1
r.CustomDepth=3
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.AutoExposure=True
r.DefaultFeature.AutoExposure.Method=0

[/Script/Engine.Engine]
+ActiveGameNameRedirects=(OldGameName="TP_ThirdPersonBP",NewGameName="/Script/VoxelRPG")
+ActiveGameNameRedirects=(OldGameName="/Script/TP_ThirdPersonBP",NewGameName="/Script/VoxelRPG")
GameViewportClientClassName=/Script/CommonUI.CommonGameViewportClient

[/Script/Engine.CollisionProfile]
-Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision",bCanModify=False)
Expand Down
14 changes: 14 additions & 0 deletions unreal/Config/DefaultGame.ini
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,17 @@ bShouldAcquireMissingChunksOnLoad=False
bShouldWarnAboutInvalidAssets=True
MetaDataTagsForAssetRegistry=()

[/Script/CommonInput.CommonInputSettings]
InputData=/Game/Wot/UI/CommonUI/WotInputData.WotInputData_C

[CommonInputPlatformSettings_Mac CommonInputPlatformSettings]
DefaultInputType=MouseAndKeyboard
bSupportsMouseAndKeyboard=True
bSupportsTouch=False
bSupportsGamepad=True
DefaultGamepadName=Generic
bCanChangeGamepadType=True
+ControllerData=/Game/Wot/UI/CommonUI/Platform/Input/KeyboardMouse/CommonInput_KeyboardMouse.CommonInput_KeyboardMouse_C
+ControllerData=/Game/Wot/UI/CommonUI/Platform/Input/GamepadPS5/CommonInput_Gamepad_Generic.CommonInput_Gamepad_Generic_C
+ControllerData=/Game/Wot/UI/CommonUI/Platform/Input/GamepadPS4/CommonInput_Gamepad_PS4.CommonInput_Gamepad_PS4_C

6 changes: 6 additions & 0 deletions unreal/Config/DefaultInput.ini
Original file line number Diff line number Diff line change
Expand Up @@ -159,3 +159,9 @@ DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.Defaul
-ConsoleKeys=Tilde
+ConsoleKeys=Tilde

[/Script/CommonUI.CommonUIInputSettings]
bLinkCursorToGamepadFocus=True
UIActionProcessingPriority=10000
+InputActions=(ActionTag=None,DefaultDisplayName="",KeyMappings=)
AnalogCursorSettings=(PreprocessorPriority=2,bEnableCursorAcceleration=True,CursorAcceleration=1500.000000,CursorMaxSpeed=2200.000000,CursorDeadZone=0.250000,HoverSlowdownFactor=0.400000,ScrollDeadZone=0.200000,ScrollUpdatePeriod=0.100000,ScrollMultiplier=2.500000)

1 change: 1 addition & 0 deletions unreal/Content/UltraDynamicSky
Submodule UltraDynamicSky added at d17b6b
Binary file modified unreal/Content/Wot/Actions/Action_Jump.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/Actions/Action_Parry.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/Actors/Portal.uasset
Binary file not shown.
Binary file added unreal/Content/Wot/Actors/Props/Campfire.uasset
Binary file not shown.
Binary file not shown.
Binary file added unreal/Content/Wot/Blockout/BP_House_Small.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/Characters/BP_WotCharacter.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/Characters/BP_WotCharacter_Large.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/Characters/BP_WotCharacter_Small.uasset
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified unreal/Content/Wot/LargeGameModeBP.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/Maps/Diorama/Diorama.umap
Binary file not shown.
Binary file modified unreal/Content/Wot/Maps/Diorama/Image_0.uasset
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified unreal/Content/Wot/Maps/GameplayTest/Gameplay_TestMap.umap
Binary file not shown.
Binary file modified unreal/Content/Wot/Maps/HerdingTest/Herding_TestMap.umap
Binary file not shown.
Binary file modified unreal/Content/Wot/Maps/MapNameEnum.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/Maps/Overworld/Overworld.umap
Binary file not shown.
Binary file modified unreal/Content/Wot/MediumFlatGameModeBP.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/NPCs/Lan_NPC.uasset
Binary file not shown.
Binary file modified unreal/Content/Wot/SmallGameModeBP.uasset
Binary file not shown.
Binary file removed unreal/Content/Wot/UI/BP_WotAction_CommonUW.uasset
Binary file not shown.
Binary file added unreal/Content/Wot/UI/BP_WotUWActionWidget.uasset
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified unreal/Content/Wot/WotGameInstanceBP.uasset
Binary file not shown.
9 changes: 1 addition & 8 deletions unreal/Source/VoxelRPG/Private/UI/WotUWHealthBar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,6 @@ void UWotUWHealthBar::UpdateHealth(float Interpolation)

void UWotUWHealthBar::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
{
Super::NativeTick(MyGeometry, InDeltaTime);

if (!AttachTo.IsValid()) {
return;
}
// Use the duration as the interpolation
TimeRemaining = std::max(TimeRemaining - InDeltaTime, 0.0f);
float Interpolation = 0;
Expand All @@ -65,7 +60,5 @@ void UWotUWHealthBar::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
}
// Lerp the Health
UpdateHealth(Interpolation);
// now draw it in the right place (based on location of AttachTo actor)
FVector Location = AttachTo->GetActorLocation() + Offset;
SetPosition(Location);
Super::NativeTick(MyGeometry, InDeltaTime);
}
30 changes: 0 additions & 30 deletions unreal/Source/VoxelRPG/Private/UI/WotUWPopup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,6 @@
#include "Kismet/GameplayStatics.h"
#include "Blueprint/WidgetLayoutLibrary.h"

void UWotUWPopup::NativeConstruct()
{
Super::NativeConstruct();
}

void UWotUWPopup::SetAttachTo(AActor* NewAttachTo)
{
AttachTo = NewAttachTo;
UpdatePosition();
}

void UWotUWPopup::SetText(const FText& NewText)
{
TextWidget->SetText(NewText);
Expand All @@ -34,22 +23,3 @@ void UWotUWPopup::PlayPopupAnimation()
PlayAnimation(PopupAnim, StartAtTime, NumLoops, PlayMode, PlaybackSpeed);
}
}

void UWotUWPopup::UpdatePosition()
{
if (AttachTo.IsValid()) {
// now draw it in the right place (based on location of AttachTo actor)
FVector Location = AttachTo->GetActorLocation();
// apply the offset if it's set
if (Offset != FVector::ZeroVector) {
Location += Offset;
}
UWotUserWidget::SetPosition(Location);
}
}

void UWotUWPopup::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
{
UpdatePosition();
Super::NativeTick(MyGeometry, InDeltaTime);
}
22 changes: 18 additions & 4 deletions unreal/Source/VoxelRPG/Private/UI/WotUserWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@
#include "Kismet/GameplayStatics.h"
#include "Blueprint/WidgetLayoutLibrary.h"

void UWotUserWidget::NativeConstruct()
void UWotUserWidget::SetAttachTo(AActor* NewAttachTo)
{
Super::NativeConstruct();

// bind delegates, and set up default appearance
AttachTo = NewAttachTo;
UpdatePosition();
}

void UWotUserWidget::SetOffset(const FVector& NewOffset)
Expand Down Expand Up @@ -37,3 +36,18 @@ void UWotUserWidget::Remove_TimeElapsed()
{
RemoveFromParent();
}

void UWotUserWidget::UpdatePosition()
{
if (AttachTo.IsValid()) {
// now draw it in the right place (based on location of AttachTo actor)
FVector Location = AttachTo->GetActorLocation() + Offset;
SetPosition(Location);
}
}

void UWotUserWidget::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
{
UpdatePosition();
Super::NativeTick(MyGeometry, InDeltaTime);
}
12 changes: 12 additions & 0 deletions unreal/Source/VoxelRPG/Private/WotAction.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "WotAction.h"
#include "WotActionComponent.h"
#include "GameFramework/Pawn.h"
#include "GameFramework/PawnMovementComponent.h"

UWotAction::UWotAction()
{
Expand All @@ -20,6 +22,16 @@ bool UWotAction::CanStart_Implementation(AActor* Instigator)
if (!Comp->ActiveGameplayTags.HasAll(RequiredTags)) {
return false;
}

// check if the instigator is falling
if (!bAllowedWhileFalling) {
// cast the actor to a pawn
APawn* Pawn = Cast<APawn>(Instigator);
if (Pawn && Pawn->GetMovementComponent()->IsFalling()) {
return false;
}
}

return true;
}

Expand Down
46 changes: 35 additions & 11 deletions unreal/Source/VoxelRPG/Private/WotCharacter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ void AWotCharacter::PrimaryAttack()
EquippedWeapon->PrimaryAttackStart();
} else {
UE_LOG(LogTemp, Log, TEXT("No weapon equipped starting action 'PrimaryAttack'"));
ActionComp->StartActionByName(this, "PrimaryAttack");
ActionStart("PrimaryAttack");
}
}

Expand Down Expand Up @@ -417,11 +417,32 @@ void AWotCharacter::ShowPopupWidgetAttachedTo(const FText& Text, float Duration,
}
}

void AWotCharacter::ShowActionTextWidget(FString Text, float Duration)
void AWotCharacter::ShowInteractionWidget(const FText& Text, float Duration, bool Animated)
{
if (ActionTextWidgetClass) {
UUserWidget* ActionTextWidget = CreateWidget<UUserWidget>(GetWorld(), ActionTextWidgetClass);
ActionTextWidget->AddToViewport();
if (InteractionWidgetClass) {
UWotUWPopup* InteractionWidget = CreateWidget<UWotUWPopup>(GetWorld(), InteractionWidgetClass);
InteractionWidget->SetDuration(Duration);
InteractionWidget->SetText(Text);
InteractionWidget->SetAttachTo(this);
if (Animated) {
InteractionWidget->PlayPopupAnimation();
}
InteractionWidget->AddToViewport();
}
}

void AWotCharacter::ShowInteractionWidgetAttachedTo(const FText& Text, float Duration, AActor* Actor, const FVector& Offset, bool Animated)
{
if (InteractionWidgetClass) {
UWotUWPopup* InteractionWidget = CreateWidget<UWotUWPopup>(GetWorld(), InteractionWidgetClass);
InteractionWidget->SetDuration(Duration);
InteractionWidget->SetText(Text);
InteractionWidget->SetOffset(Offset);
InteractionWidget->SetAttachTo(Actor);
if (Animated) {
InteractionWidget->PlayPopupAnimation();
}
InteractionWidget->AddToViewport();
}
}

Expand Down Expand Up @@ -456,13 +477,16 @@ void AWotCharacter::InteractionCheck_TimeElapsed()
// we only got an actor, so use the actor
IWotInteractableInterface::Execute_GetInteractionText(ClosestInteractable, this, HitResult, InteractionText);
}
// if the text is empty, don't show the widget
if (InteractionText.IsEmpty()) {
return;
}
// show the action text widget
// ShowActionTextWidget(InteractionText.ToString(), InteractionCheckPeriod);
ShowPopupWidgetAttachedTo(FText::FromString(InteractionText.ToString()),
InteractionCheckPeriod*1.1f,
ClosestInteractable,
Offset,
false);
ShowInteractionWidgetAttachedTo(FText::FromString(InteractionText.ToString()),
InteractionCheckPeriod*1.1f,
ClosestInteractable,
Offset,
false);
// Use the highlight interface if it can be used
if (ClosestInteractionComp) {
if (ClosestInteractionComp->Implements<UWotGameplayInterface>()) {
Expand Down
17 changes: 17 additions & 0 deletions unreal/Source/VoxelRPG/Private/WotGameInstance.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include "WotGameInstance.h"

void UWotGameInstance::SaveTimeOfDay_Implementation()
{
// Let the subclasses implement this
}

void UWotGameInstance::LoadTimeOfDay_Implementation()
{
// Let the subclasses implement this
}

bool UWotGameInstance::IsDaytime_Implementation()
{
// Let the subclasses implement this
return false;
}
35 changes: 35 additions & 0 deletions unreal/Source/VoxelRPG/Private/WotGameModeBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,41 @@ void AWotGameModeBase::StartPlay()
// Continuous timer to spawn more bots. Actual amount of bots and whether it
// is allowed to spawn determined by logic later in the chain...
GetWorldTimerManager().SetTimer(TimerHandle_SpawnBots, this, &AWotGameModeBase::SpawnBotTimerElapsed, SpawnTimerInterval, true, SpawnTimerInitialDelay);

LoadTime();
}

void AWotGameModeBase::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
Super::EndPlay(EndPlayReason);

switch (EndPlayReason) {
case EEndPlayReason::LevelTransition:
SaveTime();
break;
case EEndPlayReason::Destroyed:
case EEndPlayReason::EndPlayInEditor:
case EEndPlayReason::RemovedFromWorld:
case EEndPlayReason::Quit:
default:
break;
}
}

void AWotGameModeBase::SaveTime_Implementation()
{
UWotGameInstance* GameInstance = Cast<UWotGameInstance>(GetGameInstance());
if (GameInstance) {
GameInstance->SaveTimeOfDay();
}
}

void AWotGameModeBase::LoadTime_Implementation()
{
UWotGameInstance* GameInstance = Cast<UWotGameInstance>(GetGameInstance());
if (GameInstance) {
GameInstance->LoadTimeOfDay();
}
}

AActor* AWotGameModeBase::FindPlayerStart_Implementation(AController* Player, const FString& IncomingName)
Expand Down
4 changes: 0 additions & 4 deletions unreal/Source/VoxelRPG/Public/UI/WotUWHealthBar.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ class VOXELRPG_API UWotUWHealthBar : public UWotUserWidget
GENERATED_BODY()

public:
void SetAttachTo(AActor* InAttachTo) { AttachTo = InAttachTo; }

UFUNCTION(BlueprintCallable)
void SetHealth(float NewHealthStart, float NewHealthEnd, float HealthMax);

Expand All @@ -33,8 +31,6 @@ class VOXELRPG_API UWotUWHealthBar : public UWotUserWidget

void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;

TWeakObjectPtr<AActor> AttachTo;

UPROPERTY( meta = ( BindWidget ) )
UWotProgressBar* HealthBar;

Expand Down
13 changes: 0 additions & 13 deletions unreal/Source/VoxelRPG/Public/UI/WotUWPopup.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ class VOXELRPG_API UWotUWPopup : public UWotUserWidget
GENERATED_BODY()

public:
UFUNCTION(BlueprintCallable)
void SetAttachTo(AActor* InAttachTo);

UFUNCTION(BlueprintCallable)
void SetText(const FText& NexText);

Expand All @@ -25,16 +22,6 @@ class VOXELRPG_API UWotUWPopup : public UWotUserWidget
void PlayPopupAnimation();

protected:
// Doing setup in the C++ constructor is not as
// useful as using NativeConstruct.
void NativeConstruct() override;

void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;

void UpdatePosition();

TWeakObjectPtr<AActor> AttachTo;

UPROPERTY( Transient, meta = ( BindWidgetAnimOptional ) )
UWidgetAnimation* PopupAnim;

Expand Down
12 changes: 8 additions & 4 deletions unreal/Source/VoxelRPG/Public/UI/WotUserWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class VOXELRPG_API UWotUserWidget : public UUserWidget
GENERATED_BODY()

public:
UFUNCTION(BlueprintCallable)
void SetAttachTo(AActor* InAttachTo);

UFUNCTION(BlueprintCallable)
virtual void SetDuration(float NewDuration);
Expand All @@ -21,19 +23,21 @@ class VOXELRPG_API UWotUserWidget : public UUserWidget
virtual void SetOffset(const FVector& NewOffset);

protected:
// Doing setup in the C++ constructor is not as
// useful as using NativeConstruct.
virtual void NativeConstruct() override;

UFUNCTION(BlueprintCallable)
virtual void SetPosition(const FVector& NewPosition);

virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;

void UpdatePosition();

UPROPERTY( EditAnywhere, BlueprintReadWrite )
float Duration{0.0f};

UPROPERTY( EditAnywhere, BlueprintReadWrite )
FVector Offset = FVector(0, 0, 0.0f);

TWeakObjectPtr<AActor> AttachTo;

UPROPERTY()
FTimerHandle TimerHandle_Remove;
UFUNCTION()
Expand Down
3 changes: 3 additions & 0 deletions unreal/Source/VoxelRPG/Public/WotAction.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ class VOXELRPG_API UWotAction : public UObject
UFUNCTION(BlueprintCallable, Category = "Action")
UWotActionComponent* GetOwningComponent() const;

UPROPERTY(EditDefaultsOnly, Category = "Tags")
bool bAllowedWhileFalling = false;

UPROPERTY(EditDefaultsOnly, Category = "Tags")
FGameplayTagContainer GrantsTags;

Expand Down
Loading