168 lines
4.8 KiB
C++
168 lines
4.8 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "UObject/NoExportTypes.h"
|
|
#include "DismembermentPreviewManager.generated.h"
|
|
|
|
// Add a log category declaration
|
|
DECLARE_LOG_CATEGORY_EXTERN(LogFLESHPreview, Log, All);
|
|
|
|
class UDismembermentGraphNode;
|
|
class USkeletalMeshComponent;
|
|
class AActor;
|
|
class UWorld;
|
|
class UNiagaraComponent;
|
|
class UDecalComponent;
|
|
class UStaticMeshComponent;
|
|
|
|
/**
|
|
* Preview manager for dismemberment effects
|
|
* Handles real-time preview of dismemberment nodes
|
|
*/
|
|
UCLASS()
|
|
class FLESHEDITOR_API UDismembermentPreviewManager : public UObject
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
// Constructor
|
|
UDismembermentPreviewManager();
|
|
|
|
/**
|
|
* Initialize the preview manager
|
|
* @param InWorld - The world to create the preview in
|
|
*/
|
|
void Initialize(TObjectPtr<UWorld> InWorld);
|
|
|
|
/**
|
|
* Clean up the preview manager
|
|
*/
|
|
void Cleanup();
|
|
|
|
/**
|
|
* Set the target actor for preview
|
|
* @param InActor - The actor to preview on
|
|
*/
|
|
void SetTargetActor(TObjectPtr<AActor> InActor);
|
|
|
|
/**
|
|
* Preview a node
|
|
* @param Node - The node to preview
|
|
* @return True if the preview was successful
|
|
*/
|
|
bool PreviewNode(TObjectPtr<UDismembermentGraphNode> Node);
|
|
|
|
/**
|
|
* Clear the current preview
|
|
*/
|
|
void ClearPreview();
|
|
|
|
/**
|
|
* Update the preview
|
|
* @param DeltaTime - Time since last update
|
|
*/
|
|
void Tick(float DeltaTime);
|
|
|
|
/**
|
|
* Get the target actor
|
|
* @return The target actor
|
|
*/
|
|
TObjectPtr<AActor> GetTargetActor() const { return TargetActor; }
|
|
|
|
/**
|
|
* Get the target skeletal mesh component
|
|
* @return The target skeletal mesh component
|
|
*/
|
|
TObjectPtr<USkeletalMeshComponent> GetTargetSkeletalMesh() const { return TargetSkeletalMesh; }
|
|
|
|
private:
|
|
// The world to create the preview in
|
|
UPROPERTY()
|
|
TObjectPtr<UWorld> World;
|
|
|
|
// The target actor
|
|
UPROPERTY()
|
|
TObjectPtr<AActor> TargetActor;
|
|
|
|
// The target skeletal mesh component
|
|
UPROPERTY()
|
|
TObjectPtr<USkeletalMeshComponent> TargetSkeletalMesh;
|
|
|
|
// The currently previewed node
|
|
UPROPERTY()
|
|
TObjectPtr<UDismembermentGraphNode> PreviewedNode;
|
|
|
|
// Preview components
|
|
UPROPERTY()
|
|
TArray<TObjectPtr<UNiagaraComponent>> PreviewNiagaraComponents;
|
|
|
|
UPROPERTY()
|
|
TArray<TObjectPtr<UDecalComponent>> PreviewDecalComponents;
|
|
|
|
UPROPERTY()
|
|
TArray<TObjectPtr<UStaticMeshComponent>> PreviewStaticMeshComponents;
|
|
|
|
// Preview cut plane mesh
|
|
UPROPERTY()
|
|
TObjectPtr<UStaticMeshComponent> PreviewCutPlaneMesh;
|
|
|
|
// Preview bone selections
|
|
UPROPERTY()
|
|
TArray<FName> PreviewBoneSelections;
|
|
|
|
// Preview cut locations
|
|
UPROPERTY()
|
|
TArray<FTransform> PreviewCutTransforms;
|
|
|
|
// Preview blood effect locations
|
|
UPROPERTY()
|
|
TArray<FTransform> PreviewBloodEffectTransforms;
|
|
|
|
// Preview organ locations
|
|
UPROPERTY()
|
|
TArray<FTransform> PreviewOrganTransforms;
|
|
|
|
// Preview wound locations
|
|
UPROPERTY()
|
|
TArray<FTransform> PreviewWoundTransforms;
|
|
|
|
// Find the target skeletal mesh component
|
|
bool FindTargetSkeletalMesh();
|
|
|
|
// Preview a cut node
|
|
bool PreviewCutNode(TObjectPtr<class UDismembermentGraphNodeCut> CutNode);
|
|
|
|
// Preview a bone select node
|
|
bool PreviewBoneSelectNode(TObjectPtr<class UDismembermentGraphNodeBoneSelect> BoneSelectNode);
|
|
|
|
// Preview a blood effect node
|
|
bool PreviewBloodEffectNode(TObjectPtr<class UDismembermentGraphNodeBloodEffect> BloodEffectNode);
|
|
|
|
// Preview a physics node
|
|
bool PreviewPhysicsNode(TObjectPtr<class UDismembermentGraphNodePhysics> PhysicsNode);
|
|
|
|
// Preview an organ node
|
|
bool PreviewOrganNode(TObjectPtr<class UDismembermentGraphNodeOrgan> OrganNode);
|
|
|
|
// Preview a wound node
|
|
bool PreviewWoundNode(TObjectPtr<class UDismembermentGraphNodeWound> WoundNode);
|
|
|
|
// Create a preview cut plane mesh
|
|
TObjectPtr<UStaticMeshComponent> CreatePreviewCutPlaneMesh(const FVector& Location, const FVector& Direction, float Width, float Depth, UMaterialInterface* Material);
|
|
|
|
// Create a preview blood effect
|
|
TObjectPtr<UNiagaraComponent> CreatePreviewBloodEffect(const FVector& Location, UNiagaraSystem* BloodEffect, float BloodAmount, float BloodPressure);
|
|
|
|
// Create a preview blood pool
|
|
TObjectPtr<UDecalComponent> CreatePreviewBloodPool(const FVector& Location, float Size, UMaterialInterface* Material);
|
|
|
|
// Create a preview organ
|
|
TObjectPtr<UStaticMeshComponent> CreatePreviewOrgan(UStaticMesh* OrganMesh, UMaterialInterface* OrganMaterial, const FName& AttachBoneName, const FVector& RelativeLocation, const FRotator& RelativeRotation, const FVector& RelativeScale);
|
|
|
|
// Create a preview wound
|
|
TObjectPtr<UDecalComponent> CreatePreviewWound(const FVector& Location, float Size, UMaterialInterface* Material);
|
|
|
|
// Clear all preview components
|
|
void ClearPreviewComponents();
|
|
};
|