Interface for modifying raw inputs

This commit is contained in:
Kevin Poretti 2023-06-30 14:13:26 -04:00
parent eb735db17a
commit a85a9a7005
4 changed files with 38 additions and 9 deletions

View File

@ -12,7 +12,7 @@ void UFFInputBufferComponent::AddInput(const FFFInputState& InputState)
InputBuffer.ForcePush(InputState); InputBuffer.ForcePush(InputState);
} }
bool UFFInputBufferComponent::CheckInputSequence(const FFFInputSequence& InputSequence) bool UFFInputBufferComponent::CheckInputSequence(const FFFInputCondition& InputCondition)
{ {
for(int InpIdx = 0; InpIdx < InputBuffer.Num(); InpIdx++) for(int InpIdx = 0; InpIdx < InputBuffer.Num(); InpIdx++)
{ {

View File

@ -21,14 +21,21 @@ struct FFFInputState
FVector2D MoveAxes; FVector2D MoveAxes;
FVector2D LookAxes; FVector2D LookAxes;
UPROPERTY(EditAnywhere, Meta = (Bitmask))
int32 Buttons; int32 Buttons;
}; };
USTRUCT() USTRUCT(BlueprintType)
struct FFFInputSequence struct FFFInputCondition
{ {
GENERATED_BODY() GENERATED_BODY()
UPROPERTY(EditAnywhere)
TArray<FFFInputState> Sequence;
UPROPERTY(EditAnywhere)
int32 Lenience;
}; };
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
@ -41,7 +48,7 @@ public:
void AddInput(const FFFInputState& InputState); void AddInput(const FFFInputState& InputState);
bool CheckInputSequence(const FFFInputSequence& InputSequence); bool CheckInputSequence(const FFFInputCondition& InputCondition);
protected: protected:
/** The underlying buffer data structure for holding past input states */ /** The underlying buffer data structure for holding past input states */

View File

@ -19,10 +19,16 @@ void AFFPlayerController::SendInputsToRemote() const
} }
void AFFPlayerController::ModifyRawInput()
{
ModifiedInput = RawInput;
}
void AFFPlayerController::FixedTick(float OneFrame) void AFFPlayerController::FixedTick(float OneFrame)
{ {
//UnacknowledgedInputs.Push(CurrInput); //UnacknowledgedInputs.Push(RawInput);
InputBuffer->AddInput(CurrInput); InputBuffer->AddInput(ModifiedInput);
//SendInputsToRemote(); //SendInputsToRemote();
} }

View File

@ -31,7 +31,20 @@ public:
*/ */
virtual void SendInputsToRemote() const; virtual void SendInputsToRemote() const;
virtual FFFInputState GetCurrInput() { return CurrInput; }; /**
* @brief Gets the current input after cleaning/modifying the raw input state
* @return the current input
*/
virtual FFFInputState GetModifiedInput() const { return ModifiedInput; };
/**
* @brief Function called before inputs are passed to the game logic to update the game state.
* This is a chance for the application to mutate inputs before the game uses them to update game state.
* Examples would include treating opposite directional inputs being held cancelling each other out or setting
* a "neutral input" flag when no directional inputs are being held.
* For stick/axis values this can be clamping those values or normalizing the Move and Look direction vectors.
*/
virtual void ModifyRawInput();
// IFFSystemInterface interface // IFFSystemInterface interface
virtual void FixedTick(float OneFrame) override; virtual void FixedTick(float OneFrame) override;
@ -51,7 +64,10 @@ protected:
UFFInputBufferComponent* InputBuffer; UFFInputBufferComponent* InputBuffer;
/** Current state of the player's inputs */ /** Current state of the player's inputs */
FFFInputState CurrInput; FFFInputState RawInput;
/** Current state of the player's inputs after performing cleaning and modifications */
FFFInputState ModifiedInput;
/** /**
* Rolling window of the player's past inputs that have yet to be * Rolling window of the player's past inputs that have yet to be