Integrating latest from github/staging
Integrating up through commit 5e1bdae
This commit is contained in:
@@ -156,7 +156,7 @@ namespace AZ
|
||||
// get project folder
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
AZ::IO::FixedMaxPath projectPath;
|
||||
if (!settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_SourceGameFolder))
|
||||
if (!settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath))
|
||||
{
|
||||
return Events::ProcessingResult::Ignored;
|
||||
}
|
||||
|
||||
@@ -47,6 +47,8 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
|
||||
BUILD_DEPENDENCIES
|
||||
PRIVATE
|
||||
AZ::AzTest
|
||||
AZ::AzFramework
|
||||
AZ::SceneCore
|
||||
AZ::SceneData
|
||||
)
|
||||
ly_add_googletest(
|
||||
|
||||
@@ -144,92 +144,92 @@ namespace AZ
|
||||
return m_shininess;
|
||||
}
|
||||
|
||||
void MaterialData::SetUseColorMap(bool useColorMap)
|
||||
void MaterialData::SetUseColorMap(AZStd::optional<bool> useColorMap)
|
||||
{
|
||||
m_useColorMap = useColorMap;
|
||||
}
|
||||
|
||||
bool MaterialData::GetUseColorMap() const
|
||||
AZStd::optional<bool> MaterialData::GetUseColorMap() const
|
||||
{
|
||||
return m_useColorMap;
|
||||
}
|
||||
|
||||
void MaterialData::SetBaseColor(const AZ::Vector3& baseColor)
|
||||
void MaterialData::SetBaseColor(const AZStd::optional<AZ::Vector3>& baseColor)
|
||||
{
|
||||
m_baseColor = baseColor;
|
||||
}
|
||||
|
||||
const AZ::Vector3& MaterialData::GetBaseColor() const
|
||||
AZStd::optional<AZ::Vector3> MaterialData::GetBaseColor() const
|
||||
{
|
||||
return m_baseColor;
|
||||
}
|
||||
|
||||
void MaterialData::SetUseMetallicMap(bool useMetallicMap)
|
||||
void MaterialData::SetUseMetallicMap(AZStd::optional<bool> useMetallicMap)
|
||||
{
|
||||
m_useMetallicMap = useMetallicMap;
|
||||
}
|
||||
|
||||
bool MaterialData::GetUseMetallicMap() const
|
||||
AZStd::optional<bool> MaterialData::GetUseMetallicMap() const
|
||||
{
|
||||
return m_useMetallicMap;
|
||||
}
|
||||
|
||||
void MaterialData::SetMetallicFactor(float metallicFactor)
|
||||
void MaterialData::SetMetallicFactor(AZStd::optional<float> metallicFactor)
|
||||
{
|
||||
m_metallicFactor = metallicFactor;
|
||||
}
|
||||
|
||||
float MaterialData::GetMetallicFactor() const
|
||||
AZStd::optional<float> MaterialData::GetMetallicFactor() const
|
||||
{
|
||||
return m_metallicFactor;
|
||||
}
|
||||
|
||||
void MaterialData::SetUseRoughnessMap(bool useRoughnessMap)
|
||||
void MaterialData::SetUseRoughnessMap(AZStd::optional<bool> useRoughnessMap)
|
||||
{
|
||||
m_useRoughnessMap = useRoughnessMap;
|
||||
}
|
||||
|
||||
bool MaterialData::GetUseRoughnessMap() const
|
||||
AZStd::optional<bool> MaterialData::GetUseRoughnessMap() const
|
||||
{
|
||||
return m_useRoughnessMap;
|
||||
}
|
||||
|
||||
void MaterialData::SetRoughnessFactor(float roughnessFactor)
|
||||
void MaterialData::SetRoughnessFactor(AZStd::optional<float> roughnessFactor)
|
||||
{
|
||||
m_roughnessFactor = roughnessFactor;
|
||||
}
|
||||
|
||||
float MaterialData::GetRoughnessFactor() const
|
||||
AZStd::optional<float> MaterialData::GetRoughnessFactor() const
|
||||
{
|
||||
return m_roughnessFactor;
|
||||
}
|
||||
|
||||
void MaterialData::SetUseEmissiveMap(bool useEmissiveMap)
|
||||
void MaterialData::SetUseEmissiveMap(AZStd::optional<bool> useEmissiveMap)
|
||||
{
|
||||
m_useEmissiveMap = useEmissiveMap;
|
||||
}
|
||||
|
||||
bool MaterialData::GetUseEmissiveMap() const
|
||||
AZStd::optional<bool> MaterialData::GetUseEmissiveMap() const
|
||||
{
|
||||
return m_useEmissiveMap;
|
||||
}
|
||||
|
||||
void MaterialData::SetEmissiveIntensity(float emissiveIntensity)
|
||||
void MaterialData::SetEmissiveIntensity(AZStd::optional<float> emissiveIntensity)
|
||||
{
|
||||
m_emissiveIntensity = emissiveIntensity;
|
||||
}
|
||||
|
||||
float MaterialData::GetEmissiveIntensity() const
|
||||
AZStd::optional<float> MaterialData::GetEmissiveIntensity() const
|
||||
{
|
||||
return m_emissiveIntensity;
|
||||
}
|
||||
|
||||
void MaterialData::SetUseAOMap(bool useAOMap)
|
||||
void MaterialData::SetUseAOMap(AZStd::optional<bool> useAOMap)
|
||||
{
|
||||
m_useAOMap = useAOMap;
|
||||
}
|
||||
|
||||
bool MaterialData::GetUseAOMap() const
|
||||
AZStd::optional<bool> MaterialData::GetUseAOMap() const
|
||||
{
|
||||
return m_useAOMap;
|
||||
}
|
||||
|
||||
@@ -47,15 +47,15 @@ namespace AZ
|
||||
SCENE_DATA_API virtual void SetOpacity(float opacity);
|
||||
SCENE_DATA_API virtual void SetShininess(float shininess);
|
||||
SCENE_DATA_API virtual void SetUniqueId(uint64_t uid);
|
||||
SCENE_DATA_API virtual void SetUseColorMap(bool useColorMap);
|
||||
SCENE_DATA_API virtual void SetBaseColor(const AZ::Vector3& baseColor);
|
||||
SCENE_DATA_API virtual void SetUseMetallicMap(bool useMetallicMap);
|
||||
SCENE_DATA_API virtual void SetMetallicFactor(float metallicFactor);
|
||||
SCENE_DATA_API virtual void SetUseRoughnessMap(bool useRoughnessMap);
|
||||
SCENE_DATA_API virtual void SetRoughnessFactor(float roughnessFactor);
|
||||
SCENE_DATA_API virtual void SetUseEmissiveMap(bool useEmissiveMap);
|
||||
SCENE_DATA_API virtual void SetEmissiveIntensity(float emissiveIntensity);
|
||||
SCENE_DATA_API virtual void SetUseAOMap(bool useAOMap);
|
||||
SCENE_DATA_API virtual void SetUseColorMap(AZStd::optional<bool> useColorMap);
|
||||
SCENE_DATA_API virtual void SetBaseColor(const AZStd::optional<AZ::Vector3>& baseColor);
|
||||
SCENE_DATA_API virtual void SetUseMetallicMap(AZStd::optional<bool> useMetallicMap);
|
||||
SCENE_DATA_API virtual void SetMetallicFactor(AZStd::optional<float> metallicFactor);
|
||||
SCENE_DATA_API virtual void SetUseRoughnessMap(AZStd::optional<bool> useRoughnessMap);
|
||||
SCENE_DATA_API virtual void SetRoughnessFactor(AZStd::optional<float> roughnessFactor);
|
||||
SCENE_DATA_API virtual void SetUseEmissiveMap(AZStd::optional<bool> useEmissiveMap);
|
||||
SCENE_DATA_API virtual void SetEmissiveIntensity(AZStd::optional<float> emissiveIntensity);
|
||||
SCENE_DATA_API virtual void SetUseAOMap(AZStd::optional<bool> useAOMap);
|
||||
|
||||
|
||||
SCENE_DATA_API const AZStd::string& GetTexture(TextureMapType mapType) const override;
|
||||
@@ -67,15 +67,15 @@ namespace AZ
|
||||
SCENE_DATA_API float GetOpacity() const override;
|
||||
SCENE_DATA_API float GetShininess() const override;
|
||||
SCENE_DATA_API uint64_t GetUniqueId() const override;
|
||||
SCENE_DATA_API bool GetUseColorMap() const override;
|
||||
SCENE_DATA_API const AZ::Vector3& GetBaseColor() const override;
|
||||
SCENE_DATA_API bool GetUseMetallicMap() const override;
|
||||
SCENE_DATA_API float GetMetallicFactor() const override;
|
||||
SCENE_DATA_API bool GetUseRoughnessMap() const override;
|
||||
SCENE_DATA_API float GetRoughnessFactor() const override;
|
||||
SCENE_DATA_API bool GetUseEmissiveMap() const override;
|
||||
SCENE_DATA_API float GetEmissiveIntensity() const override;
|
||||
SCENE_DATA_API bool GetUseAOMap() const override;
|
||||
SCENE_DATA_API AZStd::optional<bool> GetUseColorMap() const override;
|
||||
SCENE_DATA_API AZStd::optional<AZ::Vector3> GetBaseColor() const override;
|
||||
SCENE_DATA_API AZStd::optional<bool> GetUseMetallicMap() const override;
|
||||
SCENE_DATA_API AZStd::optional<float> GetMetallicFactor() const override;
|
||||
SCENE_DATA_API AZStd::optional<bool> GetUseRoughnessMap() const override;
|
||||
SCENE_DATA_API AZStd::optional<float> GetRoughnessFactor() const override;
|
||||
SCENE_DATA_API AZStd::optional<bool> GetUseEmissiveMap() const override;
|
||||
SCENE_DATA_API AZStd::optional<float> GetEmissiveIntensity() const override;
|
||||
SCENE_DATA_API AZStd::optional<bool> GetUseAOMap() const override;
|
||||
|
||||
static void Reflect(ReflectContext* context);
|
||||
|
||||
@@ -85,18 +85,18 @@ namespace AZ
|
||||
AZ::Vector3 m_diffuseColor;
|
||||
AZ::Vector3 m_specularColor;
|
||||
AZ::Vector3 m_emissiveColor;
|
||||
AZ::Vector3 m_baseColor;
|
||||
AZStd::optional<AZ::Vector3> m_baseColor;
|
||||
float m_opacity;
|
||||
float m_shininess;
|
||||
float m_metallicFactor = 0.0f;
|
||||
float m_roughnessFactor = 0.0f;
|
||||
float m_emissiveIntensity = 0.0f;
|
||||
AZStd::optional<float> m_metallicFactor = AZStd::nullopt;
|
||||
AZStd::optional<float> m_roughnessFactor = AZStd::nullopt;
|
||||
AZStd::optional<float> m_emissiveIntensity = AZStd::nullopt;
|
||||
|
||||
bool m_useColorMap = false;
|
||||
bool m_useMetallicMap = false;
|
||||
bool m_useRoughnessMap = false;
|
||||
bool m_useEmissiveMap = false;
|
||||
bool m_useAOMap = false;
|
||||
AZStd::optional<bool> m_useColorMap = AZStd::nullopt;
|
||||
AZStd::optional<bool> m_useMetallicMap = AZStd::nullopt;
|
||||
AZStd::optional<bool> m_useRoughnessMap = AZStd::nullopt;
|
||||
AZStd::optional<bool> m_useEmissiveMap = AZStd::nullopt;
|
||||
AZStd::optional<bool> m_useAOMap = AZStd::nullopt;
|
||||
|
||||
bool m_isNoDraw;
|
||||
|
||||
|
||||
@@ -66,6 +66,19 @@ namespace AZ
|
||||
m_vertexLinks[vertexIndex].push_back(link);
|
||||
}
|
||||
|
||||
bool CompareLinks(const SceneAPI::DataTypes::ISkinWeightData::Link& left, const SceneAPI::DataTypes::ISkinWeightData::Link& right)
|
||||
{
|
||||
// sort highest to lowest
|
||||
return left.weight >= right.weight;
|
||||
}
|
||||
|
||||
void SkinWeightData::AddAndSortLink(size_t vertexIndex, const SceneAPI::DataTypes::ISkinWeightData::Link& link)
|
||||
{
|
||||
AZ_Assert(vertexIndex < m_vertexLinks.size(), "Invalid vertex index %i for skin weight data links.", vertexIndex);
|
||||
m_vertexLinks[vertexIndex].insert(
|
||||
AZStd::lower_bound(m_vertexLinks[vertexIndex].begin(), m_vertexLinks[vertexIndex].end(), link, CompareLinks), link);
|
||||
}
|
||||
|
||||
int SkinWeightData::GetBoneId(const AZStd::string& boneName)
|
||||
{
|
||||
if (m_boneNameIdMap.find(boneName) == m_boneNameIdMap.end())
|
||||
|
||||
@@ -41,6 +41,7 @@ namespace AZ
|
||||
|
||||
SCENE_DATA_API void ResizeContainerSpace(size_t size);
|
||||
SCENE_DATA_API void AppendLink(size_t vertexIndex, const SceneAPI::DataTypes::ISkinWeightData::Link& link);
|
||||
SCENE_DATA_API void AddAndSortLink(size_t vertexIndex, const SceneAPI::DataTypes::ISkinWeightData::Link& link);
|
||||
|
||||
SCENE_DATA_API int GetBoneId(const AZStd::string& boneName);
|
||||
|
||||
|
||||
@@ -14,4 +14,5 @@ set(FILES
|
||||
Tests/GraphData/MeshDataTests.cpp
|
||||
Tests/GraphData/MeshDataPrimitiveUtilsTests.cpp
|
||||
Tests/GraphData/GraphDataBehaviorTests.cpp
|
||||
Tests/SceneManifest/SceneManifestRuleTests.cpp
|
||||
)
|
||||
|
||||
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
* 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 <AzTest/AzTest.h>
|
||||
|
||||
#include <SceneAPI/SceneCore/Containers/SceneManifest.h>
|
||||
#include <SceneAPI/SceneData/ReflectionRegistrar.h>
|
||||
#include <SceneAPI/SceneData/Rules/CommentRule.h>
|
||||
|
||||
#include <AzCore/Name/NameDictionary.h>
|
||||
#include <AzCore/RTTI/BehaviorContext.h>
|
||||
#include <AzCore/RTTI/ReflectionManager.h>
|
||||
#include <AzCore/Serialization/Json/RegistrationContext.h>
|
||||
#include <AzCore/Serialization/Json/JsonSystemComponent.h>
|
||||
#include <AzCore/std/smart_ptr/make_shared.h>
|
||||
#include <AzCore/std/smart_ptr/shared_ptr.h>
|
||||
#include <AzCore/UnitTest/TestTypes.h>
|
||||
#include <AzFramework/FileFunc/FileFunc.h>
|
||||
#include <AzCore/Math/Quaternion.h>
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
namespace SceneAPI
|
||||
{
|
||||
class MockRotationRule final
|
||||
: public DataTypes::IManifestObject
|
||||
{
|
||||
public:
|
||||
AZ_RTTI(MockRotationRule, "{90AECE4A-58D4-411C-9CDE-59B54C59354F}", DataTypes::IManifestObject);
|
||||
AZ_CLASS_ALLOCATOR(MockRotationRule, AZ::SystemAllocator, 0);
|
||||
|
||||
static void Reflect(ReflectContext* context)
|
||||
{
|
||||
AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
|
||||
if (serializeContext)
|
||||
{
|
||||
serializeContext->Class<MockRotationRule, DataTypes::IManifestObject>()
|
||||
->Version(1)
|
||||
->Field("rotation", &MockRotationRule::m_rotation);
|
||||
}
|
||||
}
|
||||
|
||||
AZ::Quaternion m_rotation = AZ::Quaternion::CreateIdentity();
|
||||
};
|
||||
|
||||
namespace Containers
|
||||
{
|
||||
class SceneManifestContainer
|
||||
{
|
||||
public:
|
||||
static AZ::Outcome<rapidjson::Document, AZStd::string> SaveToJsonDocumentHelper(
|
||||
SceneAPI::Containers::SceneManifest& manifest,
|
||||
SerializeContext* context,
|
||||
JsonRegistrationContext* registrationContext)
|
||||
{
|
||||
return manifest.SaveToJsonDocument(context, registrationContext);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
namespace SceneData
|
||||
{
|
||||
class SceneManifest_JSON
|
||||
: public UnitTest::AllocatorsFixture
|
||||
{
|
||||
public:
|
||||
AZStd::unique_ptr<AZ::SerializeContext> m_serializeContext;
|
||||
AZStd::unique_ptr<AZ::JsonRegistrationContext> m_jsonRegistrationContext;
|
||||
AZStd::unique_ptr<JsonSystemComponent> m_jsonSystemComponent;
|
||||
|
||||
void SetUp() override
|
||||
{
|
||||
UnitTest::AllocatorsFixture::SetUp();
|
||||
AZ::NameDictionary::Create();
|
||||
|
||||
m_serializeContext = AZStd::make_unique<AZ::SerializeContext>();
|
||||
AZ::SceneAPI::RegisterDataTypeReflection(m_serializeContext.get());
|
||||
AZ::SceneAPI::Containers::SceneManifest::Reflect(m_serializeContext.get());
|
||||
AZ::SceneAPI::DataTypes::IManifestObject::Reflect(m_serializeContext.get());
|
||||
AZ::SceneAPI::MockRotationRule::Reflect(m_serializeContext.get());
|
||||
|
||||
m_jsonRegistrationContext = AZStd::make_unique<AZ::JsonRegistrationContext>();
|
||||
|
||||
m_jsonSystemComponent = AZStd::make_unique<JsonSystemComponent>();
|
||||
m_jsonSystemComponent->Reflect(m_jsonRegistrationContext.get());
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
m_jsonRegistrationContext->EnableRemoveReflection();
|
||||
m_jsonSystemComponent->Reflect(m_jsonRegistrationContext.get());
|
||||
m_jsonRegistrationContext->DisableRemoveReflection();
|
||||
|
||||
m_serializeContext.reset();
|
||||
m_jsonRegistrationContext.reset();
|
||||
m_jsonSystemComponent.reset();
|
||||
|
||||
AZ::NameDictionary::Destroy();
|
||||
UnitTest::AllocatorsFixture::TearDown();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(SceneManifest_JSON, LoadFromString_BlankManifest_HasDefaultParts)
|
||||
{
|
||||
SceneAPI::Containers::SceneManifest sceneManifest;
|
||||
sceneManifest.LoadFromString("{}", m_serializeContext.get(), m_jsonRegistrationContext.get(), false);
|
||||
}
|
||||
|
||||
TEST_F(SceneManifest_JSON, LoadFromString_LoadRotationRuleWithQuaternion_ReturnsTrue)
|
||||
{
|
||||
using namespace SceneAPI::Containers;
|
||||
SceneManifest sceneManifest;
|
||||
|
||||
auto anglesInDegrees = AZ::Vector3(45.0f, 90.0f, 45.0f);
|
||||
auto originRule = AZStd::make_shared<AZ::SceneAPI::MockRotationRule>();
|
||||
originRule->m_rotation = Quaternion::CreateFromEulerAnglesDegrees(anglesInDegrees);
|
||||
sceneManifest.AddEntry(originRule);
|
||||
|
||||
auto writeToJsonResult = SceneManifestContainer::SaveToJsonDocumentHelper(sceneManifest, m_serializeContext.get(), m_jsonRegistrationContext.get());
|
||||
ASSERT_TRUE(writeToJsonResult.IsSuccess());
|
||||
|
||||
AZStd::string jsonText;
|
||||
auto writeToStringResult = AzFramework::FileFunc::WriteJsonToString(writeToJsonResult.GetValue(), jsonText);
|
||||
ASSERT_TRUE(writeToStringResult.IsSuccess());
|
||||
EXPECT_THAT(jsonText.c_str(), ::testing::HasSubstr(R"("$type": "MockRotationRule")"));
|
||||
EXPECT_THAT(jsonText.c_str(), ::testing::HasSubstr(R"("rotation": [)"));
|
||||
|
||||
SceneManifest loaded;
|
||||
auto loadFromStringResult = loaded.LoadFromString(jsonText, m_serializeContext.get(), m_jsonRegistrationContext.get());
|
||||
EXPECT_TRUE(loadFromStringResult.IsSuccess());
|
||||
EXPECT_FALSE(loaded.IsEmpty());
|
||||
|
||||
ASSERT_EQ(loaded.GetEntryCount(), sceneManifest.GetEntryCount());
|
||||
}
|
||||
|
||||
TEST_F(SceneManifest_JSON, LoadFromString_LoadRotationRuleWithAnglesInDegrees_ReturnsTrue)
|
||||
{
|
||||
using namespace SceneAPI::Containers;
|
||||
|
||||
constexpr const char* jsonWithAngles = { R"JSON(
|
||||
{
|
||||
"values": [
|
||||
{
|
||||
"$type": "MockRotationRule",
|
||||
"rotation": { "yaw" : 45.0, "pitch" : 90.0, "roll" : 0.0 }
|
||||
}
|
||||
]
|
||||
})JSON"};
|
||||
|
||||
SceneManifest loaded;
|
||||
auto loadFromStringResult = loaded.LoadFromString(jsonWithAngles, m_serializeContext.get(), m_jsonRegistrationContext.get());
|
||||
EXPECT_TRUE(loadFromStringResult.IsSuccess());
|
||||
EXPECT_FALSE(loaded.IsEmpty());
|
||||
|
||||
auto writeToJsonResult =
|
||||
SceneManifestContainer::SaveToJsonDocumentHelper(loaded, m_serializeContext.get(), m_jsonRegistrationContext.get());
|
||||
ASSERT_TRUE(writeToJsonResult.IsSuccess());
|
||||
|
||||
AZStd::string jsonText;
|
||||
auto writeToStringResult = AzFramework::FileFunc::WriteJsonToString(writeToJsonResult.GetValue(), jsonText);
|
||||
ASSERT_TRUE(writeToStringResult.IsSuccess());
|
||||
EXPECT_THAT(jsonText.c_str(), ::testing::HasSubstr(R"("$type": "MockRotationRule")"));
|
||||
EXPECT_THAT(jsonText.c_str(), ::testing::HasSubstr(R"("rotation": [)"));
|
||||
EXPECT_THAT(jsonText.c_str(), ::testing::HasSubstr(R"(0.27)"));
|
||||
EXPECT_THAT(jsonText.c_str(), ::testing::HasSubstr(R"(0.65)"));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user