Pawn 죽음 다루기
This commit is contained in:
parent
c5f5288e96
commit
0ff8baf48f
@ -72,3 +72,6 @@ ConnectionType=USBOnly
|
||||
bUseManualIPAddress=False
|
||||
ManualIPAddress=
|
||||
|
||||
|
||||
[CoreRedirects]
|
||||
+PropertyRedirects=(OldName="/Script/ToonTanks.Tank.PlayerControllerRef",NewName="/Script/ToonTanks.Tank.PlayerController")
|
@ -26,6 +26,12 @@ ABasePawn::ABasePawn()
|
||||
ProjectileSpawnPoint->SetupAttachment(TurretMesh);
|
||||
}
|
||||
|
||||
void ABasePawn::HandleDestruction()
|
||||
{
|
||||
// TODO: Visual & Sound Effect Implementation
|
||||
|
||||
}
|
||||
|
||||
void ABasePawn::RotateTurret(FVector LookAtTarget)
|
||||
{
|
||||
FVector ToTarget = LookAtTarget - TurretMesh->GetComponentLocation();
|
||||
|
@ -15,6 +15,9 @@ public:
|
||||
// Sets default values for this pawn's properties
|
||||
ABasePawn();
|
||||
|
||||
// Handles Base Pawn destruction by Damage
|
||||
virtual void HandleDestruction();
|
||||
|
||||
protected:
|
||||
// Rotate Turret to Target Location
|
||||
void RotateTurret(FVector LookAtTarget);
|
||||
|
@ -3,6 +3,9 @@
|
||||
|
||||
#include "HealthComponent.h"
|
||||
|
||||
#include "ToonTanksGameMode.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
// Sets default values for this component's properties
|
||||
UHealthComponent::UHealthComponent()
|
||||
{
|
||||
@ -20,6 +23,7 @@ void UHealthComponent::BeginPlay()
|
||||
Super::BeginPlay();
|
||||
Health = MaxHealth;
|
||||
GetOwner()->OnTakeAnyDamage.AddDynamic(this, &UHealthComponent::DamageTaken);
|
||||
GameMode = Cast<AToonTanksGameMode>(UGameplayStatics::GetGameMode(this));
|
||||
}
|
||||
|
||||
|
||||
@ -33,8 +37,14 @@ void UHealthComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActo
|
||||
|
||||
void UHealthComponent::DamageTaken(AActor* DamagedActor, float Damage, const UDamageType* DamageType, AController* Instigator, AActor* DamageCauser)
|
||||
{
|
||||
if (Damage <= 0.0f)
|
||||
if (Health <= 0.0f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Health -= Damage;
|
||||
if (Health <= 0.0f && GameMode)
|
||||
{
|
||||
GameMode->ActorDied(DamagedActor);
|
||||
}
|
||||
UE_LOG(LogTemp, Warning, TEXT("Health: %f"), Health);
|
||||
}
|
||||
|
@ -32,6 +32,10 @@ private:
|
||||
UFUNCTION()
|
||||
void DamageTaken(AActor* DamagedActor, float Damage, const UDamageType* DamageType, AController* Instigator, AActor* DamageCauser);
|
||||
|
||||
// AToonTanksGameMode Pointer for Handling Dead Actor
|
||||
UPROPERTY()
|
||||
class AToonTanksGameMode* GameMode;
|
||||
|
||||
public:
|
||||
// Called every frame
|
||||
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
|
||||
|
@ -29,10 +29,10 @@ void ATank::Tick(float DeltaTime)
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
// Rotate Tank to Mouse Pointer Location
|
||||
if (PlayerControllerRef)
|
||||
if (PlayerController)
|
||||
{
|
||||
FHitResult HitResult;
|
||||
PlayerControllerRef->GetHitResultUnderCursor(
|
||||
PlayerController->GetHitResultUnderCursor(
|
||||
ECollisionChannel::ECC_Visibility,
|
||||
false,
|
||||
HitResult
|
||||
@ -48,11 +48,23 @@ void ATank::Tick(float DeltaTime)
|
||||
}
|
||||
}
|
||||
|
||||
void ATank::HandleDestruction()
|
||||
{
|
||||
Super::HandleDestruction();
|
||||
SetActorHiddenInGame(true);
|
||||
SetActorTickEnabled(false);
|
||||
}
|
||||
|
||||
APlayerController* ATank::GetPlayerController() const
|
||||
{
|
||||
return this->PlayerController;
|
||||
}
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
void ATank::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
PlayerControllerRef = Cast<APlayerController>(GetController());
|
||||
PlayerController = Cast<APlayerController>(GetController());
|
||||
}
|
||||
|
||||
void ATank::Move(float Value)
|
||||
|
@ -23,6 +23,12 @@ public:
|
||||
// Called every frame
|
||||
virtual void Tick(float DeltaTime) override;
|
||||
|
||||
// Handle's Tank Destruction by Damage
|
||||
virtual void HandleDestruction() override;
|
||||
|
||||
// Get Current Player Controller Pointer
|
||||
APlayerController* GetPlayerController() const;
|
||||
|
||||
protected:
|
||||
// Called when the game starts or when spawned
|
||||
virtual void BeginPlay() override;
|
||||
@ -46,7 +52,7 @@ private:
|
||||
|
||||
// PlayerController Pointer for Mouse Location Detection
|
||||
UPROPERTY()
|
||||
APlayerController* PlayerControllerRef;
|
||||
APlayerController* PlayerController;
|
||||
|
||||
// Move operation through W/S key
|
||||
void Move(float Value);
|
||||
|
@ -2,4 +2,29 @@
|
||||
|
||||
|
||||
#include "ToonTanksGameMode.h"
|
||||
#include "Tank.h"
|
||||
#include "Tower.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
void AToonTanksGameMode::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
Tank = Cast<ATank>(UGameplayStatics::GetPlayerPawn(this, 0));
|
||||
}
|
||||
|
||||
void AToonTanksGameMode::ActorDied(AActor* DeadActor)
|
||||
{
|
||||
if (DeadActor == Tank)
|
||||
{
|
||||
Tank->HandleDestruction();
|
||||
if (Tank->GetPlayerController())
|
||||
{
|
||||
Tank->DisableInput(Tank->GetPlayerController());
|
||||
Tank->GetPlayerController()->bShowMouseCursor = false;
|
||||
}
|
||||
}
|
||||
else if (ATower* DestroyedTower = Cast<ATower>(DeadActor))
|
||||
{
|
||||
DestroyedTower->HandleDestruction();
|
||||
}
|
||||
}
|
||||
|
@ -14,4 +14,16 @@ class TOONTANKS_API AToonTanksGameMode : public AGameModeBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// Handles input or something after Actor died.
|
||||
void ActorDied(AActor* DeadActor);
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
private:
|
||||
// Tank Pointer for DeadActor which is ATank.
|
||||
UPROPERTY()
|
||||
class ATank* Tank;
|
||||
|
||||
};
|
||||
|
@ -14,6 +14,12 @@ void ATower::Tick(float DeltaTime)
|
||||
}
|
||||
}
|
||||
|
||||
void ATower::HandleDestruction()
|
||||
{
|
||||
Super::HandleDestruction();
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void ATower::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
@ -17,11 +17,15 @@ class TOONTANKS_API ATower : public ABasePawn
|
||||
public:
|
||||
virtual void Tick(float DeltaTime) override;
|
||||
|
||||
// Handles Tower Destruction by Damage
|
||||
virtual void HandleDestruction() override;
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
private:
|
||||
// Tank Object Pointer which is target
|
||||
UPROPERTY()
|
||||
class ATank* Tank;
|
||||
|
||||
// Distance to Start Tracking the target
|
||||
|
Loading…
x
Reference in New Issue
Block a user