BsScriptCollisionData.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 bs
  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<ScriptContactPointHelper>(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 MonoUtil::box(metaData.scriptClass->_getInternalClass(), (void*)&value);
  37. }
  38. ScriptCollisionData ScriptCollisionDataHelper::unbox(MonoObject* obj)
  39. {
  40. return *(ScriptCollisionData*)MonoUtil::unbox(obj);
  41. }
  42. ScriptContactPointHelper::ScriptContactPointHelper(MonoObject* instance)
  43. :ScriptObject(instance)
  44. { }
  45. void ScriptContactPointHelper::initRuntimeData()
  46. { }
  47. MonoObject* ScriptContactPointHelper::box(const ContactPoint& value)
  48. {
  49. // We're casting away const but it's fine since structs are passed by value anyway
  50. return MonoUtil::box(metaData.scriptClass->_getInternalClass(), (void*)&value);
  51. }
  52. ContactPoint ScriptContactPointHelper::unbox(MonoObject* obj)
  53. {
  54. return *(ContactPoint*)MonoUtil::unbox(obj);
  55. }
  56. }