게임 시작하기

This commit is contained in:
강민제 2025-05-13 23:02:57 +09:00
parent bf043b91fd
commit 9625075c19
6 changed files with 29 additions and 23 deletions

View File

@ -38,13 +38,9 @@ void UHealthComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActo
void UHealthComponent::DamageTaken(AActor* DamagedActor, float Damage, const UDamageType* DamageType, AController* Instigator, AActor* DamageCauser) void UHealthComponent::DamageTaken(AActor* DamagedActor, float Damage, const UDamageType* DamageType, AController* Instigator, AActor* DamageCauser)
{ {
if (Health <= 0.0f) if (Health <= 0.0f)
{
return; return;
}
Health -= Damage; Health -= Damage;
if (Health <= 0.0f && GameMode) if (Health <= 0.0f && GameMode)
{
GameMode->ActorDied(DamagedActor); GameMode->ActorDied(DamagedActor);
}
UE_LOG(LogTemp, Warning, TEXT("Health: %f"), Health); UE_LOG(LogTemp, Warning, TEXT("Health: %f"), Health);
} }

View File

@ -16,7 +16,6 @@ AProjectile::AProjectile()
ProjectileMovement = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("Projectile Movement")); ProjectileMovement = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("Projectile Movement"));
ProjectileMovement->InitialSpeed = 400.0f; ProjectileMovement->InitialSpeed = 400.0f;
ProjectileMovement->MaxSpeed = 1000.0f; ProjectileMovement->MaxSpeed = 1000.0f;
} }
// Called when the game starts or when spawned // Called when the game starts or when spawned
@ -24,14 +23,12 @@ void AProjectile::BeginPlay()
{ {
Super::BeginPlay(); Super::BeginPlay();
ProjectileMesh->OnComponentHit.AddDynamic(this, &AProjectile::OnHit); ProjectileMesh->OnComponentHit.AddDynamic(this, &AProjectile::OnHit);
} }
// Called every frame // Called every frame
void AProjectile::Tick(float DeltaTime) void AProjectile::Tick(float DeltaTime)
{ {
Super::Tick(DeltaTime); Super::Tick(DeltaTime);
} }
void AProjectile::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) void AProjectile::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)

View File

@ -10,8 +10,7 @@
void AToonTanksGameMode::BeginPlay() void AToonTanksGameMode::BeginPlay()
{ {
Super::BeginPlay(); Super::BeginPlay();
Tank = Cast<ATank>(UGameplayStatics::GetPlayerPawn(this, 0)); HandleGameStart();
PlayerController = Cast<AToonTanksPlayerController>(UGameplayStatics::GetPlayerController(this, 0));
} }
void AToonTanksGameMode::ActorDied(AActor* DeadActor) void AToonTanksGameMode::ActorDied(AActor* DeadActor)
@ -20,12 +19,30 @@ void AToonTanksGameMode::ActorDied(AActor* DeadActor)
{ {
Tank->HandleDestruction(); Tank->HandleDestruction();
if (PlayerController) if (PlayerController)
{
PlayerController->SetPlayerEnabledState(false); PlayerController->SetPlayerEnabledState(false);
}
} }
else if (ATower* DestroyedTower = Cast<ATower>(DeadActor)) else if (ATower* DestroyedTower = Cast<ATower>(DeadActor))
{
DestroyedTower->HandleDestruction(); DestroyedTower->HandleDestruction();
}
} }
void AToonTanksGameMode::HandleGameStart()
{
Tank = Cast<ATank>(UGameplayStatics::GetPlayerPawn(this, 0));
PlayerController = Cast<AToonTanksPlayerController>(UGameplayStatics::GetPlayerController(this, 0));
if (PlayerController)
{
PlayerController->SetPlayerEnabledState(false);
FTimerHandle PlayerEnableTimerHandle;
FTimerDelegate TimerDelegate = FTimerDelegate::CreateUObject(
PlayerController,
&AToonTanksPlayerController::SetPlayerEnabledState,
true
);
GetWorldTimerManager().SetTimer(
PlayerEnableTimerHandle,
TimerDelegate,
StartDelay,
false
);
}
}

View File

@ -29,5 +29,11 @@ private:
// ToonTanksPlayerController Pointer of player pawn. // ToonTanksPlayerController Pointer of player pawn.
UPROPERTY() UPROPERTY()
class AToonTanksPlayerController* PlayerController; class AToonTanksPlayerController* PlayerController;
// Delay time for starting game
float StartDelay = 3.f;
// Handles Game Start Action
void HandleGameStart();
}; };

View File

@ -6,12 +6,8 @@
void AToonTanksPlayerController::SetPlayerEnabledState(bool bPlayerEnabled) void AToonTanksPlayerController::SetPlayerEnabledState(bool bPlayerEnabled)
{ {
if (bPlayerEnabled) if (bPlayerEnabled)
{
GetPawn()->EnableInput(this); GetPawn()->EnableInput(this);
}
else else
{
GetPawn()->DisableInput(this); GetPawn()->DisableInput(this);
}
bShowMouseCursor = bPlayerEnabled; bShowMouseCursor = bPlayerEnabled;
} }

View File

@ -9,9 +9,7 @@ void ATower::Tick(float DeltaTime)
{ {
Super::Tick(DeltaTime); Super::Tick(DeltaTime);
if (InFireRange()) if (InFireRange())
{
RotateTurret(Tank->GetActorLocation()); RotateTurret(Tank->GetActorLocation());
}
} }
void ATower::HandleDestruction() void ATower::HandleDestruction()
@ -30,9 +28,7 @@ void ATower::BeginPlay()
void ATower::TryFire() void ATower::TryFire()
{ {
if (InFireRange()) if (InFireRange())
{
Fire(); Fire();
}
} }
bool ATower::InFireRange() const bool ATower::InFireRange() const
@ -41,9 +37,7 @@ bool ATower::InFireRange() const
{ {
float Distance = FVector::Dist(this->GetActorLocation(), Tank->GetActorLocation()); float Distance = FVector::Dist(this->GetActorLocation(), Tank->GetActorLocation());
if (Distance <= FireRange) if (Distance <= FireRange)
{
return true; return true;
}
} }
return false; return false;
} }