Select Git revision
MagicWand.h
-
Timon Römer authoredTimon Römer authored
MagicWand.h 3.77 KiB
#pragma once
#include "CoreMinimal.h"
#include "MagicWandSelectionManager.h"
#include "ProceduralMeshComponent.h"
#include "MetaCastBaseline.h"
#include "Generators/MarchingCubes.h"
#include "Templates/Atomic.h"
#include "MagicWand.generated.h"
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class UMagicWand : public UMetaCastBaseline
{
GENERATED_BODY()
// MAGIC WAND
TAtomic<bool> AbortMagicWand = false;
TSharedPtr<FSelectionManager> CurrentSelection;
TMap<float, TSharedPtr<FSelectionManager>> SelectionCache;
TArray<float> SortedProximityRanges;
FVector SeedPointPositionLocal;
FDensityField* MyDensityField;
float CountSelectionTime = 0;
bool IsMagicWandInitialized = false;
// THREADING
mutable FCriticalSection ProceduralMeshGuard;
mutable FCriticalSection SelectionCacheLock;
mutable FCriticalSection ThreadNumberLock;
mutable FThreadSafeCounter NumberThreads = 0;
// VISUALIZATION
bool IsMarchingCubesRunning = false;
bool AbortMarchingCubes = false;
float MarchingCubeSize = 0;
// REFERENCES
UPROPERTY()
UWorld* World;
UPROPERTY()
ULineBatchComponent* MyLineBatchComponent;
UPROPERTY()
UProceduralMeshComponent* ProceduralMesh;
UPROPERTY()
UProceduralMeshComponent* MarchingCubeMesh;
// USER EDITABLE PROPERTIES
UPROPERTY(EditAnywhere)
float MagicWandUpdatesPerSecond = 3;
UPROPERTY(EditAnywhere)
float ThresholdDistanceScaling = 20;
UPROPERTY(EditAnywhere)
float MinThreshold = 0.1;
UPROPERTY(EditAnywhere)
float MaxThreshold = 8;
UPROPERTY(EditAnywhere)
UMaterialInterface* SelectionVolumeMat;