wireup inputs and add jumping

This commit is contained in:
Dexter Haslem 2017-03-28 22:41:33 -06:00
parent cc2f669b3a
commit 2a4092c97a
6 changed files with 87 additions and 19 deletions

View file

@ -31,5 +31,21 @@ void AFFCharacter::BeginPlay()
void AFFCharacter::Tick(float DeltaTime) void AFFCharacter::Tick(float DeltaTime)
{ {
Super::Tick(DeltaTime); Super::Tick(DeltaTime);
}
// movement section
// NOTE: non-axis movement is triggered from controller which checks 0 value locks
// its kind of a round-about way to handle input:
// 1 - controller bindings
// 2 - character adds movement input value
// 3 - character movement triggered
// mouse skips right to adding input value
void AFFCharacter::MovementForwardBack(float Value)
{
AddMovementInput(GetActorForwardVector(), Value);
}
void AFFCharacter::MovementStrafe(float Value)
{
AddMovementInput(GetActorRightVector(), Value);
} }

View file

@ -33,4 +33,8 @@ public:
virtual void Tick(float DeltaTime) override; virtual void Tick(float DeltaTime) override;
FORCEINLINE class UCameraComponent* GetFirstPersonCameraComponent() const { return CameraComponent; } FORCEINLINE class UCameraComponent* GetFirstPersonCameraComponent() const { return CameraComponent; }
// Movement commands from input
void MovementStrafe(float Value);
void MovementForwardBack(float Value);
}; };

View file

@ -13,17 +13,39 @@ UFFCharacterMovement::UFFCharacterMovement(const class FObjectInitializer& Objec
// q2 style double jumps // q2 style double jumps
// rampslides and sharks // rampslides and sharks
// would rather simplify and just make the movement fast and crisp to start with, // would rather simplify and just make the movement fast and crisp to start with,
// which surprisingly the default networked movement can do OK at // which surprisingly the default networked movement can do OK at .
// if someone was so inclined to do so, this class would be the place to do it as it can handle
// the frame by frame movement calculations and pmove
MaxWalkSpeed = 1105.0f; MaxWalkSpeed = 1000.0f;
AirControl = 0.65f; AirControl = 0.75f;
GroundFriction = 11.0f; GroundFriction = 4.0f;
BrakingFriction = 12.0f; BrakingFriction = 10.0f;
BrakingFrictionFactor = 3;
GravityScale = 1.0f;
JumpZVelocity = 350.0f;
BrakingDecelerationFalling = 1.0f;
JumpZVelocity = 800.0f; Mass = 110.0f;
// todo: non-accel based strafe movement etc
MaxAcceleration = 3500.0f; MaxAcceleration = 6500.0f;
// verdict is out on this one // verdict is out on this one
NetworkSmoothingMode = ENetworkSmoothingMode::Exponential; NetworkSmoothingMode = ENetworkSmoothingMode::Exponential;
} }
bool UFFCharacterMovement::DoJump(bool bReplayingMoves)
{
if (CharacterOwner && CharacterOwner->CanJump())
{
// Don't jump if we can't move up/down.
if (!bConstrainToPlane || FMath::Abs(PlaneConstraintNormal.Z) != 1.f)
{
Velocity.Z = JumpZVelocity;
SetMovementMode(MOVE_Falling);
return true;
}
}
return false;
}

View file

@ -12,4 +12,7 @@ UCLASS()
class FF_API UFFCharacterMovement : public UCharacterMovementComponent class FF_API UFFCharacterMovement : public UCharacterMovementComponent
{ {
GENERATED_UCLASS_BODY() GENERATED_UCLASS_BODY()
public:
bool DoJump(bool bReplayingMoves);
}; };

View file

