2
0

BsScriptSliderJoint.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptSliderJoint.h"
  4. #include "BsScriptJointCommon.h"
  5. #include "BsSliderJoint.h"
  6. namespace BansheeEngine
  7. {
  8. ScriptSliderJoint::ScriptSliderJoint(MonoObject* instance, const SPtr<Joint>& joint)
  9. :TScriptJoint(instance, joint)
  10. {
  11. }
  12. void ScriptSliderJoint::initRuntimeData()
  13. {
  14. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptSliderJoint::internal_CreateInstance);
  15. metaData.scriptClass->addInternalCall("Internal_GetPosition", &ScriptSliderJoint::internal_GetPosition);
  16. metaData.scriptClass->addInternalCall("Internal_GetSpeed", &ScriptSliderJoint::internal_GetSpeed);
  17. metaData.scriptClass->addInternalCall("Internal_SetLimit", &ScriptSliderJoint::internal_SetLimit);
  18. metaData.scriptClass->addInternalCall("Internal_SetEnableLimit", &ScriptSliderJoint::internal_SetEnableLimit);
  19. }
  20. SliderJoint* ScriptSliderJoint::getSliderJoint() const
  21. {
  22. return static_cast<SliderJoint*>(mJoint.get());
  23. }
  24. void ScriptSliderJoint::internal_CreateInstance(MonoObject* instance, ScriptCommonJointData* commonData, ScriptSliderJointData* data)
  25. {
  26. SLIDER_JOINT_DESC desc;
  27. commonData->toDesc(desc);
  28. data->toDesc(desc);
  29. SPtr<SliderJoint> joint = SliderJoint::create(desc);
  30. joint->_setOwner(PhysicsOwnerType::Script, instance);
  31. ScriptSliderJoint* scriptJoint = new (bs_alloc<ScriptSliderJoint>()) ScriptSliderJoint(instance, joint);
  32. }
  33. float ScriptSliderJoint::internal_GetPosition(ScriptSliderJoint* thisPtr)
  34. {
  35. return thisPtr->getSliderJoint()->getPosition();
  36. }
  37. float ScriptSliderJoint::internal_GetSpeed(ScriptSliderJoint* thisPtr)
  38. {
  39. return thisPtr->getSliderJoint()->getSpeed();
  40. }
  41. void ScriptSliderJoint::internal_SetLimit(ScriptSliderJoint* thisPtr, MonoObject* limit)
  42. {
  43. LimitLinearRange nativeLimit = ScriptLimitLinearRange::convert(limit);
  44. thisPtr->getSliderJoint()->setLimit(nativeLimit);
  45. }
  46. void ScriptSliderJoint::internal_SetEnableLimit(ScriptSliderJoint* thisPtr, bool enable)
  47. {
  48. thisPtr->getSliderJoint()->setFlag(SliderJoint::Flag::Limit, enable);
  49. }
  50. void ScriptSliderJointData::toDesc(SLIDER_JOINT_DESC& desc) const
  51. {
  52. desc.limit = ScriptLimitLinearRange::convert(limit);
  53. desc.flag = enableLimit ? SliderJoint::Flag::Limit : (SliderJoint::Flag)0;
  54. }
  55. }