Clothing system refactor

This commit is contained in:
olehhapuk
2026-05-29 22:13:09 +03:00
parent b6b81caf4e
commit 1c8ee03083
59 changed files with 417 additions and 227 deletions
@@ -0,0 +1,114 @@
// © 2025 Naked People Team. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "BodyPart.h"
#include "ClothingSlotType.h"
#include "Engine/DataAsset.h"
#include "NakedDesire/Items/ItemDefinition.h"
#include "NakedDesire/Progression/ProgressionPath.h"
#include "ClothingItemDefinition.generated.h"
USTRUCT(BlueprintType)
struct NAKEDDESIRE_API FBodyPartCoverage
{
GENERATED_BODY()
UPROPERTY(EditDefaultsOnly)
float Coverage = 1.0f;
UPROPERTY(EditDefaultsOnly)
EBodyPart BodyPart = EBodyPart::Ass;
};
UENUM(BlueprintType)
enum class ERestrictionType : uint8
{
BlockRun = 0,
BlockCrouch = 1,
BlockPhoneUsage = 2,
BlockItemPickup = 3,
BlockMasturbate = 4,
BlockBoobsExpose = 5,
BlockVaginaExpose = 6,
BlockAnalExpose = 7,
BlockSlotChange = 8,
};
USTRUCT(BlueprintType)
struct NAKEDDESIRE_API FClothingRestriction
{
GENERATED_BODY()
UPROPERTY()
ERestrictionType RestrictionType = ERestrictionType::BlockRun;
UPROPERTY()
EClothingSlotType AffectedSlot = EClothingSlotType::Anal;
};
UENUM(BlueprintType)
enum class EGarmentContainerSlotType : uint8
{
S UMETA(DisplayName = "Small"),
M UMETA(DisplayName = "Medium"),
L UMETA(DisplayName = "Large"),
};
USTRUCT(BlueprintType)
struct NAKEDDESIRE_API FGarmentContainerSlot
{
GENERATED_BODY()
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
EGarmentContainerSlotType SlotType = EGarmentContainerSlotType::S;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (ClampMin = 1))
int32 Count = 1;
};
UCLASS(BlueprintType)
class NAKEDDESIRE_API UClothingItemDefinition : public UItemDefinition
{
GENERATED_BODY()
public:
virtual TSubclassOf<UItemInstance> GetInstanceClass() const override;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
EClothingSlotType SlotType;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
USkeletalMesh* SkeletalMesh;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TMap<FName, UMaterialInstance*> Materials;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
int BasePrice;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TArray<FBodyPartCoverage> CoveredBodyParts;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (EditCondition = "SlotType == EClothingSlotType::Footwear", Category = "Shoes"))
float ShoesOffset = 0.0f;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
bool UseLeaderPose = false;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
EProgressionPath ProgressionPath;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TArray<EBodyPart> CanExpose;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TArray<FGarmentContainerSlot> ContainerSlots;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TArray<FClothingRestriction> Restrictions;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TArray<EBodyPart> HiddenBodyParts;
};