/* * 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 namespace AZ { namespace RPI { static_assert(( AZStd::is_same_v> && AZStd::is_same_v> && AZStd::is_same_v> && AZStd::is_same_v> && AZStd::is_same_v> && AZStd::is_same_v> && AZStd::is_same_v> && AZStd::is_same_v> && AZStd::is_same_v> && AZStd::is_same_v, AZStd::variant_alternative_t<9, MaterialPropertyValue::ValueType>> && AZStd::is_same_v, AZStd::variant_alternative_t<10, MaterialPropertyValue::ValueType>> && AZStd::is_same_v>), "Types must be in the order of the type ID array."); void MaterialPropertyValue::Reflect(ReflectContext* context) { if (auto* serializeContext = azrtti_cast(context)) { serializeContext->RegisterGenericType(); serializeContext->Class() ->Version(1) ->Field("Value", &MaterialPropertyValue::m_value) ; } } TypeId MaterialPropertyValue::GetTypeId() const { // Must sort in the same order defined in the variant. static const AZ::TypeId PropertyValueTypeIds[] = { azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid>(), azrtti_typeid>(), azrtti_typeid(), }; return PropertyValueTypeIds[m_value.index()]; } MaterialPropertyValue MaterialPropertyValue::FromAny(const AZStd::any& value) { MaterialPropertyValue result; if (value.empty()) { return result; } if (value.is()) { result.m_value = AZStd::any_cast(value); } else if (value.is()) { result.m_value = AZStd::any_cast(value); } else if (value.is()) { result.m_value = AZStd::any_cast(value); } else if (value.is()) { result.m_value = AZStd::any_cast(value); } else if (value.is()) { result.m_value = aznumeric_cast(AZStd::any_cast(value)); } else if (value.is()) { result.m_value = AZStd::any_cast(value); } else if (value.is()) { result.m_value = AZStd::any_cast(value); } else if (value.is()) { result.m_value = AZStd::any_cast(value); } else if (value.is()) { result.m_value = AZStd::any_cast(value); } else if (value.is>()) { result.m_value = Data::Asset( AZStd::any_cast>(value).GetId(), azrtti_typeid()); } else if (value.is>()) { result.m_value = AZStd::any_cast>(value); } else if (value.is>()) { result.m_value = AZStd::any_cast>(value); } else if (value.is()) { result.m_value = AZStd::any_cast(value); } else { AZ_Warning("MaterialPropertyValue", false, "Cannot convert any to variant. Type in any is: %s.", value.get_type_info().m_id.ToString().data()); } return result; } AZStd::any MaterialPropertyValue::ToAny(const MaterialPropertyValue& value) { AZStd::any result; if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } else if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } else if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } else if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } else if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } else if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } else if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } else if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } else if (AZStd::holds_alternative>(value.m_value)) { result = AZStd::get>(value.m_value); } else if (AZStd::holds_alternative>(value.m_value)) { result = AZStd::get>(value.m_value); } else if (AZStd::holds_alternative(value.m_value)) { result = AZStd::get(value.m_value); } return result; } } }