1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-04 13:45:34 +00:00

Merge branch 'skirts' into 'master'

Editor: Properly reserve body parts for skirts (bug #5731)

Closes #5731

See merge request OpenMW/openmw!452
This commit is contained in:
psi29a 2020-12-11 11:09:32 +00:00
commit 789d034432
2 changed files with 15 additions and 37 deletions

View file

@ -70,6 +70,7 @@
Bug #5688: Water shader broken indoors with enable indoor shadows = false Bug #5688: Water shader broken indoors with enable indoor shadows = false
Bug #5695: ExplodeSpell for actors doesn't target the ground Bug #5695: ExplodeSpell for actors doesn't target the ground
Bug #5703: OpenMW-CS menu system crashing on XFCE Bug #5703: OpenMW-CS menu system crashing on XFCE
Bug #5731: Editor: skirts are invisible on characters
Feature #390: 3rd person look "over the shoulder" Feature #390: 3rd person look "over the shoulder"
Feature #2386: Distant Statics in the form of Object Paging Feature #2386: Distant Statics in the form of Object Paging
Feature #2404: Levelled List can not be placed into a container Feature #2404: Levelled List can not be placed into a container

View file

@ -593,56 +593,33 @@ namespace CSMWorld
} }
else if (type == UniversalId::Type_Clothing) else if (type == UniversalId::Type_Clothing)
{ {
int priority = 0;
// TODO: reserve bodyparts for robes and skirts
auto& clothing = dynamic_cast<const Record<ESM::Clothing>&>(record).get(); auto& clothing = dynamic_cast<const Record<ESM::Clothing>&>(record).get();
std::vector<ESM::PartReferenceType> parts;
if (clothing.mData.mType == ESM::Clothing::Robe) if (clothing.mData.mType == ESM::Clothing::Robe)
{ {
auto reservedList = std::vector<ESM::PartReference>(); parts = {
ESM::PartReference pr;
pr.mMale = "";
pr.mFemale = "";
ESM::PartReferenceType parts[] = {
ESM::PRT_Groin, ESM::PRT_Skirt, ESM::PRT_RLeg, ESM::PRT_LLeg, ESM::PRT_Groin, ESM::PRT_Skirt, ESM::PRT_RLeg, ESM::PRT_LLeg,
ESM::PRT_RUpperarm, ESM::PRT_LUpperarm, ESM::PRT_RKnee, ESM::PRT_LKnee, ESM::PRT_RUpperarm, ESM::PRT_LUpperarm, ESM::PRT_RKnee, ESM::PRT_LKnee,
ESM::PRT_RForearm, ESM::PRT_LForearm ESM::PRT_RForearm, ESM::PRT_LForearm, ESM::PRT_Cuirass
}; };
size_t parts_size = sizeof(parts)/sizeof(parts[0]);
for(size_t p = 0;p < parts_size;++p)
{
pr.mPart = parts[p];
reservedList.push_back(pr);
}
priority = parts_size;
addParts(reservedList, priority);
} }
else if (clothing.mData.mType == ESM::Clothing::Skirt) else if (clothing.mData.mType == ESM::Clothing::Skirt)
{ {
auto reservedList = std::vector<ESM::PartReference>(); parts = {ESM::PRT_Groin, ESM::PRT_RLeg, ESM::PRT_LLeg};
}
ESM::PartReference pr; std::vector<ESM::PartReference> reservedList;
pr.mMale = ""; for (const auto& p : parts)
pr.mFemale = "";
ESM::PartReferenceType parts[] = {
ESM::PRT_Groin, ESM::PRT_RLeg, ESM::PRT_LLeg
};
size_t parts_size = sizeof(parts)/sizeof(parts[0]);
for(size_t p = 0;p < parts_size;++p)
{ {
pr.mPart = parts[p]; ESM::PartReference pr;
reservedList.push_back(pr); pr.mPart = p;
} reservedList.emplace_back(pr);
priority = parts_size;
addParts(reservedList, priority);
} }
int priority = parts.size();
addParts(clothing.mParts.mParts, priority); addParts(clothing.mParts.mParts, priority);
addParts(reservedList, priority);
// Changing parts could affect what is picked for rendering // Changing parts could affect what is picked for rendering
data->addOtherDependency(itemId); data->addOtherDependency(itemId);