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; bUseFABRIK = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading;
bUseAimOffsets = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading; bUseAimOffsets = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading && !BlasterCharacter->GetDisableGameplay();
bTransformRightHand = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading; 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_CONDITION(ABlasterCharacter, OverlappingWeapon, COND_OwnerOnly);
DOREPLIFETIME(ABlasterCharacter, Health); DOREPLIFETIME(ABlasterCharacter, Health);
DOREPLIFETIME(ABlasterCharacter, bDisableGameplay);
} }
void ABlasterCharacter::OnRep_ReplicatedMovement() void ABlasterCharacter::OnRep_ReplicatedMovement()
@ -91,6 +92,10 @@ void ABlasterCharacter::Destroyed()
{ {
EliminationBotComponent->DestroyComponent(); EliminationBotComponent->DestroyComponent();
} }
if (Combat && Combat->EquippedWeapon)
{
Combat->EquippedWeapon->Destroy();
}
} }
void ABlasterCharacter::PostInitializeComponents() void ABlasterCharacter::PostInitializeComponents()
@ -176,11 +181,8 @@ void ABlasterCharacter::MulticastEliminated_Implementation()
// Disable character movement // Disable character movement
GetCharacterMovement()->DisableMovement(); GetCharacterMovement()->DisableMovement();
GetCharacterMovement()->StopMovementImmediately(); GetCharacterMovement()->StopMovementImmediately();
if (BlasterPlayerController) bDisableGameplay = true;
{
DisableInput(BlasterPlayerController);
}
// Disable collision // Disable collision
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision); GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
GetMesh()->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()) if (GetLocalRole() > ROLE_SimulatedProxy && IsLocallyControlled())
{ {
AimOffset(DeltaTime); AimOffset(DeltaTime);
@ -260,7 +266,13 @@ void ABlasterCharacter::Tick(float DeltaTime)
} }
CalculateAO_Pitch(); CalculateAO_Pitch();
} }
}
void ABlasterCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
RotateInPlace(DeltaTime);
HideCameraIfCharacterClose(); HideCameraIfCharacterClose();
PollInit(); PollInit();
} }
@ -300,6 +312,7 @@ void ABlasterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputCo
void ABlasterCharacter::MoveForward(float Value) void ABlasterCharacter::MoveForward(float Value)
{ {
if (bDisableGameplay) return;
if (Controller != nullptr && Value != 0.f) if (Controller != nullptr && Value != 0.f)
{ {
const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 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) void ABlasterCharacter::MoveRight(float Value)
{ {
if (bDisableGameplay) return;
if (Controller != nullptr && Value != 0.f) if (Controller != nullptr && Value != 0.f)
{ {
const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 0.f); const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 0.f);
@ -332,6 +346,7 @@ void ABlasterCharacter::LookUp(float Value)
void ABlasterCharacter::EquipButtonPressed() void ABlasterCharacter::EquipButtonPressed()
{ {
if (bDisableGameplay) return;
if (Combat) if (Combat)
{ {
if (HasAuthority()) if (HasAuthority())
@ -347,6 +362,7 @@ void ABlasterCharacter::EquipButtonPressed()
void ABlasterCharacter::ReloadButtonPressed() void ABlasterCharacter::ReloadButtonPressed()
{ {
if (bDisableGameplay) return;
if (Combat) if (Combat)
{ {
Combat->Reload(); Combat->Reload();
@ -355,6 +371,7 @@ void ABlasterCharacter::ReloadButtonPressed()
void ABlasterCharacter::CrouchButtonPressed() void ABlasterCharacter::CrouchButtonPressed()
{ {
if (bDisableGameplay) return;
if (bIsCrouched) if (bIsCrouched)
{ {
UnCrouch(); UnCrouch();
@ -367,6 +384,7 @@ void ABlasterCharacter::CrouchButtonPressed()
void ABlasterCharacter::AimButtonPressed() void ABlasterCharacter::AimButtonPressed()
{ {
if (bDisableGameplay) return;
if (Combat) if (Combat)
{ {
Combat->SetAiming(true); Combat->SetAiming(true);
@ -375,12 +393,42 @@ void ABlasterCharacter::AimButtonPressed()
void ABlasterCharacter::AimButtonReleased() void ABlasterCharacter::AimButtonReleased()
{ {
if (bDisableGameplay) return;
if (Combat) if (Combat)
{ {
Combat->SetAiming(false); 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) void ABlasterCharacter::AimOffset(float DeltaTime)
{ {
if (Combat && Combat->EquippedWeapon == nullptr) return; if (Combat && Combat->EquippedWeapon == nullptr) return;
@ -464,34 +512,6 @@ void ABlasterCharacter::SimProxiesTurn()
TurningInPlace = ETurningInPlace::ETIP_NotTurning; 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() void ABlasterCharacter::ServerEquipButtonPressed_Implementation()
{ {
EquipButtonPressed(); EquipButtonPressed();

View File

@ -24,6 +24,7 @@ public:
virtual void PostInitializeComponents() override; virtual void PostInitializeComponents() override;
virtual void OnRep_ReplicatedMovement() override; virtual void OnRep_ReplicatedMovement() override;
virtual void Destroyed() override; virtual void Destroyed() override;
void RotateInPlace(float DeltaTime);
void PlayFireMontage(bool bAiming); void PlayFireMontage(bool bAiming);
void PlayReloadMontage(); void PlayReloadMontage();
void PlayEliminatedMontage(); void PlayEliminatedMontage();
@ -33,6 +34,9 @@ public:
UFUNCTION(NetMulticast, Reliable) UFUNCTION(NetMulticast, Reliable)
void MulticastEliminated(); void MulticastEliminated();
UPROPERTY(Replicated)
bool bDisableGameplay = false;
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;
@ -55,6 +59,7 @@ protected:
UFUNCTION() UFUNCTION()
void ReceiveDamage(AActor* DamagedActor, float Damage, const UDamageType* DamageType, class AController* InstigatorController, AActor* DamageCauser); void ReceiveDamage(AActor* DamagedActor, float Damage, const UDamageType* DamageType, class AController* InstigatorController, AActor* DamageCauser);
void UpdateHUDHealth(); void UpdateHUDHealth();
// Poll for any relevant classes and initialize them // Poll for any relevant classes and initialize them
void PollInit(); void PollInit();
@ -186,4 +191,6 @@ public:
FORCEINLINE float GetHealth() const { return Health; } FORCEINLINE float GetHealth() const { return Health; }
FORCEINLINE float GetMaxHealth() const { return MaxHealth; } FORCEINLINE float GetMaxHealth() const { return MaxHealth; }
ECombatState GetCombatState() const; 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 FinishedReloading();
void UpdateAmmoValues(); void UpdateAmmoValues();
void FireButtonPressed(bool bPressed);
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;
void SetAiming(bool bIsAiming); void SetAiming(bool bIsAiming);
@ -40,8 +41,6 @@ protected:
void OnRep_EquippedWeapon(); void OnRep_EquippedWeapon();
void Fire(); void Fire();
void FireButtonPressed(bool bPressed);
UFUNCTION(Server, Reliable) UFUNCTION(Server, Reliable)
void ServerFire(const FVector_NetQuantize& TraceHitTarget); void ServerFire(const FVector_NetQuantize& TraceHitTarget);

View File

@ -49,7 +49,11 @@ void ABlasterGameMode::Tick(float DeltaSeconds)
} }
else if (MatchState == MatchState::Cooldown) 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 "BlasterPlayerController.h"
#include "Blaster/Character/BlasterCharacter.h" #include "Blaster/Character/BlasterCharacter.h"
#include "Blaster/Components/CombatComponent.h"
#include "Blaster/GameMode/BlasterGameMode.h" #include "Blaster/GameMode/BlasterGameMode.h"
#include "Blaster/HUD/Announcement.h" #include "Blaster/HUD/Announcement.h"
#include "Blaster/HUD/BlasterHUD.h" #include "Blaster/HUD/BlasterHUD.h"
@ -108,6 +109,13 @@ void ABlasterPlayerController::HandleCooldown()
BlasterHUD->Announcement->SetVisibility(ESlateVisibility::Visible); 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) void ABlasterPlayerController::OnMatchStateSet(FName State)