1/* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15#include <PropertyTools/core_metadata.inl> 16 17#include <core/property/scoped_handle.h> 18 19#include <meta/ext/engine/internal_access.h> 20#include <meta/interface/engine/intf_engine_data.h> 21#include <meta/interface/engine/intf_engine_value.h> 22#include <meta/interface/intf_object_registry.h> 23 24META_BEGIN_NAMESPACE() 25 26// clang-format off 27using SingleAndArrayTypes = TypeList< 28 bool, 29 int8_t, 30 int16_t, 31 int32_t, 32 int64_t, 33 uint8_t, 34 uint16_t, 35 uint32_t, 36 uint64_t, 37 float, 38 double, 39#ifdef __APPLE__ 40 size_t, 41#endif 42 BASE_NS::Math::Vec2, 43 BASE_NS::Math::Vec3, 44 BASE_NS::Math::Vec4, 45 BASE_NS::Math::UVec2, 46 BASE_NS::Math::UVec3, 47 BASE_NS::Math::UVec4, 48 BASE_NS::Math::IVec2, 49 BASE_NS::Math::IVec3, 50 BASE_NS::Math::IVec4, 51 BASE_NS::Math::Quat, 52 BASE_NS::Math::Mat3X3, 53 BASE_NS::Math::Mat4X4, 54 BASE_NS::Uid, 55 CORE_NS::Entity, 56 CORE_NS::EntityReference, 57 BASE_NS::string, 58 CORE_NS::IPropertyHandle* 59 >; 60using VectorTypes = TypeList< 61 BASE_NS::vector<float>, 62 BASE_NS::vector<BASE_NS::Math::Mat4X4>, 63 BASE_NS::vector<CORE_NS::EntityReference> 64 >; 65// clang-format on 66 67namespace Internal { 68namespace { 69 70template<bool ArrayTypes, typename... List> 71void RegisterBasicEngineTypes(IEngineData& d, TypeList<List...>) 72{ 73 (d.RegisterInternalValueAccess(MetaType<List>::coreType, CreateShared<EngineInternalValueAccess<List>>()), ...); 74 if constexpr (ArrayTypes) { 75 (d.RegisterInternalValueAccess( 76 MetaType<List[]>::coreType, CreateShared<EngineInternalArrayValueAccess<List>>()), 77 ...); 78 } 79} 80 81template<bool ArrayTypes, typename... List> 82void UnRegisterBasicEngineTypes(IEngineData& d, TypeList<List...>) 83{ 84 (d.UnregisterInternalValueAccess(MetaType<List>::coreType), ...); 85 if constexpr (ArrayTypes) { 86 (d.UnregisterInternalValueAccess(MetaType<List[]>::coreType), ...); 87 } 88} 89} // namespace 90 91void RegisterEngineTypes(IObjectRegistry& registry) 92{ 93 auto& pr = registry.GetEngineData(); 94 RegisterBasicEngineTypes<true>(pr, SingleAndArrayTypes {}); 95 RegisterBasicEngineTypes<false>(pr, VectorTypes {}); 96} 97 98void UnRegisterEngineTypes(IObjectRegistry& registry) 99{ 100 auto& pr = registry.GetEngineData(); 101 UnRegisterBasicEngineTypes<false>(pr, VectorTypes {}); 102 UnRegisterBasicEngineTypes<true>(pr, SingleAndArrayTypes {}); 103} 104 105} // namespace Internal 106META_END_NAMESPACE() 107