BsScriptHingeJoint.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 BansheeEngine
  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)
  27. {
  28. SPtr<HingeJoint> joint = HingeJoint::create();
  29. joint->_setOwner(PhysicsOwnerType::Script, instance);
  30. ScriptHingeJoint* scriptJoint = new (bs_alloc<ScriptHingeJoint>()) ScriptHingeJoint(instance, joint);
  31. }
  32. float ScriptHingeJoint::internal_GetAngle(ScriptHingeJoint* thisPtr)
  33. {
  34. return thisPtr->getHingeJoint()->getAngle().valueRadians();
  35. }
  36. float ScriptHingeJoint::internal_GetSpeed(ScriptHingeJoint* thisPtr)
  37. {
  38. return thisPtr->getHingeJoint()->getSpeed();
  39. }
  40. void ScriptHingeJoint::internal_SetLimit(ScriptHingeJoint* thisPtr, MonoObject* limit)
  41. {
  42. LimitAngularRange nativeLimit = ScriptLimitAngularRange::convert(limit);
  43. thisPtr->getHingeJoint()->setLimit(nativeLimit);
  44. }
  45. void ScriptHingeJoint::internal_SetDrive(ScriptHingeJoint* thisPtr, MonoObject* drive)
  46. {
  47. HingeJoint::Drive nativeDrive = ScriptHingeJointDrive::convert(drive);
  48. thisPtr->getHingeJoint()->setDrive(nativeDrive);
  49. }
  50. void ScriptHingeJoint::internal_SetEnableLimit(ScriptHingeJoint* thisPtr, bool value)
  51. {
  52. thisPtr->getHingeJoint()->setFlag(HingeJoint::Flag::Limit, value);
  53. }
  54. void ScriptHingeJoint::internal_SetEnableDrive(ScriptHingeJoint* thisPtr, bool value)
  55. {
  56. thisPtr->getHingeJoint()->setFlag(HingeJoint::Flag::Drive, value);
  57. }
  58. }