/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace AZ { namespace SceneAPI { namespace SceneData { AZ_CLASS_ALLOCATOR_IMPL(ManifestMetaInfoHandler, SystemAllocator); ManifestMetaInfoHandler::ManifestMetaInfoHandler() { BusConnect(); } ManifestMetaInfoHandler::~ManifestMetaInfoHandler() { BusDisconnect(); } void ManifestMetaInfoHandler::GetAvailableModifiers(ModifiersList& modifiers, const Containers::Scene& /*scene*/, const DataTypes::IManifestObject& target) { AZ_TraceContext("Object Type", target.RTTI_GetTypeName()); modifiers.push_back(SceneData::CommentRule::TYPEINFO_Uuid()); modifiers.push_back(SceneData::UnmodifiableRule::TYPEINFO_Uuid()); if (target.RTTI_IsTypeOf(DataTypes::IMeshGroup::TYPEINFO_Uuid())) { const DataTypes::IMeshGroup* group = azrtti_cast(&target); const Containers::RuleContainer& rules = group->GetRuleContainerConst(); AZStd::unordered_set existingRules; const size_t ruleCount = rules.GetRuleCount(); for (size_t i = 0; i < ruleCount; ++i) { existingRules.insert(rules.GetRule(i)->RTTI_GetType()); } if (existingRules.find(SceneData::LodRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::LodRule::TYPEINFO_Uuid()); } if (existingRules.find(SceneData::MaterialRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::MaterialRule::TYPEINFO_Uuid()); } if (existingRules.find(SceneData::StaticMeshAdvancedRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::StaticMeshAdvancedRule::TYPEINFO_Uuid()); } if (existingRules.find(SceneData::SkinRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::SkinRule::TYPEINFO_Uuid()); } if (existingRules.find(azrtti_typeid()) == existingRules.end()) { modifiers.push_back(azrtti_typeid()); } if (existingRules.find(SceneData::UVsRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::UVsRule::TYPEINFO_Uuid()); } if (existingRules.find(SceneData::TangentsRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::TangentsRule::TYPEINFO_Uuid()); } if (existingRules.find(SceneData::TagRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::TagRule::TYPEINFO_Uuid()); } } else if (target.RTTI_IsTypeOf(DataTypes::ISkinGroup::TYPEINFO_Uuid())) { const DataTypes::ISkinGroup* group = azrtti_cast(&target); const Containers::RuleContainer& rules = group->GetRuleContainerConst(); AZStd::unordered_set existingRules; const size_t ruleCount = rules.GetRuleCount(); for (size_t i = 0; i < ruleCount; ++i) { existingRules.insert(rules.GetRule(i)->RTTI_GetType()); } if (existingRules.find(SceneData::BlendShapeRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::BlendShapeRule::TYPEINFO_Uuid()); } if (existingRules.find(SceneData::LodRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::LodRule::TYPEINFO_Uuid()); } if (existingRules.find(SceneData::MaterialRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::MaterialRule::TYPEINFO_Uuid()); } if (existingRules.find(SceneData::SkinMeshAdvancedRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::SkinMeshAdvancedRule::TYPEINFO_Uuid()); } } else if (target.RTTI_IsTypeOf(DataTypes::ISkeletonGroup::TYPEINFO_Uuid())) { const DataTypes::ISkeletonGroup* group = azrtti_cast(&target); const Containers::RuleContainer& rules = group->GetRuleContainerConst(); AZStd::unordered_set existingRules; const size_t ruleCount = rules.GetRuleCount(); for (size_t i = 0; i < ruleCount; ++i) { existingRules.insert(rules.GetRule(i)->RTTI_GetType()); } } } } // namespace SceneData } // namespace SceneAPI } // namespace AZ