/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #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, 0) 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()); 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::OriginRule::TYPEINFO_Uuid()) == existingRules.end()) { modifiers.push_back(SceneData::OriginRule::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()); } } } void ManifestMetaInfoHandler::InitializeObject(const Containers::Scene& scene, DataTypes::IManifestObject& target) { if (target.RTTI_IsTypeOf(DataTypes::IPhysicsRule::TYPEINFO_Uuid())) { DataTypes::IPhysicsRule* rule = azrtti_cast(&target); Utilities::SceneGraphSelector::UnselectAll(scene.GetGraph(), rule->GetSceneNodeSelectionList()); } } } // namespace SceneData } // namespace SceneAPI } // namespace AZ