@ -11,8 +11,8 @@ void AFFPlayerController::SetupInputComponent()
Super::SetupInputComponent(); Super::SetupInputComponent();
// TODO: the base ACharacter jump handling kinda stinks // TODO: the base ACharacter jump handling kinda stinks
//InputComponent->BindAction("Jump", IE_Pressed, this, &AFFPlayerController::InputJump); InputComponent->BindAction("Jump", IE_Pressed, this, &AFFPlayerController::JumpPressed);
//InputComponent->BindAction("Jump", IE_Released, this, &AFFPlayerController::InputStopJumping); InputComponent->BindAction("Jump", IE_Released, this, &AFFPlayerController::JumpReleased);
InputComponent->BindAxis("Forward", this, &AFFPlayerController::Forward); InputComponent->BindAxis("Forward", this, &AFFPlayerController::Forward);
InputComponent->BindAxis("Strafe", this, &AFFPlayerController::Strafe); InputComponent->BindAxis("Strafe", this, &AFFPlayerController::Strafe);
InputComponent->BindAxis("LookX", this, &AFFPlayerController::LookX); InputComponent->BindAxis("LookX", this, &AFFPlayerController::LookX);
@ -21,34 +21,54 @@ void AFFPlayerController::SetupInputComponent()
MouseSensitivityRate = 150.0f; MouseSensitivityRate = 150.0f;
} }
// bind axis has nonconst :-(
// ReSharper disable once CppMemberFunctionMayBeConst
void AFFPlayerController::Forward(float Value) void AFFPlayerController::Forward(float Value)
{ {
if (Value != 0.0f) if (Value != 0.0f)
{ {
// add movement in that direction FFCharacter->MovementForwardBack(Value);
//AddMovementInput(GetActorForwardVector(), Value);
} }
} }
// ReSharper disable once CppMemberFunctionMayBeConst
void AFFPlayerController::Strafe(float Value) void AFFPlayerController::Strafe(float Value)
{ {
if (Value != 0.0f) if (Value != 0.0f)
{ {
// add movement in that direction FFCharacter->MovementStrafe(Value);
//AddMovementInput(GetActorRightVector(), Value);
} }
} }
void AFFPlayerController::LookX(float Rate) void AFFPlayerController::LookX(float Rate)
{ {
// calculate delta for this frame from the rate information // calculate delta for this frame from the rate information
//AddControllerYawInput(Rate * MouseSensitivityRate * GetWorld()->GetDeltaSeconds()); AddYawInput(Rate * MouseSensitivityRate * GetWorld()->GetDeltaSeconds());
} }
void AFFPlayerController::LookY(float Rate) void AFFPlayerController::LookY(float Rate)
{ {
// calculate delta for this frame from the rate information // calculate delta for this frame from the rate information
//AddControllerPitchInput(Rate * MouseSensitivityRate * GetWorld()->GetDeltaSeconds()); AddPitchInput(Rate * MouseSensitivityRate * GetWorld()->GetDeltaSeconds());
}
void AFFPlayerController::JumpPressed()
{
if (FFCharacter != NULL && !IsMoveInputIgnored())
{
//FFCharacter->bPressedJump = true;
FFCharacter->Jump();
}
}
void AFFPlayerController::JumpReleased()
{
if (FFCharacter)
{
//FFCharacter->bPressedJump = false;
FFCharacter->StopJumping();
}
} }
void AFFPlayerController::SetPawn(APawn* NewPawn) void AFFPlayerController::SetPawn(APawn* NewPawn)
@ -75,6 +95,7 @@ void AFFPlayerController::SetPawn(APawn* NewPawn)
AFFCharacter* AFFPlayerController::GetFFCharacter() AFFCharacter* AFFPlayerController::GetFFCharacter()
{ {
// TODO: // for BPs
return nullptr; return FFCharacter;
} }

View file

@ -23,6 +23,8 @@ private:
void Strafe(float Val); void Strafe(float Val);
void LookX(float Rate); void LookX(float Rate);
void LookY(float Rate); void LookY(float Rate);
void JumpPressed();
void JumpReleased();
public: public:
UPROPERTY(BlueprintReadOnly, GlobalConfig, Category = Camera) UPROPERTY(BlueprintReadOnly, GlobalConfig, Category = Camera)