123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #pragma once
- #include "Platforms/AkUEPlatform.h"
- #include "AkAcousticTexture.h"
- #include "WwiseUnrealDefines.h"
- #include "Components/SceneComponent.h"
- #include "PhysicalMaterials/PhysicalMaterial.h"
- #include "AkAcousticTextureSetComponent.h"
- #include "AkGeometryData.h"
- #include "AkGeometryComponent.generated.h"
- class UAkSettings;
- #if UE_5_0_OR_LATER
- class UMaterialInterface;
- #endif
- DECLARE_DELEGATE(FOnRefreshDetails);
- UENUM()
- enum class AkMeshType : uint8
- {
- StaticMesh,
- CollisionMesh UMETA(DisplayName = "Simple Collision")
- };
- USTRUCT(BlueprintType)
- struct FAkGeometrySurfaceOverride
- {
- GENERATED_BODY()
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Geometry")
- UAkAcousticTexture* AcousticTexture = nullptr;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, DisplayName = "Enable Transmission Loss Override", Category = "Geometry")
- bool bEnableOcclusionOverride = false;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Geometry", DisplayName = "Transmission Loss", meta = (EditCondition = "bEnableOcclusionOverride", ClampMin = "0.0", ClampMax = "1.0"))
- float OcclusionValue = 1.f;
- void SetSurfaceArea(float area) { SurfaceArea = area; }
- FAkGeometrySurfaceOverride()
- {
- AcousticTexture = nullptr;
- bEnableOcclusionOverride = false;
- OcclusionValue = 1.f;
- }
- private:
- UPROPERTY()
- float SurfaceArea = 0.0f;
- };
- UCLASS(ClassGroup = Audiokinetic, BlueprintType, hidecategories = (Transform, Rendering, Mobility, LOD, Component, Activation, Tags), meta = (BlueprintSpawnableComponent))
- class AKAUDIO_API UAkGeometryComponent : public UAkAcousticTextureSetComponent
- {
- GENERATED_BODY()
- public:
- UAkGeometryComponent(const class FObjectInitializer& ObjectInitializer);
-
- UFUNCTION(BlueprintCallable, Category = "Audiokinetic|AkGeometry")
- void ConvertMesh();
-
- UFUNCTION(BlueprintCallable, Category = "Audiokinetic|AkGeometry")
- void SendGeometry();
-
- UFUNCTION(BlueprintCallable, Category = "Audiokinetic|AkGeometry")
- void UpdateGeometry();
-
- UFUNCTION(BlueprintCallable, Category = "Audiokinetic|AkGeometry")
- void RemoveGeometry();
- virtual void OnComponentDestroyed(bool bDestroyingHierarchy) override;
- UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Geometry")
- AkMeshType MeshType = AkMeshType::CollisionMesh;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Geometry", meta = (ClampMin = "0.0"))
- int LOD = 0;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Geometry", meta = (ClampMin = "0.0"))
- float WeldingThreshold = .0f;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Geometry", DisplayName = "Acoustic Properties Override")
- TMap<UMaterialInterface*, FAkGeometrySurfaceOverride> StaticMeshSurfaceOverride;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Geometry", DisplayName = "Acoustic Properties Override")
- FAkGeometrySurfaceOverride CollisionMeshSurfaceOverride;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Geometry")
- bool bEnableDiffraction = false;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Geometry", meta = (EditCondition = "bEnableDiffraction"))
- bool bEnableDiffractionOnBoundaryEdges = false;
-
- UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = "Geometry")
- AActor* AssociatedRoom = nullptr;
- float GetSurfaceAreaSquaredMeters(const int& surfaceIndex) const;
- void UpdateStaticMeshOverride();
- #if WITH_EDITORONLY_DATA
- void SetOnRefreshDetails(const FOnRefreshDetails& in_delegate) { OnRefreshDetails = in_delegate; }
- void ClearOnRefreshDetails() { OnRefreshDetails.Unbind(); }
- const FOnRefreshDetails* GetOnRefreshDetails() { return &OnRefreshDetails; }
- bool bMeshMaterialChanged = false;
- #endif
- #if WITH_EDITOR
- virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
- virtual void PostEditUndo() override;
- virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
- #endif
- virtual void OnRegister() override;
- virtual void OnUnregister() override;
- virtual void BeginPlay() override;
- virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
- virtual void OnUpdateTransform(EUpdateTransformFlags UpdateTransformFlags, ETeleportType Teleport) override;
- virtual bool MoveComponentImpl(
- const FVector & Delta,
- const FQuat & NewRotation,
- bool bSweep,
- FHitResult * Hit,
- EMoveComponentFlags MoveFlags,
- ETeleportType Teleport) override;
- virtual void Serialize(FArchive& Ar) override;
- void GetTexturesAndSurfaceAreas(TArray<FAkAcousticTextureParams>& textures, TArray<float>& surfaceAreas) const override;
-
- bool bWasAddedByRoom = false;
- private:
- UPrimitiveComponent* Parent = nullptr;
- void InitializeParent();
- void CalculateSurfaceArea(UStaticMeshComponent* StaticMeshComponent);
- void ConvertStaticMesh(UStaticMeshComponent* StaticMeshComponent, const UAkSettings* AkSettings);
- void ConvertCollisionMesh(UPrimitiveComponent* PrimitiveComponent, const UAkSettings* AkSettings);
- void UpdateMeshAndArchetype(UStaticMeshComponent* StaticMeshComponent);
- void _UpdateStaticMeshOverride(UStaticMeshComponent* StaticMeshComponent);
- UPROPERTY()
- FAkGeometryData GeometryData;
- UPROPERTY()
- TMap<int, double> SurfaceAreas;
-
- TMap<UMaterialInterface*, FAkGeometrySurfaceOverride> PreviousStaticMeshSurfaceOverride;
- void BeginPlayInternal();
- #if WITH_EDITOR
- virtual void HandleObjectsReplaced(const TMap<UObject*, UObject*>& ReplacementMap) override;
- bool bRequiresDeferredBeginPlay = false;
- void RegisterAllTextureParamCallbacks() override;
- bool ContainsTexture(const FGuid& textureID) override;
- #endif
- #if WITH_EDITORONLY_DATA
- FOnRefreshDetails OnRefreshDetails;
- FDelegateHandle OnMeshMaterialChangedHandle;
- #endif
- };
|