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;
|
PrimaryActorTick.bCanEverTick = true;
|
||||||
|
|
||||||
|
SpawnCollisionHandlingMethod = ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButAlwaysSpawn;
|
||||||
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
|
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
|
||||||
CameraBoom->SetupAttachment(GetMesh());
|
CameraBoom->SetupAttachment(GetMesh());
|
||||||
CameraBoom->TargetArmLength = 350.f;
|
CameraBoom->TargetArmLength = 350.f;
|
||||||
|
@ -105,17 +106,31 @@ void ABlasterCharacter::PlayEliminatedMontage()
|
||||||
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
||||||
if (AnimInstance && EliminatedMontage)
|
if (AnimInstance && EliminatedMontage)
|
||||||
{
|
{
|
||||||
UE_LOG(LogTemp, Warning, TEXT("Playing Eliminated Montage, %s"), (bEliminated ? "true" : "false"));
|
|
||||||
AnimInstance->Montage_Play(EliminatedMontage);
|
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;
|
bEliminated = true;
|
||||||
PlayEliminatedMontage();
|
PlayEliminatedMontage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ABlasterCharacter::EliminationTimerFinished()
|
||||||
|
{
|
||||||
|
ABlasterGameMode* GameMode = GetWorld()->GetAuthGameMode<ABlasterGameMode>();
|
||||||
|
if (GameMode)
|
||||||
|
{
|
||||||
|
GameMode->RequestRespawn(this, Controller);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ABlasterCharacter::PlayHitReactMontage()
|
void ABlasterCharacter::PlayHitReactMontage()
|
||||||
{
|
{
|
||||||
if (Combat == nullptr || Combat->EquippedWeapon == nullptr) return;
|
if (Combat == nullptr || Combat->EquippedWeapon == nullptr) return;
|
||||||
|
|
|
@ -23,9 +23,11 @@ public:
|
||||||
void PlayFireMontage(bool bAiming);
|
void PlayFireMontage(bool bAiming);
|
||||||
void PlayEliminatedMontage();
|
void PlayEliminatedMontage();
|
||||||
|
|
||||||
UFUNCTION(NetMulticast, Reliable)
|
|
||||||
void Eliminated();
|
void Eliminated();
|
||||||
|
|
||||||
|
UFUNCTION(NetMulticast, Reliable)
|
||||||
|
void MulticastEliminated();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
@ -116,6 +118,12 @@ private:
|
||||||
|
|
||||||
bool bEliminated = false;
|
bool bEliminated = false;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly)
|
||||||
|
float EliminationDelay = 3.f;
|
||||||
|
FTimerHandle EliminationTimer;
|
||||||
|
|
||||||
|
void EliminationTimerFinished();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void SetOverlappingWeapon(AWeapon* Weapon);
|
void SetOverlappingWeapon(AWeapon* Weapon);
|
||||||
bool IsWeaponEquipped();
|
bool IsWeaponEquipped();
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include "BlasterGameMode.h"
|
#include "BlasterGameMode.h"
|
||||||
|
|
||||||
#include "Blaster/Character/BlasterCharacter.h"
|
#include "Blaster/Character/BlasterCharacter.h"
|
||||||
|
#include "GameFramework/PlayerStart.h"
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
|
||||||
void ABlasterGameMode::PlayerEliminated(ABlasterCharacter* EliminatedCharacter, ABlasterPlayerController* VictimController,
|
void ABlasterGameMode::PlayerEliminated(ABlasterCharacter* EliminatedCharacter, ABlasterPlayerController* VictimController,
|
||||||
ABlasterPlayerController* AttackerController)
|
ABlasterPlayerController* AttackerController)
|
||||||
|
@ -12,5 +14,21 @@ void ABlasterGameMode::PlayerEliminated(ABlasterCharacter* EliminatedCharacter,
|
||||||
{
|
{
|
||||||
EliminatedCharacter->Eliminated();
|
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:
|
public:
|
||||||
|
|
||||||
virtual void PlayerEliminated(class ABlasterCharacter* EliminatedCharacter, class ABlasterPlayerController* VictimController, class ABlasterPlayerController* AttackerController);
|
virtual void PlayerEliminated(class ABlasterCharacter* EliminatedCharacter, class ABlasterPlayerController* VictimController, class ABlasterPlayerController* AttackerController);
|
||||||
|
virtual void RequestRespawn(ACharacter* EliminatedCharacter, AController* EliminatedController);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue