123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #pragma once
- #include "AkAcousticTexture.h"
- #include "AkAcousticTextureSetComponent.h"
- #include "AkGameObject.h"
- #include "AkSurfaceReflectorSetUtils.h"
- #include "Components/SceneComponent.h"
- #include "Components/TextRenderComponent.h"
- #include "AkSurfaceReflectorSetComponent.generated.h"
- class UAkRoomComponent;
- struct FAkReverbDescriptor;
- DECLARE_DELEGATE(FOnRefreshDetails);
- UCLASS(ClassGroup = Audiokinetic, BlueprintType, hidecategories = (Transform, Rendering, Mobility, LOD, Component, Activation, Tags), meta = (BlueprintSpawnableComponent))
- class AKAUDIO_API UAkSurfaceReflectorSetComponent : public UAkAcousticTextureSetComponent
- {
- GENERATED_BODY()
- public:
- UAkSurfaceReflectorSetComponent(const class FObjectInitializer& ObjectInitializer);
-
- UFUNCTION(BlueprintCallable, Category = "Audiokinetic|AkSurfaceReflectorSet")
- void SendSurfaceReflectorSet();
-
- UFUNCTION(BlueprintCallable, Category = "Audiokinetic|AkSurfaceReflectorSet")
- void UpdateSurfaceReflectorSet();
-
- UFUNCTION(BlueprintCallable, Category = "Audiokinetic|AkSurfaceReflectorSet")
- void RemoveSurfaceReflectorSet();
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EnableComponent", meta = (DisplayName = "Enable Surface Reflector Set"))
- bool bEnableSurfaceReflectors = false;
-
-
- UPROPERTY(EditAnywhere, Category = "SurfaceReflectorSet", BlueprintSetter = UpdateAcousticProperties)
- TArray<FAkSurfacePoly> AcousticPolys;
-
- UFUNCTION(BlueprintSetter, Category = "Audiokinetic|AkSurfaceReflectorSet")
- void UpdateAcousticProperties(TArray<FAkSurfacePoly> in_AcousticPolys);
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SurfaceReflectorSet")
- bool bEnableDiffraction = false;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SurfaceReflectorSet", meta = (EditCondition = "bEnableDiffraction"))
- bool bEnableDiffractionOnBoundaryEdges = false;
-
-
- UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = "SurfaceReflectorSet")
- AActor* AssociatedRoom = nullptr;
- UModel* ParentBrush;
- #if WITH_EDITORONLY_DATA
- UPROPERTY(SkipSerialization, NonTransactional)
- mutable TArray<UTextRenderComponent*> TextVisualizers;
- FText GetPolyText(int32 PolyIdx) const;
- void SetOnRefreshDetails(const FOnRefreshDetails& OnRefreshDetailsDelegate) { OnRefreshDetails = OnRefreshDetailsDelegate; }
- void ClearOnRefreshDetails() { OnRefreshDetails.Unbind(); }
- const FOnRefreshDetails* GetOnRefreshDetails() { return &OnRefreshDetails; }
- void AssignAcousticTexturesFromSamples(const TArray<FVector>& Points, const TArray<FVector>& Normals, const TArray< TWeakObjectPtr<class UPhysicalMaterial> >& Materials, int Num);
- #endif
- #if WITH_EDITOR
-
- virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
- virtual void PostEditUndo() override;
- virtual void PreEditUndo() override;
- virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction);
-
- bool UserInteractionInProgress = false;
- FDelegateHandle PropertyChangedHandle;
- void OnPropertyChanged(UObject* ObjectBeingModified, FPropertyChangedEvent& PropertyChangedEvent);
- void SchedulePolysUpdate();
- void UpdatePolys();
- void UpdateText(bool Visible);
-
- void UpdateTextPositions() const;
- void SurfacePropertiesChanged();
- void DestroyTextVisualizers();
- bool WasSelected;
- TSet<int> GetSelectedFaceIndices() const;
- bool TexturesDiffer() const;
-
- bool PolysNeedUpdate = false;
-
- void CacheAcousticProperties();
-
- void CacheLocalSpaceSurfaceGeometry();
- #endif
- #if WITH_EDITORONLY_DATA
- UPROPERTY()
- TMap<int64, FAkSurfaceEdgeInfo> EdgeMap;
- #endif
- virtual void BeginDestroy() override;
- virtual void OnRegister() override;
- virtual void OnUnregister() 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;
- void GetTexturesAndSurfaceAreas(TArray<FAkAcousticTextureParams>& textures, TArray<float>& surfaceAreas) const override;
- void ComputeAcousticPolySurfaceArea();
- private:
- virtual bool ShouldSendGeometry() const override;
- void InitializeParentBrush(bool fromTick = false);
- #if WITH_EDITOR
-
- TArray<FAkSurfacePoly> PreviousPolys;
- virtual void HandleObjectsReplaced(const TMap<UObject*, UObject*>& ReplacementMap) override;
- virtual bool ContainsTexture(const FGuid& textureID) override;
- virtual void RegisterAllTextureParamCallbacks() override;
-
- void SortFaceEdges(int FaceIndex);
-
- void UpdateFaceNormals(int FaceIndex);
-
- void UpdateEdgeMap();
-
- void EdgeMapChanged();
- void AlignTextWithEdge(int FaceIndex) const;
-
- int ChooseAlignmentEdge(int FaceIndex) const;
-
- FVector GetTextAnchorPosition(int FaceIndex, const FAkSurfaceEdgeInfo& AlignmentEdge, int AlignmentEdgeIndex) const;
-
- void SetTextScale(UTextRenderComponent* TextComp, int FaceIndex, int AlignmentEdgeIndex, const FVector& TextAnchorPosition, const struct FFacePlane& FacePlane, const FTransform& AttachTransform) const;
- #endif
- #if WITH_EDITORONLY_DATA
- FOnRefreshDetails OnRefreshDetails;
- #endif
- };
|