Start of input buffer and player controller
This commit is contained in:
		
							parent
							
								
									3090798d20
								
							
						
					
					
						commit
						ecd8b1ca3c
					
				@ -9,7 +9,7 @@
 | 
			
		||||
 | 
			
		||||
// This class does not need to be modified.
 | 
			
		||||
UINTERFACE(MinimalAPI)
 | 
			
		||||
class UIFESystemInterface : public UInterface
 | 
			
		||||
class UFESystemInterface : public UInterface
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
};
 | 
			
		||||
@ -20,7 +20,7 @@ class UIFESystemInterface : public UInterface
 | 
			
		||||
 *	This ensures all gameplay effecting objects can be assumed to have certain properties that enable serialization, networking and
 | 
			
		||||
 *	some form of determinism.
 | 
			
		||||
 */
 | 
			
		||||
class UNREALFIGHTINGENGINE_API IIFESystemInterface
 | 
			
		||||
class UNREALFIGHTINGENGINE_API IFESystemInterface
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,8 @@
 | 
			
		||||
// Unreal Fighting Engine by Kevin Poretti
 | 
			
		||||
 | 
			
		||||
#include "FEInputBufferComponent.h"
 | 
			
		||||
 | 
			
		||||
UFEInputBufferComponent::UFEInputBufferComponent()
 | 
			
		||||
{
 | 
			
		||||
	PrimaryComponentTick.bCanEverTick = false;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								Source/UnrealFightingEngine/Input/FEInputBufferComponent.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Source/UnrealFightingEngine/Input/FEInputBufferComponent.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
// Unreal Fighting Engine by Kevin Poretti
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
// UE includes
 | 
			
		||||
#include "CoreMinimal.h"
 | 
			
		||||
#include "Components/ActorComponent.h"
 | 
			
		||||
 | 
			
		||||
#include "FEInputBufferComponent.generated.h"
 | 
			
		||||
 | 
			
		||||
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
 | 
			
		||||
class UNREALFIGHTINGENGINE_API UFEInputBufferComponent : public UActorComponent
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
 | 
			
		||||
public:	
 | 
			
		||||
	UFEInputBufferComponent();
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										20
									
								
								Source/UnrealFightingEngine/Input/FEPlayerController.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Source/UnrealFightingEngine/Input/FEPlayerController.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
// Unreal Fighting Engine by Kevin Poretti
 | 
			
		||||
 | 
			
		||||
#include "FEPlayerController.h"
 | 
			
		||||
 | 
			
		||||
// FE includes
 | 
			
		||||
#include "FEInputBufferComponent.h"
 | 
			
		||||
 | 
			
		||||
AFEPlayerController::AFEPlayerController()
 | 
			
		||||
{
 | 
			
		||||
    InputBuffer = CreateDefaultSubobject<UFEInputBufferComponent>(TEXT("InputBuffer"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AFEPlayerController::SendInputsToRemote() const
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AFEPlayerController::SetupInputComponent()
 | 
			
		||||
{
 | 
			
		||||
    Super::SetupInputComponent();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								Source/UnrealFightingEngine/Input/FEPlayerController.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								Source/UnrealFightingEngine/Input/FEPlayerController.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
			
		||||
// Unreal Fighting Engine by Kevin Poretti
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
// UE includes
 | 
			
		||||
#include "CoreMinimal.h"
 | 
			
		||||
#include "GameFramework/PlayerController.h"
 | 
			
		||||
 | 
			
		||||
#include "FEPlayerController.generated.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *	A class that collects player inputs, stores them in an input buffer, and sends a rolling window of
 | 
			
		||||
 *	unacknowledged inputs to a remote client or server for processing.
 | 
			
		||||
 */
 | 
			
		||||
UCLASS()
 | 
			
		||||
class UNREALFIGHTINGENGINE_API AFEPlayerController : public APlayerController
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	AFEPlayerController();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 *	Sends all unacknowledged inputs to the remote
 | 
			
		||||
	 */
 | 
			
		||||
	void SendInputsToRemote() const;
 | 
			
		||||
 | 
			
		||||
	// APlayerController interface
 | 
			
		||||
	virtual void SetupInputComponent() override;
 | 
			
		||||
	// End of APlayerController interface
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	/** Input Buffer component */
 | 
			
		||||
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "UFE|Input", meta = (AllowPrivateAccess = "true"))
 | 
			
		||||
	UFEInputBufferComponent* InputBuffer;
 | 
			
		||||
 | 
			
		||||
	int32 Inputs;
 | 
			
		||||
 | 
			
		||||
	TArray<int32> UnacknowledgedInputs;
 | 
			
		||||
};
 | 
			
		||||
@ -5,13 +5,13 @@
 | 
			
		||||
// FE includes
 | 
			
		||||
#include "FEStateMachineComponent.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UFEState::InitActorInfo(AActor* InOwner, AActor* InAvatar)
 | 
			
		||||
{
 | 
			
		||||
    Owner = InOwner;
 | 
			
		||||
	Avatar = InAvatar;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UFEState::Enter()
 | 
			
		||||
{
 | 
			
		||||
    TicksInState = 0;
 | 
			
		||||
@ -19,16 +19,18 @@ void UFEState::Enter()
 | 
			
		||||
    OnEnter();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UFEState::Exit()
 | 
			
		||||
{
 | 
			
		||||
    OnExit();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UFEState::FixedTick(float OneFrame)
 | 
			
		||||
 | 
			
		||||
void UFEState::Update(float OneFrame)
 | 
			
		||||
{
 | 
			
		||||
    TicksInState++;
 | 
			
		||||
 | 
			
		||||
    OnFixedTick(OneFrame);
 | 
			
		||||
    OnUpdate(OneFrame);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -42,10 +44,11 @@ void UFEState::OnExit_Implementation()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UFEState::OnFixedTick_Implementation(float OneFrame)
 | 
			
		||||
void UFEState::OnUpdate_Implementation(float OneFrame)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
UWorld* UFEState::GetWorld() const
 | 
			
		||||
{
 | 
			
		||||
	UFEStateMachineComponent* SMC = Cast<UFEStateMachineComponent>(GetOuter());
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ public:
 | 
			
		||||
	 *
 | 
			
		||||
	 *	@param OneFrame the time that elapses during one fixed tick
 | 
			
		||||
	 */
 | 
			
		||||
	void FixedTick(float OneFrame);
 | 
			
		||||
	void Update(float OneFrame);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *	Blueprint hook that is called whenever this state is transitioned into
 | 
			
		||||
@ -81,7 +81,7 @@ public:
 | 
			
		||||
	 *	@param OneFrame the time that elapses during one fixed tick
 | 
			
		||||
	 */
 | 
			
		||||
	UFUNCTION(BlueprintNativeEvent, Category="UFE|State|Events")
 | 
			
		||||
	void OnFixedTick(float OneFrame);
 | 
			
		||||
	void OnUpdate(float OneFrame);
 | 
			
		||||
 | 
			
		||||
	// UObject interface
 | 
			
		||||
	virtual UWorld* GetWorld() const override;
 | 
			
		||||
 | 
			
		||||
@ -128,7 +128,7 @@ void UFEStateMachineComponent::FixedTick(float OneFrame)
 | 
			
		||||
    check(CurrentState);
 | 
			
		||||
 | 
			
		||||
    // Tick current state
 | 
			
		||||
    CurrentState->FixedTick(OneFrame);
 | 
			
		||||
    CurrentState->Update(OneFrame);
 | 
			
		||||
 | 
			
		||||
    // Debug
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,7 @@
 | 
			
		||||
 *	This component also calls the appropriate state logic when a state is changed or the component ticks.
 | 
			
		||||
 */
 | 
			
		||||
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
 | 
			
		||||
class UNREALFIGHTINGENGINE_API UFEStateMachineComponent : public UActorComponent, public IIFESystemInterface
 | 
			
		||||
class UNREALFIGHTINGENGINE_API UFEStateMachineComponent : public UActorComponent, public IFESystemInterface
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
 | 
			
		||||
@ -74,9 +74,9 @@ public:
 | 
			
		||||
	UFUNCTION(BlueprintPure)
 | 
			
		||||
	FName GetCurrentStateName() const;
 | 
			
		||||
 | 
			
		||||
	// IIFESystemInterface interface
 | 
			
		||||
	// IFESystemInterface interface
 | 
			
		||||
    virtual void FixedTick(float OneFrame) override;
 | 
			
		||||
	// End of IIFESystemInterface interface
 | 
			
		||||
	// End of IFESystemInterface interface
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	/**
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user