Interface for modifying raw inputs
This commit is contained in:
		
							parent
							
								
									eb735db17a
								
							
						
					
					
						commit
						a85a9a7005
					
				| @ -12,7 +12,7 @@ void UFFInputBufferComponent::AddInput(const FFFInputState& InputState) | ||||
| 	InputBuffer.ForcePush(InputState); | ||||
| } | ||||
| 
 | ||||
| bool UFFInputBufferComponent::CheckInputSequence(const FFFInputSequence& InputSequence) | ||||
| bool UFFInputBufferComponent::CheckInputSequence(const FFFInputCondition& InputCondition) | ||||
| { | ||||
|     for(int InpIdx = 0; InpIdx < InputBuffer.Num(); InpIdx++) | ||||
|     { | ||||
|  | ||||
| @ -21,14 +21,21 @@ struct FFFInputState | ||||
| 
 | ||||
| 	FVector2D	MoveAxes; | ||||
| 	FVector2D	LookAxes; | ||||
| 
 | ||||
| 	UPROPERTY(EditAnywhere, Meta = (Bitmask)) | ||||
| 	int32		Buttons; | ||||
| }; | ||||
| 
 | ||||
| USTRUCT() | ||||
| struct FFFInputSequence | ||||
| USTRUCT(BlueprintType) | ||||
| struct FFFInputCondition | ||||
| { | ||||
|     GENERATED_BODY() | ||||
| 
 | ||||
|     UPROPERTY(EditAnywhere) | ||||
| 	TArray<FFFInputState> Sequence; | ||||
| 
 | ||||
| 	UPROPERTY(EditAnywhere) | ||||
| 	int32 Lenience; | ||||
| }; | ||||
| 
 | ||||
| UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) | ||||
| @ -41,7 +48,7 @@ public: | ||||
| 
 | ||||
| 	void AddInput(const FFFInputState& InputState); | ||||
| 
 | ||||
| 	bool CheckInputSequence(const FFFInputSequence& InputSequence); | ||||
| 	bool CheckInputSequence(const FFFInputCondition& InputCondition); | ||||
| 
 | ||||
| protected: | ||||
| 	/** The underlying buffer data structure for holding past input states */ | ||||
|  | ||||
| @ -19,10 +19,16 @@ void AFFPlayerController::SendInputsToRemote() const | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void AFFPlayerController::ModifyRawInput() | ||||
| { | ||||
|     ModifiedInput = RawInput; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void AFFPlayerController::FixedTick(float OneFrame) | ||||
| { | ||||
|     //UnacknowledgedInputs.Push(CurrInput);
 | ||||
|     InputBuffer->AddInput(CurrInput); | ||||
|     //UnacknowledgedInputs.Push(RawInput);
 | ||||
|     InputBuffer->AddInput(ModifiedInput); | ||||
| 
 | ||||
|     //SendInputsToRemote();
 | ||||
| } | ||||
|  | ||||
| @ -31,7 +31,20 @@ public: | ||||
| 	 */ | ||||
| 	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
 | ||||
| 	virtual void FixedTick(float OneFrame) override; | ||||
| @ -51,7 +64,10 @@ protected: | ||||
| 	UFFInputBufferComponent* InputBuffer; | ||||
| 
 | ||||
| 	/** 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 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user