BsScriptSphericalJoint.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptSphericalJoint.h"
  4. #include "BsScriptJointCommon.h"
  5. #include "BsSphericalJoint.h"
  6. namespace BansheeEngine
  7. {
  8. ScriptSphericalJoint::ScriptSphericalJoint(MonoObject* instance, const SPtr<Joint>& joint)
  9. :TScriptJoint(instance, joint)
  10. {
  11. }
  12. void ScriptSphericalJoint::initRuntimeData()
  13. {
  14. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptSphericalJoint::internal_CreateInstance);
  15. metaData.scriptClass->addInternalCall("Internal_SetLimit", &ScriptSphericalJoint::internal_SetLimit);
  16. metaData.scriptClass->addInternalCall("Internal_SetEnableLimit", &ScriptSphericalJoint::internal_SetEnableLimit);
  17. }
  18. SphericalJoint* ScriptSphericalJoint::getSphericalJoint() const
  19. {
  20. return static_cast<SphericalJoint*>(mJoint.get());
  21. }
  22. void ScriptSphericalJoint::internal_CreateInstance(MonoObject* instance, ScriptCommonJointData* commonData, ScriptSphericalJointData* data)
  23. {
  24. SPHERICAL_JOINT_DESC desc;
  25. commonData->toDesc(desc);
  26. data->toDesc(desc);
  27. SPtr<SphericalJoint> joint = SphericalJoint::create(desc);
  28. joint->_setOwner(PhysicsOwnerType::Script, instance);
  29. new (bs_alloc<ScriptSphericalJoint>()) ScriptSphericalJoint(instance, joint);
  30. }
  31. void ScriptSphericalJoint::internal_SetLimit(ScriptSphericalJoint* thisPtr, MonoObject* limit)
  32. {
  33. LimitConeRange nativeLimit = ScriptLimitConeRange::convert(limit);
  34. thisPtr->getSphericalJoint()->setLimit(nativeLimit);
  35. }
  36. void ScriptSphericalJoint::internal_SetEnableLimit(ScriptSphericalJoint* thisPtr, bool enable)
  37. {
  38. thisPtr->getSphericalJoint()->setFlag(SphericalJoint::Flag::Limit, enable);
  39. }
  40. void ScriptSphericalJointData::toDesc(SPHERICAL_JOINT_DESC& desc) const
  41. {
  42. desc.limit = ScriptLimitConeRange::convert(limit);
  43. desc.flag = enableLimit ? SphericalJoint::Flag::Limit : (SphericalJoint::Flag)0;
  44. }
  45. }