Skip to content
Snippets Groups Projects
Select Git revision
  • 47a868cfb784e66f62b58e38218137e0cee40ede
  • main default protected
  • master
3 results

MagicWand.h

Blame
  • 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;