BsScriptHingeJoint.cpp 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptHingeJoint.h"
  4. #include "BsHingeJoint.h"
  5. #include "BsScriptJointCommon.h"
  6. namespace bs
  7. {
  8. ScriptHingeJoint::ScriptHingeJoint(MonoObject* instance, const SPtr<Joint>& joint)
  9. :TScriptJoint(instance, joint)
  10. {
  11. }
  12. void ScriptHingeJoint::initRuntimeData()
  13. {
  14. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptHingeJoint::internal_CreateInstance);
  15. metaData.scriptClass->addInternalCall("Internal_GetAngle", &ScriptHingeJoint::internal_GetAngle);
  16. metaData.scriptClass->addInternalCall("Internal_GetSpeed", &ScriptHingeJoint::internal_GetSpeed);
  17. metaData.scriptClass->addInternalCall("Internal_SetLimit", &ScriptHingeJoint::internal_SetLimit);
  18. metaData.scriptClass->addInternalCall("Internal_SetDrive", &ScriptHingeJoint::internal_SetDrive);
  19. metaData.scriptClass->addInternalCall("Internal_SetEnableLimit", &ScriptHingeJoint::internal_SetEnableLimit);
  20. metaData.scriptClass->addInternalCall("Internal_SetEnableDrive", &ScriptHingeJoint::internal_SetEnableDrive);
  21. }
  22. HingeJoint* ScriptHingeJoint::getHingeJoint() const
  23. {
  24. return static_cast<HingeJoint*>(mJoint.get());
  25. }
  26. void ScriptHingeJoint::internal_CreateInstance(MonoObject* instance, ScriptCommonJointData* commonData, ScriptHingeJointData* data)
  27. {
  28. HINGE_JOINT_DESC desc;
  29. commonData->toDesc(desc);
  30. data->toDesc(desc);
  31. SPtr<HingeJoint> joint = HingeJoint::create(desc);
  32. joint->_setOwner(PhysicsOwnerType::Script, instance);
  33. new (bs_alloc<ScriptHingeJoint>()) ScriptHingeJoint(instance, joint);
  34. }
  35. float ScriptHingeJoint::internal_GetAngle(ScriptHingeJoint* thisPtr)
  36. {
  37. return thisPtr->getHingeJoint()->getAngle().valueRadians();
  38. }
  39. float ScriptHingeJoint::internal_GetSpeed(ScriptHingeJoint* thisPtr)
  40. {
  41. return thisPtr->getHingeJoint()->getSpeed();
  42. }
  43. void ScriptHingeJoint::internal_SetLimit(ScriptHingeJoint* thisPtr, MonoObject* limit)
  44. {
  45. LimitAngularRange nativeLimit = ScriptLimitAngularRange::convert(limit);
  46. thisPtr->getHingeJoint()->setLimit(nativeLimit);
  47. }
  48. void ScriptHingeJoint::internal_SetDrive(ScriptHingeJoint* thisPtr, MonoObject* drive)
  49. {
  50. HingeJoint::Drive nativeDrive = ScriptHingeJointDrive::convert(drive);
  51. thisPtr->getHingeJoint()->setDrive(nativeDrive);
  52. }
  53. void ScriptHingeJoint::internal_SetEnableLimit(ScriptHingeJoint* thisPtr, bool value)
  54. {
  55. thisPtr->getHingeJoint()->setFlag(HingeJoint::Flag::Limit, value);
  56. }
  57. void ScriptHingeJoint::internal_SetEnableDrive(ScriptHingeJoint* thisPtr, bool value)
  58. {
  59. thisPtr->getHingeJoint()->setFlag(HingeJoint::Flag::Drive, value);
  60. }
  61. void ScriptHingeJointData::toDesc(HINGE_JOINT_DESC& desc) const
  62. {
  63. desc.limit = ScriptLimitAngularRange::convert(limit);
  64. desc.drive = ScriptHingeJointDrive::convert(drive);
  65. desc.flag = flags;
  66. }
  67. }