70 lines
2.3 KiB
C
70 lines
2.3 KiB
C
|
// 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);
|
||
|
};
|