Compare commits

..

No commits in common. "ec6daa06fb67fdbad2eb2d62de1908216a96156e" and "e38379586c13a5689b421c222f219d25c08c8203" have entirely different histories.

7 changed files with 7 additions and 124 deletions

View File

@ -6,17 +6,3 @@ UFFInputBufferComponent::UFFInputBufferComponent()
{ {
PrimaryComponentTick.bCanEverTick = false; PrimaryComponentTick.bCanEverTick = false;
} }
void UFFInputBufferComponent::Initialize(int32 BufferSize)
{
Buffer.Reserve(BufferSize);
}
void UFFInputBufferComponent::AddInput(const FFFInputState& InputState)
{
}
bool UFFInputBufferComponent::CheckInputSequence(const FFFInputSequence& InputSequence)
{
return true;
}

View File

@ -5,19 +5,9 @@
// UE includes // UE includes
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "Components/ActorComponent.h" #include "Components/ActorComponent.h"
#include "Containers/RingBuffer.h"
#include "FFInputBufferComponent.generated.h" #include "FFInputBufferComponent.generated.h"
struct FFFInputState;
USTRUCT()
struct FFFInputSequence
{
GENERATED_BODY()
};
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class UNREALFIGHTINGFRAMEWORK_API UFFInputBufferComponent : public UActorComponent class UNREALFIGHTINGFRAMEWORK_API UFFInputBufferComponent : public UActorComponent
{ {
@ -25,14 +15,4 @@ class UNREALFIGHTINGFRAMEWORK_API UFFInputBufferComponent : public UActorCompone
public: public:
UFFInputBufferComponent(); UFFInputBufferComponent();
void Initialize(int32 BufferSize = 120);
void AddInput(const FFFInputState& InputState);
bool CheckInputSequence(const FFFInputSequence& InputSequence);
protected:
/** The underlying buffer data structure for holding past input states */
TRingBuffer<FFFInputState> Buffer;
}; };

View File

@ -5,41 +5,16 @@
// FF includes // FF includes
#include "FFInputBufferComponent.h" #include "FFInputBufferComponent.h"
// UE includes
#include "EnhancedInputSubsystems.h"
AFFPlayerController::AFFPlayerController() AFFPlayerController::AFFPlayerController()
{ {
InputBuffer = CreateDefaultSubobject<UFFInputBufferComponent>(TEXT("InputBuffer")); InputBuffer = CreateDefaultSubobject<UFFInputBufferComponent>(TEXT("InputBuffer"));
} }
void AFFPlayerController::SendInputsToRemote() const void AFFPlayerController::SendInputsToRemote() const
{ {
} }
void AFFPlayerController::FixedTick(float OneFrame)
{
UnacknowledgedInputs.Add(CurrInput);
InputBuffer->AddInput(CurrInput);
SendInputsToRemote();
}
void AFFPlayerController::SetupInputComponent() void AFFPlayerController::SetupInputComponent()
{ {
Super::SetupInputComponent(); Super::SetupInputComponent();
if (ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(Player))
{
if (UEnhancedInputLocalPlayerSubsystem* InputSystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
{
if (!DefaultInputMapping.IsNull())
{
InputSystem->AddMappingContext(DefaultInputMapping.LoadSynchronous(), 0);
}
}
}
} }

View File

@ -2,37 +2,18 @@
#pragma once #pragma once
// FF includes
#include "FFInputBufferComponent.h"
#include "UnrealFightingFramework/IFFSystemInterface.h"
// UE includes // UE includes
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "GameFramework/PlayerController.h" #include "GameFramework/PlayerController.h"
#include "InputMappingContext.h"
#include "Containers/RingBuffer.h"
#include "FFPlayerController.generated.h" #include "FFPlayerController.generated.h"
/**
* Struct representing the state of a player's inputs for one frame
*/
USTRUCT()
struct FFFInputState
{
GENERATED_BODY()
FVector2D MoveAxes;
FVector2D LookAxes;
int32 Buttons;
};
/** /**
* A class that collects player inputs, stores them in an input buffer, and sends a rolling window of * 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. * unacknowledged inputs to a remote client or server for processing.
*/ */
UCLASS() UCLASS()
class UNREALFIGHTINGFRAMEWORK_API AFFPlayerController : public APlayerController, public IFFSystemInterface class UNREALFIGHTINGFRAMEWORK_API AFFPlayerController : public APlayerController
{ {
GENERATED_BODY() GENERATED_BODY()
@ -42,11 +23,7 @@ public:
/** /**
* Sends all unacknowledged inputs to the remote * Sends all unacknowledged inputs to the remote
*/ */
virtual void SendInputsToRemote() const; void SendInputsToRemote() const;
// IFFSystemInterface interface
virtual void FixedTick(float OneFrame) override;
// End of IFFSystemInterface
// APlayerController interface // APlayerController interface
virtual void SetupInputComponent() override; virtual void SetupInputComponent() override;
@ -55,22 +32,13 @@ public:
protected: protected:
/** MappingContext */ /** MappingContext */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UFF|Input", meta = (AllowPrivateAccess = "true")) UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UFF|Input", meta = (AllowPrivateAccess = "true"))
TSoftObjectPtr<UInputMappingContext> DefaultInputMapping; class UInputMappingContext* DefaultMappingContext;
/** Input Buffer component */ /** Input Buffer component */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "UFF|Input", meta = (AllowPrivateAccess = "true")) UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "UFF|Input", meta = (AllowPrivateAccess = "true"))
UFFInputBufferComponent* InputBuffer; UFFInputBufferComponent* InputBuffer;
/** Current state of the player's inputs */ int32 Inputs;
FFFInputState CurrInput;
/** TArray<int32> UnacknowledgedInputs;
* Rolling window of the player's past inputs that have yet to be
* acknowledged and simulated by the remote machine
*
* This ring buffer should be initialized to be the size of the past X frames
* you want the remote machine to re-simulate, where X is the oldest input you want to
* allow to be re-simulated.
*/
TRingBuffer<FFFInputState> UnacknowledgedInputs;
}; };

View File

@ -10,14 +10,14 @@ public class UnrealFightingFramework : ModuleRules
PublicIncludePaths.AddRange( PublicIncludePaths.AddRange(
new string[] { new string[] {
"UnrealFightingFramework" // ... add public include paths required here ...
} }
); );
PrivateIncludePaths.AddRange( PrivateIncludePaths.AddRange(
new string[] { new string[] {
"UnrealFightingFramework" // ... add other private include paths required here ...
} }
); );

View File

@ -1,11 +0,0 @@
// Unreal Fighting Framework by Kevin Poretti
#include "Utils/TCircleBuffer.h"
TCircleBuffer::TCircleBuffer()
{
}
TCircleBuffer::~TCircleBuffer()
{
}

View File

@ -1,15 +0,0 @@
// Unreal Fighting Framework by Kevin Poretti
#pragma once
#include "CoreMinimal.h"
/**
*
*/
class UNREALFIGHTINGFRAMEWORK_API TCircleBuffer
{
public:
TCircleBuffer();
~TCircleBuffer();
};