Files
BallisticsDocs/Source/EasyBallistics/Public/EBMaterialResponseMap.h
T
2025-07-03 00:11:05 -07:00

69 lines
4.0 KiB
C++

// Copyright 2016 Mookie. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "PhysicalMaterials/PhysicalMaterial.h"
#include "EBBulletProperties.h"
#include "EBMaterialResponseMap.generated.h"
UENUM(BlueprintType)
enum class EPenTraceType : uint8
{
PT_BackTrace UMETA(DisplayName = "Back Trace"),
PT_ByComponent UMETA(DisplayName = "By Component"),
PT_TwoSidedGeometry UMETA(DisplayName = "Double Sided Geometry"),
};
USTRUCT(BlueprintType)
struct FEBMaterialResponseMapEntry {
GENERATED_USTRUCT_BODY()
// Artistic Properties
UPROPERTY(EditAnywhere, Category = "Artistic Properties") EPenTraceType PenTraceType = EPenTraceType::PT_BackTrace;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") bool NeverPenetrate = false;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float PenetrationDepthMultiplier = 1.0f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float PenetrationNormalization = 0.0f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float PenetrationNormalizationGrazing = 0.0f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float PenetrationEntryAngleSpread = 0.0f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float PenetrationExitAngleSpread = 0.0;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") bool NeverRicochet = false;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float RicochetProbabilityMultiplier = 1.0f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float RicochetRestitution = 0.5f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float RicochetRestitutionInfluence = 0.0f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float RicochetFriction = 0.5f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float RicochetFrictionInfluence = 0.0f;
UPROPERTY(EditAnywhere, Category = "Artistic Properties") float RicochetSpread = 0.0f;
// Spalling Properties
UPROPERTY(EditAnywhere, Category = "Spalling Properties", meta = (ToolTip = "Enable spalling fragment generation for this material"))
bool EnableSpalling = false;
UPROPERTY(EditAnywhere, Category = "Spalling Properties", meta = (EditCondition = "EnableSpalling", ToolTip = "Minimum impact velocity to generate spalling fragments (cm/s)", ClampMin = "0"))
float SpallVelocityThreshold = 50000.0f;
UPROPERTY(EditAnywhere, Category = "Spalling Properties", meta = (EditCondition = "EnableSpalling", ToolTip = "Maximum number of spalling fragments to generate", ClampMin = "1", ClampMax = "20"))
int32 SpallFragmentCount = 3;
UPROPERTY(EditAnywhere, Category = "Spalling Properties", meta = (EditCondition = "EnableSpalling", ToolTip = "Cone spread angle for spalling fragments in degrees", ClampMin = "0", ClampMax = "180"))
float SpallSpreadAngle = 45.0f;
UPROPERTY(EditAnywhere, Category = "Spalling Properties", meta = (EditCondition = "EnableSpalling", ToolTip = "Velocity multiplier for spalling fragments", ClampMin = "0", ClampMax = "1"))
float SpallVelocityMultiplier = 0.3f;
UPROPERTY(EditAnywhere, Category = "Spalling Properties", meta = (EditCondition = "EnableSpalling", ToolTip = "Mass multiplier for spalling fragments", ClampMin = "0", ClampMax = "1"))
float SpallMassMultiplier = 0.1f;
UPROPERTY(EditAnywhere, Category = "Spalling Properties", meta = (EditCondition = "EnableSpalling", ToolTip = "Bullet class to use for spalling fragments"))
TSubclassOf<class AEBBullet> SpallFragmentClass;
// Mathematical Properties
UPROPERTY(EditAnywhere, Category = "Mathematical Properties", meta = (ToolTip = "Use mathematical properties for this material"))
bool UseMathematicalProperties = false;
UPROPERTY(EditAnywhere, Category = "Mathematical Properties", meta = (EditCondition = "UseMathematicalProperties"))
FMathematicalMaterialProperties MathematicalProperties;
};
UCLASS(BlueprintType)
class UEBMaterialResponseMap : public UDataAsset{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, Category = "Responses") TMap<UPhysicalMaterial*, FEBMaterialResponseMapEntry> Map;
};