// Fill out your copyright notice in the Description page of Project Settings. #include "EnemySpawner.h" // Sets default values AEnemySpawner::AEnemySpawner() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; spawn_delay_s = 5.0f; } // Called when the game starts or when spawned void AEnemySpawner::BeginPlay() { Super::BeginPlay(); /* * Initialize random stream. */ random.Initialize(FMath::Rand()); } // Called every frame void AEnemySpawner::Tick(float delta_s) { Super::Tick(delta_s); spawn_wait_s += delta_s; if (next_spawn_threshold_s == 0) { next_spawn_threshold_s = spawn_delay_s + random.GetFraction(); } else if (spawn_wait_s > next_spawn_threshold_s) { FActorSpawnParameters spawnParameters; spawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; spawnParameters.Owner = this; AAIController* controller = GetWorld()->SpawnActor( controller_class, GetActorLocation(), FRotator(0,0,0), spawnParameters ); ABasePawn* enemy = GetWorld()->SpawnActor( pawn_class, GetActorLocation(), FRotator(0,0,0), spawnParameters ); controller->Possess(enemy); spawn_wait_s = 0; next_spawn_threshold_s = spawn_delay_s + random.GetFraction(); } }