BsScriptRigidbody.h 5.8 KB

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