BsScriptMeshCollider.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptMeshCollider.h"
  4. #include "BsMeshCollider.h"
  5. #include "BsScriptPhysicsMesh.h"
  6. #include "BsScriptResourceManager.h"
  7. namespace BansheeEngine
  8. {
  9. ScriptMeshCollider::ScriptMeshCollider(MonoObject* instance, const SPtr<Collider>& collider)
  10. :TScriptCollider(instance, collider)
  11. {
  12. }
  13. void ScriptMeshCollider::initRuntimeData()
  14. {
  15. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptMeshCollider::internal_CreateInstance);
  16. metaData.scriptClass->addInternalCall("Internal_SetMesh", &ScriptMeshCollider::internal_SetMesh);
  17. metaData.scriptClass->addInternalCall("Internal_GetMesh", &ScriptMeshCollider::internal_GetMesh);
  18. }
  19. MeshCollider* ScriptMeshCollider::getMeshCollider() const
  20. {
  21. return static_cast<MeshCollider*>(mCollider.get());
  22. }
  23. void ScriptMeshCollider::internal_CreateInstance(MonoObject* instance)
  24. {
  25. SPtr<MeshCollider> collider = MeshCollider::create();
  26. collider->_setOwner(PhysicsOwnerType::Script, instance);
  27. ScriptMeshCollider* scriptCollider = new (bs_alloc<ScriptMeshCollider>()) ScriptMeshCollider(instance, collider);
  28. }
  29. void ScriptMeshCollider::internal_SetMesh(ScriptMeshCollider* thisPtr, ScriptPhysicsMesh* scriptMesh)
  30. {
  31. HPhysicsMesh mesh;
  32. if (scriptMesh != nullptr)
  33. mesh = scriptMesh->getHandle();
  34. thisPtr->getMeshCollider()->setMesh(mesh);
  35. }
  36. MonoObject* ScriptMeshCollider::internal_GetMesh(ScriptMeshCollider* thisPtr)
  37. {
  38. HPhysicsMesh mesh = thisPtr->getMeshCollider()->getMesh();
  39. if (mesh == nullptr)
  40. return nullptr;
  41. ScriptPhysicsMesh* scriptMesh;
  42. ScriptResourceManager::instance().getScriptResource(mesh, &scriptMesh, true);
  43. return scriptMesh->getManagedInstance();
  44. }
  45. }