100 - Respawning
This commit is contained in:
parent
659a9b30de
commit
767925f882
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -21,6 +21,7 @@ ABlasterCharacter::ABlasterCharacter()
|
|||
{
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
|
||||
SpawnCollisionHandlingMethod = ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButAlwaysSpawn;
|
||||
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
|
||||
CameraBoom->SetupAttachment(GetMesh());
|
||||
CameraBoom->TargetArmLength = 350.f;
|
||||
|
@ -105,17 +106,31 @@ void ABlasterCharacter::PlayEliminatedMontage()
|
|||
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
||||
if (AnimInstance && EliminatedMontage)
|
||||
{
|
||||
UE_LOG(LogTemp, Warning, TEXT("Playing Eliminated Montage, %s"), (bEliminated ? "true" : "false"));
|
||||
AnimInstance->Montage_Play(EliminatedMontage);
|
||||
}
|
||||
}
|
||||
|
||||
void ABlasterCharacter::Eliminated_Implementation()
|
||||
void ABlasterCharacter::Eliminated()
|
||||
{
|
||||
MulticastEliminated();
|
||||
GetWorldTimerManager().SetTimer(EliminationTimer, this, &ABlasterCharacter::EliminationTimerFinished, EliminationDelay);
|
||||
}
|
||||
|
||||
void ABlasterCharacter::MulticastEliminated_Implementation()
|
||||
{
|
||||
bEliminated = true;
|
||||
PlayEliminatedMontage();
|
||||
}
|
||||
|
||||
void ABlasterCharacter::EliminationTimerFinished()
|
||||
{
|
||||
ABlasterGameMode* GameMode = GetWorld()->GetAuthGameMode<ABlasterGameMode>();
|
||||
if (GameMode)
|
||||
{
|
||||
GameMode->RequestRespawn(this, Controller);
|
||||
}
|
||||
}
|
||||
|
||||
void ABlasterCharacter::PlayHitReactMontage()
|
||||
{
|
||||
if (Combat == nullptr || Combat->EquippedWeapon == nullptr) return;
|
||||
|
|
|
@ -23,9 +23,11 @@ public:
|
|||
void PlayFireMontage(bool bAiming);
|
||||
void PlayEliminatedMontage();
|
||||
|
||||
UFUNCTION(NetMulticast, Reliable)
|
||||
void Eliminated();
|
||||
|
||||
UFUNCTION(NetMulticast, Reliable)
|
||||
void MulticastEliminated();
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
|
@ -116,6 +118,12 @@ private:
|
|||
|
||||
bool bEliminated = false;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
float EliminationDelay = 3.f;
|
||||
FTimerHandle EliminationTimer;
|
||||
|
||||
void EliminationTimerFinished();
|
||||
|
||||
public:
|
||||
void SetOverlappingWeapon(AWeapon* Weapon);
|
||||
bool IsWeaponEquipped();
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include "BlasterGameMode.h"
|
||||
|
||||
#include "Blaster/Character/BlasterCharacter.h"
|
||||
#include "GameFramework/PlayerStart.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
void ABlasterGameMode::PlayerEliminated(ABlasterCharacter* EliminatedCharacter, ABlasterPlayerController* VictimController,
|
||||
ABlasterPlayerController* AttackerController)
|
||||
|
@ -12,5 +14,21 @@ void ABlasterGameMode::PlayerEliminated(ABlasterCharacter* EliminatedCharacter,
|
|||
{
|
||||
EliminatedCharacter->Eliminated();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ABlasterGameMode::RequestRespawn(ACharacter* EliminatedCharacter, AController* EliminatedController)
|
||||
{
|
||||
if (EliminatedCharacter)
|
||||
{
|
||||
EliminatedCharacter->Reset();
|
||||
EliminatedCharacter->Destroy();
|
||||
}
|
||||
|
||||
if (EliminatedController)
|
||||
{
|
||||
TArray<AActor*> PlayerStarts;
|
||||
UGameplayStatics::GetAllActorsOfClass(this, APlayerStart::StaticClass(), PlayerStarts);
|
||||
const int32 Selection = FMath::RandRange(0, PlayerStarts.Num() - 1);
|
||||
RestartPlayerAtPlayerStart(EliminatedController, PlayerStarts[Selection]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,4 +17,5 @@ class BLASTER_API ABlasterGameMode : public AGameMode
|
|||
public:
|
||||
|
||||
virtual void PlayerEliminated(class ABlasterCharacter* EliminatedCharacter, class ABlasterPlayerController* VictimController, class ABlasterPlayerController* AttackerController);
|
||||
virtual void RequestRespawn(ACharacter* EliminatedCharacter, AController* EliminatedController);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue