BsScriptCollisionData.generated.cpp 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "BsScriptCollisionData.generated.h"
  2. #include "BsMonoMethod.h"
  3. #include "BsMonoClass.h"
  4. #include "BsMonoUtil.h"
  5. #include "BsScriptGameObjectManager.h"
  6. #include "../../../bsf/Source/Foundation/bsfCore/Components/BsCCollider.h"
  7. #include "BsScriptCCollider.generated.h"
  8. #include "../../../bsf/Source/Foundation/bsfCore/Physics/BsPhysicsCommon.h"
  9. #include "BsScriptContactPoint.generated.h"
  10. namespace bs
  11. {
  12. ScriptCollisionData::ScriptCollisionData(MonoObject* managedInstance)
  13. :ScriptObject(managedInstance)
  14. { }
  15. void ScriptCollisionData::initRuntimeData()
  16. { }
  17. MonoObject*ScriptCollisionData::box(const __CollisionDataInterop& value)
  18. {
  19. return MonoUtil::box(metaData.scriptClass->_getInternalClass(), (void*)&value);
  20. }
  21. __CollisionDataInterop ScriptCollisionData::unbox(MonoObject* value)
  22. {
  23. return *(__CollisionDataInterop*)MonoUtil::unbox(value);
  24. }
  25. CollisionData ScriptCollisionData::fromInterop(const __CollisionDataInterop& value)
  26. {
  27. CollisionData output;
  28. GameObjectHandle<CCollider> veccollider[2];
  29. if(value.collider != nullptr)
  30. {
  31. ScriptArray arraycollider(value.collider);
  32. for(int i = 0; i < (int)arraycollider.size(); i++)
  33. {
  34. ScriptCColliderBase* scriptcollider;
  35. scriptcollider = (ScriptCColliderBase*)ScriptCCollider::toNative(arraycollider.get<MonoObject*>(i));
  36. if(scriptcollider != nullptr)
  37. veccollider[i] = static_object_cast<CCollider>(scriptcollider->getComponent());
  38. }
  39. }
  40. auto tmpcollider = veccollider;
  41. for(int i = 0; i < 2; ++i)
  42. output.collider[i] = tmpcollider[i];
  43. Vector<ContactPoint> veccontactPoints;
  44. if(value.contactPoints != nullptr)
  45. {
  46. ScriptArray arraycontactPoints(value.contactPoints);
  47. veccontactPoints.resize(arraycontactPoints.size());
  48. for(int i = 0; i < (int)arraycontactPoints.size(); i++)
  49. {
  50. veccontactPoints[i] = arraycontactPoints.get<ContactPoint>(i);
  51. }
  52. }
  53. output.contactPoints = veccontactPoints;
  54. return output;
  55. }
  56. __CollisionDataInterop ScriptCollisionData::toInterop(const CollisionData& value)
  57. {
  58. __CollisionDataInterop output;
  59. int arraySizecollider = 2;
  60. MonoArray* veccollider;
  61. ScriptArray arraycollider = ScriptArray::create<ScriptCCollider>(arraySizecollider);
  62. for(int i = 0; i < arraySizecollider; i++)
  63. {
  64. ScriptComponentBase* scriptcollider = nullptr;
  65. if(value.collider[i])
  66. scriptcollider = ScriptGameObjectManager::instance().getBuiltinScriptComponent(static_object_cast<Component>(value.collider[i]));
  67. if(scriptcollider != nullptr)
  68. arraycollider.set(i, scriptcollider->getManagedInstance());
  69. else
  70. arraycollider.set(i, nullptr);
  71. }
  72. veccollider = arraycollider.getInternal();
  73. output.collider = veccollider;
  74. int arraySizecontactPoints = (int)value.contactPoints.size();
  75. MonoArray* veccontactPoints;
  76. ScriptArray arraycontactPoints = ScriptArray::create<ScriptContactPoint>(arraySizecontactPoints);
  77. for(int i = 0; i < arraySizecontactPoints; i++)
  78. {
  79. arraycontactPoints.set(i, value.contactPoints[i]);
  80. }
  81. veccontactPoints = arraycontactPoints.getInternal();
  82. output.contactPoints = veccontactPoints;
  83. return output;
  84. }
  85. }