Files
Yamato/Source/MyProject3/SpaceShooterGameMode.cpp
2025-02-15 22:15:10 +05:30

71 lines
2.2 KiB
C++

#include "SpaceShooterGameMode.h"
#include "SpaceshipPawn.h"
#include "EnemySpaceship.h"
#include "Kismet/GameplayStatics.h"
ASpaceShooterGameMode::ASpaceShooterGameMode()
{
PrimaryActorTick.bCanEverTick = true;
// Set default pawn class to our spaceship
DefaultPawnClass = ASpaceshipPawn::StaticClass();
}
void ASpaceShooterGameMode::StartPlay()
{
Super::StartPlay();
// Start spawning enemies
GetWorldTimerManager().SetTimer(EnemySpawnTimer, this, &ASpaceShooterGameMode::SpawnEnemy,
EnemySpawnInterval, true);
}
void ASpaceShooterGameMode::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void ASpaceShooterGameMode::SpawnEnemy()
{
// Count current enemies
TArray<AActor*> FoundEnemies;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), AEnemySpaceship::StaticClass(), FoundEnemies);
// Only spawn if we haven't reached the maximum
if (FoundEnemies.Num() < MaxEnemies)
{
UWorld* World = GetWorld();
if (World)
{
FVector SpawnLocation = GetRandomSpawnLocation();
FRotator SpawnRotation = FRotator::ZeroRotator;
FActorSpawnParameters SpawnParams;
SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButAlwaysSpawn;
World->SpawnActor<AEnemySpaceship>(AEnemySpaceship::StaticClass(), SpawnLocation,
SpawnRotation, SpawnParams);
}
}
}
FVector ASpaceShooterGameMode::GetRandomSpawnLocation()
{
APlayerController* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);
if (PlayerController && PlayerController->GetPawn())
{
FVector PlayerLocation = PlayerController->GetPawn()->GetActorLocation();
// Generate random angle
float Angle = FMath::RandRange(0.0f, 2.0f * PI);
// Calculate spawn position in a circle around the player
FVector SpawnLocation;
SpawnLocation.X = PlayerLocation.X + SpawnRadius * FMath::Cos(Angle);
SpawnLocation.Y = PlayerLocation.Y + SpawnRadius * FMath::Sin(Angle);
SpawnLocation.Z = PlayerLocation.Z;
return SpawnLocation;
}
return FVector::ZeroVector;
}