127 - Restart Game

This commit is contained in:
Kingsmedia 2022-05-10 16:03:35 +02:00
parent ad556e0523
commit 9d0dc5d0ac
7 changed files with 79 additions and 41 deletions

View File

@ -76,6 +76,6 @@ void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
}
bUseFABRIK = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading;
bUseAimOffsets = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading;
bTransformRightHand = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading;
bUseAimOffsets = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading && !BlasterCharacter->GetDisableGameplay();
bTransformRightHand = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading && !BlasterCharacter->GetDisableGameplay();
}

View File

@ -73,6 +73,7 @@ void ABlasterCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& Ou
DOREPLIFETIME_CONDITION(ABlasterCharacter, OverlappingWeapon, COND_OwnerOnly);
DOREPLIFETIME(ABlasterCharacter, Health);
DOREPLIFETIME(ABlasterCharacter, bDisableGameplay);
}
void ABlasterCharacter::OnRep_ReplicatedMovement()
@ -91,6 +92,10 @@ void ABlasterCharacter::Destroyed()
{
EliminationBotComponent->DestroyComponent();
}
if (Combat && Combat->EquippedWeapon)
{
Combat->EquippedWeapon->Destroy();
}
}
void ABlasterCharacter::PostInitializeComponents()
@ -176,11 +181,8 @@ void ABlasterCharacter::MulticastEliminated_Implementation()
// Disable character movement
GetCharacterMovement()->DisableMovement();
GetCharacterMovement()->StopMovementImmediately();
if (BlasterPlayerController)
{
DisableInput(BlasterPlayerController);
}
bDisableGameplay = true;
// Disable collision
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
GetMesh()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
@ -243,10 +245,14 @@ void ABlasterCharacter::ReceiveDamage(AActor* DamagedActor, float Damage, const
}
}
void ABlasterCharacter::Tick(float DeltaTime)
void ABlasterCharacter::RotateInPlace(float DeltaTime)
{
Super::Tick(DeltaTime);
if (bDisableGameplay)
{
bUseControllerRotationYaw = false;
TurningInPlace = ETurningInPlace::ETIP_NotTurning;
return;
}
if (GetLocalRole() > ROLE_SimulatedProxy && IsLocallyControlled())
{
AimOffset(DeltaTime);
@ -260,7 +266,13 @@ void ABlasterCharacter::Tick(float DeltaTime)
}
CalculateAO_Pitch();
}
}
void ABlasterCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
RotateInPlace(DeltaTime);
HideCameraIfCharacterClose();
PollInit();
}
@ -300,6 +312,7 @@ void ABlasterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputCo
void ABlasterCharacter::MoveForward(float Value)
{
if (bDisableGameplay) return;
if (Controller != nullptr && Value != 0.f)
{
const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 0.f);
@ -311,6 +324,7 @@ void ABlasterCharacter::MoveForward(float Value)
void ABlasterCharacter::MoveRight(float Value)
{
if (bDisableGameplay) return;
if (Controller != nullptr && Value != 0.f)
{
const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 0.f);
@ -332,6 +346,7 @@ void ABlasterCharacter::LookUp(float Value)
void ABlasterCharacter::EquipButtonPressed()
{
if (bDisableGameplay) return;
if (Combat)
{
if (HasAuthority())
@ -347,6 +362,7 @@ void ABlasterCharacter::EquipButtonPressed()
void ABlasterCharacter::ReloadButtonPressed()
{
if (bDisableGameplay) return;
if (Combat)
{
Combat->Reload();
@ -355,6 +371,7 @@ void ABlasterCharacter::ReloadButtonPressed()
void ABlasterCharacter::CrouchButtonPressed()
{
if (bDisableGameplay) return;
if (bIsCrouched)
{
UnCrouch();
@ -367,6 +384,7 @@ void ABlasterCharacter::CrouchButtonPressed()
void ABlasterCharacter::AimButtonPressed()
{
if (bDisableGameplay) return;
if (Combat)
{
Combat->SetAiming(true);
@ -375,12 +393,42 @@ void ABlasterCharacter::AimButtonPressed()
void ABlasterCharacter::AimButtonReleased()
{
if (bDisableGameplay) return;
if (Combat)
{
Combat->SetAiming(false);
}
}
void ABlasterCharacter::Jump()
{
if (bDisableGameplay) return;
if (bIsCrouched)
{
UnCrouch();
}
else
{
Super::Jump();
}
}
void ABlasterCharacter::FireButtonPressed()
{
if (Combat)
{
Combat->FireButtonPressed(true);
}
}
void ABlasterCharacter::FireButtonReleased()
{
if (Combat)
{
Combat->FireButtonPressed(false);
}
}
void ABlasterCharacter::AimOffset(float DeltaTime)
{
if (Combat && Combat->EquippedWeapon == nullptr) return;
@ -464,34 +512,6 @@ void ABlasterCharacter::SimProxiesTurn()
TurningInPlace = ETurningInPlace::ETIP_NotTurning;
}
void ABlasterCharacter::Jump()
{
if (bIsCrouched)
{
UnCrouch();
}
else
{
Super::Jump();
}
}
void ABlasterCharacter::FireButtonPressed()
{
if (Combat)
{
Combat->FireButtonPressed(true);
}
}
void ABlasterCharacter::FireButtonReleased()
{
if (Combat)
{
Combat->FireButtonPressed(false);
}
}
void ABlasterCharacter::ServerEquipButtonPressed_Implementation()
{
EquipButtonPressed();

View File

@ -24,6 +24,7 @@ public:
virtual void PostInitializeComponents() override;
virtual void OnRep_ReplicatedMovement() override;
virtual void Destroyed() override;
void RotateInPlace(float DeltaTime);
void PlayFireMontage(bool bAiming);
void PlayReloadMontage();
void PlayEliminatedMontage();
@ -33,6 +34,9 @@ public:
UFUNCTION(NetMulticast, Reliable)
void MulticastEliminated();
UPROPERTY(Replicated)
bool bDisableGameplay = false;
protected:
virtual void BeginPlay() override;
@ -55,6 +59,7 @@ protected:
UFUNCTION()
void ReceiveDamage(AActor* DamagedActor, float Damage, const UDamageType* DamageType, class AController* InstigatorController, AActor* DamageCauser);
void UpdateHUDHealth();
// Poll for any relevant classes and initialize them
void PollInit();
@ -186,4 +191,6 @@ public:
FORCEINLINE float GetHealth() const { return Health; }
FORCEINLINE float GetMaxHealth() const { return MaxHealth; }
ECombatState GetCombatState() const;
FORCEINLINE UCombatComponent* GetCombat() const { return Combat; }
FORCEINLINE bool GetDisableGameplay() const { return bDisableGameplay; }
};

View File

@ -29,6 +29,7 @@ public:
void FinishedReloading();
void UpdateAmmoValues();
void FireButtonPressed(bool bPressed);
protected:
virtual void BeginPlay() override;
void SetAiming(bool bIsAiming);
@ -40,8 +41,6 @@ protected:
void OnRep_EquippedWeapon();
void Fire();
void FireButtonPressed(bool bPressed);
UFUNCTION(Server, Reliable)
void ServerFire(const FVector_NetQuantize& TraceHitTarget);

View File

@ -49,7 +49,11 @@ void ABlasterGameMode::Tick(float DeltaSeconds)
}
else if (MatchState == MatchState::Cooldown)
{
CountDownTime = CooldownTime + WarmupTime + MatchTime - GetWorld()->GetTimeSeconds() + LevelStartingTime;
CountDownTime = WarmupTime + MatchTime + CooldownTime - GetWorld()->GetTimeSeconds() + LevelStartingTime;
if (CountDownTime <= 0.f)
{
RestartGame();
}
}
}

View File

@ -4,6 +4,7 @@
#include "BlasterPlayerController.h"
#include "Blaster/Character/BlasterCharacter.h"
#include "Blaster/Components/CombatComponent.h"
#include "Blaster/GameMode/BlasterGameMode.h"
#include "Blaster/HUD/Announcement.h"
#include "Blaster/HUD/BlasterHUD.h"
@ -108,6 +109,13 @@ void ABlasterPlayerController::HandleCooldown()
BlasterHUD->Announcement->SetVisibility(ESlateVisibility::Visible);
}
}
ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(GetPawn());
if (BlasterCharacter && BlasterCharacter->GetCombat())
{
BlasterCharacter->bDisableGameplay = true;
BlasterCharacter->GetCombat()->FireButtonPressed(false);
}
}
void ABlasterPlayerController::OnMatchStateSet(FName State)