|
|
|
@@ -51,29 +51,37 @@ ANakedDesireCharacter::ANakedDesireCharacter()
|
|
|
|
|
FaceMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
EyesMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Eyes");
|
|
|
|
|
EyesMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
BodyMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Body");
|
|
|
|
|
BodyMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
BodySuitMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Body Suit");
|
|
|
|
|
BodySuitMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
TopMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Top");
|
|
|
|
|
TopMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
BottomMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Bottom");
|
|
|
|
|
BottomMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
BraMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Bra");
|
|
|
|
|
BraMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
PantiesMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Panties");
|
|
|
|
|
PantiesMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
UnderwearTopMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Underwear Top");
|
|
|
|
|
UnderwearTopMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
UnderwearBottomMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Underwear Bottom");
|
|
|
|
|
UnderwearBottomMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
SocksMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Socks");
|
|
|
|
|
SocksMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
ShoesMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Shoes");
|
|
|
|
|
ShoesMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
FootwearMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Footwear");
|
|
|
|
|
FootwearMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
OuterwearMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Outerwear");
|
|
|
|
|
OuterwearMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
WristRestraintMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Wrist Restraint");
|
|
|
|
|
WristRestraintMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
AnkleRestraintMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Ankle Restraint");
|
|
|
|
|
AnkleRestraintMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
NeckRestraintMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>("Neck Restraint");
|
|
|
|
|
NeckRestraintMeshComponent->SetupAttachment(GetMesh());
|
|
|
|
|
|
|
|
|
|
BoobLCensorship = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Boob L Censorship"));
|
|
|
|
|
BoobLCensorship->SetupAttachment(GetMesh(), FName(TEXT("boob_l")));
|
|
|
|
|
BoobRCensorship = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Boob R Censorship"));
|
|
|
|
|
BoobRCensorship->SetupAttachment(GetMesh(), FName(TEXT("boob_r")));
|
|
|
|
|
FrontBottomCensorship = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Front Bottom Censorship"));
|
|
|
|
|
FrontBottomCensorship->SetupAttachment(GetMesh(), FName(TEXT("pelvis")));
|
|
|
|
|
BackBottomCensorship = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Back Bottom Censorship"));
|
|
|
|
|
BackBottomCensorship->SetupAttachment(GetMesh(), FName(TEXT("pelvis")));
|
|
|
|
|
VaginaCensorship = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Vagina Censorship"));
|
|
|
|
|
VaginaCensorship->SetupAttachment(GetMesh(), FName(TEXT("pelvis")));
|
|
|
|
|
AnalCensorship = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Anal Censorship"));
|
|
|
|
|
AnalCensorship->SetupAttachment(GetMesh(), FName(TEXT("pelvis")));
|
|
|
|
|
|
|
|
|
|
StimuliSourceComponent = CreateDefaultSubobject<UAIPerceptionStimuliSourceComponent>(TEXT("Stimuli Source Component"));
|
|
|
|
|
}
|
|
|
|
@@ -176,7 +184,7 @@ UAISense_Sight::EVisibilityResult ANakedDesireCharacter::CanBeSeenFrom(const FCa
|
|
|
|
|
FHitResult PelvisHitResult;
|
|
|
|
|
const bool PelvisHit = CheckSight(StartLocation, PelvisBoneLocation, PelvisHitResult, Context.IgnoreActor);
|
|
|
|
|
|
|
|
|
|
if ((!BoobsHit || BoobsHitResult.GetActor() == this) && ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::FrontTop))
|
|
|
|
|
if ((!BoobsHit || BoobsHitResult.GetActor() == this) && ClothingManager->IsBodyTypeExposed(EBodyPart::Boobs))
|
|
|
|
|
{
|
|
|
|
|
UE_LOG(LogTemp, Warning, TEXT("Boobs hit"));
|
|
|
|
|
OutSeenLocation = BoobsBoneLocation;
|
|
|
|
@@ -185,7 +193,7 @@ UAISense_Sight::EVisibilityResult ANakedDesireCharacter::CanBeSeenFrom(const FCa
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((!PelvisHit || PelvisHitResult.GetActor() == this) &&
|
|
|
|
|
(ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::BackBottom) || ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::FrontBottom)))
|
|
|
|
|
(ClothingManager->IsBodyTypeExposed(EBodyPart::Ass) || ClothingManager->IsBodyTypeExposed(EBodyPart::Genitals)))
|
|
|
|
|
{
|
|
|
|
|
UE_LOG(LogTemp, Warning, TEXT("Pelvis hit"));
|
|
|
|
|
OutSeenLocation = PelvisBoneLocation;
|
|
|
|
@@ -250,19 +258,20 @@ void ANakedDesireCharacter::OnEndOverlap(UPrimitiveComponent* OverlappedComponen
|
|
|
|
|
|
|
|
|
|
void ANakedDesireCharacter::OnClothingEquip(const UClothingItemInstance* ClothingItemInstance)
|
|
|
|
|
{
|
|
|
|
|
if (ClothingItemInstance->GetClothingItem()->CoveredBodyParts.Contains(EPrivateBodyPartType::BackBottom))
|
|
|
|
|
{
|
|
|
|
|
BackBottomCensorship->SetVisibility(false);
|
|
|
|
|
}
|
|
|
|
|
if (ClothingItemInstance->GetClothingItem()->CoveredBodyParts.Contains(EPrivateBodyPartType::FrontBottom))
|
|
|
|
|
{
|
|
|
|
|
FrontBottomCensorship->SetVisibility(false);
|
|
|
|
|
}
|
|
|
|
|
if (ClothingItemInstance->GetClothingItem()->CoveredBodyParts.Contains(EPrivateBodyPartType::FrontTop))
|
|
|
|
|
{
|
|
|
|
|
BoobLCensorship->SetVisibility(false);
|
|
|
|
|
BoobRCensorship->SetVisibility(false);
|
|
|
|
|
}
|
|
|
|
|
// TODO: Add covered body part resolution
|
|
|
|
|
// if (ClothingItemInstance->GetClothingItem()->CoveredBodyParts.Contains(EBodyPart::Ass))
|
|
|
|
|
// {
|
|
|
|
|
// AnalCensorship->SetVisibility(false);
|
|
|
|
|
// }
|
|
|
|
|
// if (ClothingItemInstance->GetClothingItem()->CoveredBodyParts.Contains(EBodyPart::Genitals))
|
|
|
|
|
// {
|
|
|
|
|
// VaginaCensorship->SetVisibility(false);
|
|
|
|
|
// }
|
|
|
|
|
// if (ClothingItemInstance->GetClothingItem()->CoveredBodyParts.Contains(EBodyPart::Boobs))
|
|
|
|
|
// {
|
|
|
|
|
// BoobLCensorship->SetVisibility(false);
|
|
|
|
|
// BoobRCensorship->SetVisibility(false);
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ANakedDesireCharacter::OnClothingUnequip(const UClothingItemInstance* ClothingItemInstance)
|
|
|
|
@@ -270,15 +279,15 @@ void ANakedDesireCharacter::OnClothingUnequip(const UClothingItemInstance* Cloth
|
|
|
|
|
if (!UNakedDesireUserSettings::GetNakedDesireUserSettings()->GetIsCensorshipEnabled() && !IS_DEMO)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::BackBottom))
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EBodyPart::Ass))
|
|
|
|
|
{
|
|
|
|
|
BackBottomCensorship->SetVisibility(true);
|
|
|
|
|
AnalCensorship->SetVisibility(true);
|
|
|
|
|
}
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::FrontBottom))
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EBodyPart::Genitals))
|
|
|
|
|
{
|
|
|
|
|
FrontBottomCensorship->SetVisibility(true);
|
|
|
|
|
VaginaCensorship->SetVisibility(true);
|
|
|
|
|
}
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::FrontTop))
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EBodyPart::Boobs))
|
|
|
|
|
{
|
|
|
|
|
BoobLCensorship->SetVisibility(true);
|
|
|
|
|
BoobRCensorship->SetVisibility(true);
|
|
|
|
@@ -289,15 +298,15 @@ void ANakedDesireCharacter::OnSettingsChanged(UNakedDesireUserSettings* Settings
|
|
|
|
|
{
|
|
|
|
|
if (Settings->GetIsCensorshipEnabled())
|
|
|
|
|
{
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::BackBottom))
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EBodyPart::Ass))
|
|
|
|
|
{
|
|
|
|
|
BackBottomCensorship->SetVisibility(true);
|
|
|
|
|
AnalCensorship->SetVisibility(true);
|
|
|
|
|
}
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::FrontBottom))
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EBodyPart::Genitals))
|
|
|
|
|
{
|
|
|
|
|
FrontBottomCensorship->SetVisibility(true);
|
|
|
|
|
VaginaCensorship->SetVisibility(true);
|
|
|
|
|
}
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EPrivateBodyPartType::FrontTop))
|
|
|
|
|
if (ClothingManager->IsBodyTypeExposed(EBodyPart::Boobs))
|
|
|
|
|
{
|
|
|
|
|
BoobLCensorship->SetVisibility(true);
|
|
|
|
|
BoobRCensorship->SetVisibility(true);
|
|
|
|
@@ -305,8 +314,8 @@ void ANakedDesireCharacter::OnSettingsChanged(UNakedDesireUserSettings* Settings
|
|
|
|
|
}
|
|
|
|
|
else if (!IS_DEMO)
|
|
|
|
|
{
|
|
|
|
|
BackBottomCensorship->SetVisibility(false);
|
|
|
|
|
FrontBottomCensorship->SetVisibility(false);
|
|
|
|
|
AnalCensorship->SetVisibility(false);
|
|
|
|
|
VaginaCensorship->SetVisibility(false);
|
|
|
|
|
BoobLCensorship->SetVisibility(false);
|
|
|
|
|
BoobRCensorship->SetVisibility(false);
|
|
|
|
|
}
|
|
|
|
@@ -395,9 +404,9 @@ void ANakedDesireCharacter::SetupClothingSlots()
|
|
|
|
|
LOCTEXT("Eyes", "Eyes")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
BodyMeshComponent, EClothingSlotType::Body,
|
|
|
|
|
BodySuitMeshComponent, EClothingSlotType::BodySuit,
|
|
|
|
|
nullptr,
|
|
|
|
|
LOCTEXT("Body", "Body")));
|
|
|
|
|
LOCTEXT("BodySuit", "BodySuit")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
TopMeshComponent, EClothingSlotType::Top,
|
|
|
|
@@ -410,14 +419,14 @@ void ANakedDesireCharacter::SetupClothingSlots()
|
|
|
|
|
LOCTEXT("Bottom", "Bottom")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
BraMeshComponent, EClothingSlotType::Bra,
|
|
|
|
|
UnderwearTopMeshComponent, EClothingSlotType::UnderwearTop,
|
|
|
|
|
nullptr,
|
|
|
|
|
LOCTEXT("Bra", "Bra")));
|
|
|
|
|
LOCTEXT("UnderwearTop", "UnderwearTop")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
PantiesMeshComponent, EClothingSlotType::Panties,
|
|
|
|
|
UnderwearBottomMeshComponent, EClothingSlotType::UnderwearBottom,
|
|
|
|
|
nullptr,
|
|
|
|
|
LOCTEXT("Panties", "Panties")));
|
|
|
|
|
LOCTEXT("UnderwearBottom", "UnderwearBottom")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
SocksMeshComponent, EClothingSlotType::Socks,
|
|
|
|
@@ -425,9 +434,29 @@ void ANakedDesireCharacter::SetupClothingSlots()
|
|
|
|
|
LOCTEXT("Socks", "Socks")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
ShoesMeshComponent, EClothingSlotType::Shoes,
|
|
|
|
|
FootwearMeshComponent, EClothingSlotType::Footwear,
|
|
|
|
|
nullptr,
|
|
|
|
|
LOCTEXT("Shoes", "Shoes")));
|
|
|
|
|
LOCTEXT("Footwear", "Footwear")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
FootwearMeshComponent, EClothingSlotType::Outerwear,
|
|
|
|
|
nullptr,
|
|
|
|
|
LOCTEXT("Outerwear", "Outerwear")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
FootwearMeshComponent, EClothingSlotType::WristRestraint,
|
|
|
|
|
nullptr,
|
|
|
|
|
LOCTEXT("WristRestraint", "WristRestraint")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
FootwearMeshComponent, EClothingSlotType::AnkleRestraint,
|
|
|
|
|
nullptr,
|
|
|
|
|
LOCTEXT("AnkleRestraint", "AnkleRestraint")));
|
|
|
|
|
ClothingManager->ClothingSlots.Add(
|
|
|
|
|
FClothingSlotData(
|
|
|
|
|
FootwearMeshComponent, EClothingSlotType::NeckRestraint,
|
|
|
|
|
nullptr,
|
|
|
|
|
LOCTEXT("NeckRestraint", "NeckRestraint")));
|
|
|
|
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE
|
|
|
|
|
}
|
|
|
|
|