Added timer to update pool position every 30 seconds

This commit is contained in:
LuisPoveda 2022-10-28 01:40:04 +02:00 committed by bernat
parent 43b4a1e179
commit c6a83cb27c
2 changed files with 27 additions and 0 deletions

View File

@ -197,6 +197,7 @@ void AVegetationManager::BeginPlay()
LargeMap = UCarlaStatics::GetLargeMapManager(GetWorld());
FWorldDelegates::LevelAddedToWorld.AddUObject(this, &AVegetationManager::OnLevelAddedToWorld);
FWorldDelegates::LevelRemovedFromWorld.AddUObject(this, &AVegetationManager::OnLevelRemovedFromWorld);
GetWorldTimerManager().SetTimer(UpdatePoolInactiveTransformTimer, this, &AVegetationManager::UpdatePoolBasePosition, 30.0f, true, 15.0f);
}
void AVegetationManager::Tick(float DeltaTime)
@ -610,6 +611,27 @@ AActor* AVegetationManager::CreateFoliage(const FFoliageBlueprint& BP, const FTr
return Actor;
}
void AVegetationManager::UpdatePoolBasePosition()
{
TRACE_CPUPROFILER_EVENT_SCOPE(AVegetationManager::UpdatePoolBasePosition);
if (!IsValid(HeroVehicle))
return;
UE_LOG(LogCarla, Display, TEXT("UpdatePoolBasePosition"));
const FTransform HeroTransform = LargeMap->LocalToGlobalTransform(HeroVehicle->GetActorTransform());
const FVector HeroLocation = HeroTransform.GetLocation();
const FTransform PoolTransform(HeroTransform.GetRotation(), FVector(HeroLocation.X, HeroLocation.Y, -1000.0f), FVector(1.0f, 1.0f, 1.0f));
for (TPair<FString, TArray<FPooledActor>>& Element : ActorPool)
{
TArray<FPooledActor>& Pool = Element.Value;
for (FPooledActor& PooledActor : Pool)
{
if (PooledActor.InUse)
continue;
PooledActor.Actor->SetActorTransform(PoolTransform, true, nullptr, ETeleportType::ResetPhysics);
}
}
}
/********************************************************************************/
/********** TILES ***************************************************************/
/********************************************************************************/

View File

@ -85,6 +85,9 @@ public:
void AddVehicle(ACarlaWheeledVehicle* Vehicle);
void RemoveVehicle(ACarlaWheeledVehicle* Vehicle);
UFUNCTION(BlueprintCallable)
void UpdatePoolBasePosition();
public:
UPROPERTY(Category = "CARLA Vegetation Spwaner", EditDefaultsOnly)
bool DebugMaterials {false};
@ -157,4 +160,6 @@ private:
TMap<FString, FTileData> TileCache {};
//Pools
TMap<FString, TArray<FPooledActor>> ActorPool {};
FTimerHandle UpdatePoolInactiveTransformTimer;
};