// Copyright Epic Games, Inc. All Rights Reserved. #include "DynamicMeshActor.h" #include "Engine/CollisionProfile.h" #include "MaterialDomain.h" #include "Materials/Material.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(DynamicMeshActor) #define LOCTEXT_NAMESPACE "ADynamicMeshActor" ADynamicMeshActor::ADynamicMeshActor(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { DynamicMeshComponent = CreateDefaultSubobject(TEXT("DynamicMeshComponent")); DynamicMeshComponent->SetMobility(EComponentMobility::Movable); DynamicMeshComponent->SetGenerateOverlapEvents(false); DynamicMeshComponent->SetCollisionProfileName(UCollisionProfile::BlockAll_ProfileName); DynamicMeshComponent->CollisionType = ECollisionTraceFlag::CTF_UseDefault; DynamicMeshComponent->SetMaterial(0, UMaterial::GetDefaultMaterial(MD_Surface)); // is this necessary? SetRootComponent(DynamicMeshComponent); } UDynamicMeshPool* ADynamicMeshActor::GetComputeMeshPool() { if (DynamicMeshPool == nullptr && bEnableComputeMeshPool) { DynamicMeshPool = NewObject(); } return DynamicMeshPool; } UDynamicMesh* ADynamicMeshActor::AllocateComputeMesh() { if (bEnableComputeMeshPool) { UDynamicMeshPool* UsePool = GetComputeMeshPool(); if (UsePool) { return UsePool->RequestMesh(); } } // if we could not return a pool mesh, allocate a new mesh that isn't owned by the pool return NewObject(this); } bool ADynamicMeshActor::ReleaseComputeMesh(UDynamicMesh* Mesh) { if (bEnableComputeMeshPool && Mesh) { UDynamicMeshPool* UsePool = GetComputeMeshPool(); if (UsePool != nullptr) { UsePool->ReturnMesh(Mesh); return true; } } return false; } void ADynamicMeshActor::ReleaseAllComputeMeshes() { UDynamicMeshPool* UsePool = GetComputeMeshPool(); if (UsePool) { UsePool->ReturnAllMeshes(); } } void ADynamicMeshActor::FreeAllComputeMeshes() { UDynamicMeshPool* UsePool = GetComputeMeshPool(); if (UsePool) { UsePool->FreeAllMeshes(); } } #undef LOCTEXT_NAMESPACE