BsScriptRigidbody.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsScriptEnginePrerequisites.h"
  5. #include "BsScriptObject.h"
  6. #include "BsRigidbody.h"
  7. namespace BansheeEngine
  8. {
  9. /** @addtogroup ScriptInteropEngine
  10. * @{
  11. */
  12. /** Interop class between C++ & CLR for Rigidbody. */
  13. class BS_SCR_BE_EXPORT ScriptRigidbody : public ScriptObject<ScriptRigidbody>
  14. {
  15. public:
  16. SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "NativeRigidbody")
  17. /** Returns the native Rigidbody object. */
  18. Rigidbody* getRigidbody() const { return mRigidbody.get(); }
  19. private:
  20. friend class ScriptColliderBase;
  21. ScriptRigidbody(MonoObject* instance, const SPtr<Rigidbody>& body);
  22. /** Triggered when some object starts interacting with the rigidbody. */
  23. static void onCollisionBegin(MonoObject* instance, const CollisionData& collisionData);
  24. /** Triggered when some object remains interacting with the rigidbody throughout a frame. */
  25. static void onCollisionStay(MonoObject* instance, const CollisionData& collisionData);
  26. /** Triggered when some object ends interacting with the rigidbody. */
  27. static void onCollisionEnd(MonoObject* instance, const CollisionData& collisionData);
  28. SPtr<Rigidbody> mRigidbody;
  29. /************************************************************************/
  30. /* CLR HOOKS */
  31. /************************************************************************/
  32. static void internal_CreateInstance(MonoObject* instance, ScriptSceneObject* linkedSO);
  33. static void internal_Destroy(ScriptRigidbody* thisPtr);
  34. static void internal_Move(ScriptRigidbody* thisPtr, Vector3* position);
  35. static void internal_Rotate(ScriptRigidbody* thisPtr, Quaternion* rotation);
  36. static void internal_GetPosition(ScriptRigidbody* thisPtr, Vector3* position);
  37. static void internal_GetRotation(ScriptRigidbody* thisPtr, Quaternion* rotation);
  38. static void internal_SetTransform(ScriptRigidbody* thisPtr, Vector3* pos, Quaternion* rot);
  39. static void internal_SetMass(ScriptRigidbody* thisPtr, float mass);
  40. static float internal_GetMass(ScriptRigidbody* thisPtr);
  41. static void internal_SetIsKinematic(ScriptRigidbody* thisPtr, bool kinematic);
  42. static bool internal_GetIsKinematic(ScriptRigidbody* thisPtr);
  43. static bool internal_IsSleeping(ScriptRigidbody* thisPtr);
  44. static void internal_Sleep(ScriptRigidbody* thisPtr);
  45. static void internal_WakeUp(ScriptRigidbody* thisPtr);
  46. static void internal_SetSleepThreshold(ScriptRigidbody* thisPtr, float threshold);
  47. static float internal_GetSleepThreshold(ScriptRigidbody* thisPtr);
  48. static void internal_SetUseGravity(ScriptRigidbody* thisPtr, bool gravity);
  49. static bool internal_GetUseGravity(ScriptRigidbody* thisPtr);
  50. static void internal_SetVelocity(ScriptRigidbody* thisPtr, Vector3* velocity);
  51. static void internal_GetVelocity(ScriptRigidbody* thisPtr, Vector3* velocity);
  52. static void internal_SetAngularVelocity(ScriptRigidbody* thisPtr, Vector3* velocity);
  53. static void internal_GetAngularVelocity(ScriptRigidbody* thisPtr, Vector3* velocity);
  54. static void internal_SetDrag(ScriptRigidbody* thisPtr, float drag);
  55. static float internal_GetDrag(ScriptRigidbody* thisPtr);
  56. static void internal_SetAngularDrag(ScriptRigidbody* thisPtr, float drag);
  57. static float internal_GetAngularDrag(ScriptRigidbody* thisPtr);
  58. static void internal_SetInertiaTensor(ScriptRigidbody* thisPtr, Vector3* tensor);
  59. static void internal_GetInertiaTensor(ScriptRigidbody* thisPtr, Vector3* tensor);
  60. static void internal_SetMaxAngularVelocity(ScriptRigidbody* thisPtr, float maxVelocity);
  61. static float internal_GetMaxAngularVelocity(ScriptRigidbody* thisPtr);
  62. static void internal_SetCenterOfMass(ScriptRigidbody* thisPtr, Vector3* position, Quaternion* rotation);
  63. static void internal_GetCenterOfMassPosition(ScriptRigidbody* thisPtr, Vector3* position);
  64. static void internal_GetCenterOfMassRotation(ScriptRigidbody* thisPtr, Quaternion* rotation);
  65. static void internal_SetPositionSolverCount(ScriptRigidbody* thisPtr, UINT32 count);
  66. static UINT32 internal_GetPositionSolverCount(ScriptRigidbody* thisPtr);
  67. static void internal_SetVelocitySolverCount(ScriptRigidbody* thisPtr, UINT32 count);
  68. static UINT32 internal_GetVelocitySolverCount(ScriptRigidbody* thisPtr);
  69. static void internal_SetFlags(ScriptRigidbody* thisPtr, Rigidbody::Flag flags);
  70. static Rigidbody::Flag internal_GetFlags(ScriptRigidbody* thisPtr);
  71. static void internal_AddForce(ScriptRigidbody* thisPtr, Vector3* force, ForceMode mode);
  72. static void internal_AddTorque(ScriptRigidbody* thisPtr, Vector3* torque, ForceMode mode);
  73. static void internal_AddForceAtPoint(ScriptRigidbody* thisPtr, Vector3* force, Vector3* position, PointForceMode mode);
  74. static void internal_GetVelocityAtPoint(ScriptRigidbody* thisPtr, Vector3* point, Vector3* velocity);
  75. static void internal_AddCollider(ScriptRigidbody* thisPtr, ScriptColliderBase* collider);
  76. static void internal_RemoveCollider(ScriptRigidbody* thisPtr, ScriptColliderBase* collider);
  77. static void internal_RemoveColliders(ScriptRigidbody* thisPtr);
  78. static void internal_UpdateMassDistribution(ScriptRigidbody* thisPtr);
  79. typedef void(__stdcall *OnCollisionThunkDef) (MonoObject*, MonoObject*, MonoException**);
  80. static OnCollisionThunkDef onCollisionBeginThunk;
  81. static OnCollisionThunkDef onCollisionStayThunk;
  82. static OnCollisionThunkDef onCollisionEndThunk;
  83. };
  84. /** @} */
  85. }