//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// #pragma once #include "BsCorePrerequisites.h" #include "BsRTTIType.h" #include "BsPhysicsMesh.h" #include "BsPhysics.h" namespace BansheeEngine { /** @cond RTTI */ /** @addtogroup RTTI-Impl-Core * @{ */ class BS_CORE_EXPORT PhysicsMeshRTTI : public RTTIType { private: BS_BEGIN_RTTI_MEMBERS BS_RTTI_MEMBER_REFLPTR(mInternal, 0) BS_END_RTTI_MEMBERS public: PhysicsMeshRTTI() :mInitMembers(this) { } void onDeserializationEnded(IReflectable* obj, const UnorderedMap& params) override { PhysicsMesh* mesh = static_cast(obj); mesh->initialize(); } const String& getRTTIName() override { static String name = "PhysicsMesh"; return name; } UINT32 getRTTIId() override { return TID_PhysicsMesh; } SPtr newRTTIObject() override { SPtr mesh = gPhysics().createMesh(nullptr, PhysicsMeshType::Convex); mesh->_setThisPtr(mesh); return mesh; } }; class BS_CORE_EXPORT FPhysicsMeshRTTI : public RTTIType { private: BS_BEGIN_RTTI_MEMBERS BS_RTTI_MEMBER_PLAIN(mType, 0) BS_END_RTTI_MEMBERS public: FPhysicsMeshRTTI() :mInitMembers(this) { } const String& getRTTIName() override { static String name = "FPhysicsMesh"; return name; } UINT32 getRTTIId() override { return TID_FPhysicsMesh; } SPtr newRTTIObject() override { BS_EXCEPT(InternalErrorException, "Cannot instantiate an abstract class."); return nullptr; } }; /** @} */ /** @endcond */ }