RealtimeStyleTransferRuntime/Source/LyraGame/GameFeatures/GameFeatureAction_AddInputC...

70 lines
2.3 KiB
C
Raw Normal View History

2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "GameFeatureAction_WorldActionBase.h"
#include "GameFeatureAction_AddInputContextMapping.generated.h"
class AActor;
class UInputMappingContext;
class UPlayer;
class APlayerController;
struct FComponentRequestHandle;
USTRUCT()
struct FInputMappingContextAndPriority
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, Category="Input", meta=(AssetBundles="Client,Server"))
TSoftObjectPtr<UInputMappingContext> InputMapping;
// Higher priority input mappings will be prioritized over mappings with a lower priority.
UPROPERTY(EditAnywhere, Category="Input")
int32 Priority = 0;
};
/**
* Adds InputMappingContext to local players' EnhancedInput system.
* Expects that local players are set up to use the EnhancedInput system.
*/
UCLASS(MinimalAPI, meta = (DisplayName = "Add Input Mapping"))
class UGameFeatureAction_AddInputContextMapping final : public UGameFeatureAction_WorldActionBase
{
GENERATED_BODY()
public:
//~UGameFeatureAction interface
virtual void OnGameFeatureActivating(FGameFeatureActivatingContext& Context) override;
virtual void OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context) override;
//~End of UGameFeatureAction interface
//~UObject interface
#if WITH_EDITOR
virtual EDataValidationResult IsDataValid(TArray<FText>& ValidationErrors) override;
#endif
//~End of UObject interface
UPROPERTY(EditAnywhere, Category="Input")
TArray<FInputMappingContextAndPriority> InputMappings;
private:
struct FPerContextData
{
TArray<TSharedPtr<FComponentRequestHandle>> ExtensionRequestHandles;
TArray<TWeakObjectPtr<APlayerController>> ControllersAddedTo;
};
TMap<FGameFeatureStateChangeContext, FPerContextData> ContextData;
//~UGameFeatureAction_WorldActionBase interface
virtual void AddToWorld(const FWorldContext& WorldContext, const FGameFeatureStateChangeContext& ChangeContext) override;
//~End of UGameFeatureAction_WorldActionBase interface
void Reset(FPerContextData& ActiveData);
void HandleControllerExtension(AActor* Actor, FName EventName, FGameFeatureStateChangeContext ChangeContext);
void AddInputMappingForPlayer(UPlayer* Player, FPerContextData& ActiveData);
void RemoveInputMapping(APlayerController* PlayerController, FPerContextData& ActiveData);
};