BsScriptCollisionData.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptCollisionData.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsCollider.h"
  8. namespace BansheeEngine
  9. {
  10. ScriptCollisionDataHelper::ScriptCollisionDataHelper(MonoObject* instance)
  11. :ScriptObject(instance)
  12. { }
  13. void ScriptCollisionDataHelper::initRuntimeData()
  14. { }
  15. ScriptCollisionData ScriptCollisionDataHelper::create(const CollisionData& data)
  16. {
  17. ScriptCollisionData output;
  18. if (data.collidersRaw[0] != nullptr)
  19. output.colliderA = (MonoObject*)data.collidersRaw[0]->_getOwner(PhysicsOwnerType::Script);
  20. else
  21. output.colliderA = nullptr;
  22. if (data.collidersRaw[1] != nullptr)
  23. output.colliderB = (MonoObject*)data.collidersRaw[1]->_getOwner(PhysicsOwnerType::Script);
  24. else
  25. output.colliderB = nullptr;
  26. UINT32 numContactPoints = (UINT32)data.contactPoints.size();
  27. ScriptArray contactPoints = ScriptArray::create<ContactPoint>(numContactPoints);
  28. for (UINT32 i = 0; i < numContactPoints; i++)
  29. contactPoints.set(i, ScriptContactPointHelper::box(data.contactPoints[i]));
  30. output.contactPoints = contactPoints.getInternal();
  31. return output;
  32. }
  33. MonoObject* ScriptCollisionDataHelper::box(const ScriptCollisionData& value)
  34. {
  35. // We're casting away const but it's fine since structs are passed by value anyway
  36. return mono_value_box(MonoManager::instance().getDomain(),
  37. metaData.scriptClass->_getInternalClass(), (void*)&value);
  38. }
  39. ScriptCollisionData ScriptCollisionDataHelper::unbox(MonoObject* obj)
  40. {
  41. return *(ScriptCollisionData*)mono_object_unbox(obj);
  42. }
  43. ScriptContactPointHelper::ScriptContactPointHelper(MonoObject* instance)
  44. :ScriptObject(instance)
  45. { }
  46. void ScriptContactPointHelper::initRuntimeData()
  47. { }
  48. MonoObject* ScriptContactPointHelper::box(const ContactPoint& value)
  49. {
  50. // We're casting away const but it's fine since structs are passed by value anyway
  51. return mono_value_box(MonoManager::instance().getDomain(),
  52. metaData.scriptClass->_getInternalClass(), (void*)&value);
  53. }
  54. ContactPoint ScriptContactPointHelper::unbox(MonoObject* obj)
  55. {
  56. return *(ContactPoint*)mono_object_unbox(obj);
  57. }
  58. }