BsScriptJoint.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 "BsJoint.h"
  7. namespace BansheeEngine
  8. {
  9. class ScriptJoint;
  10. /** Base class for all Joint interop objects. */
  11. class BS_SCR_BE_EXPORT ScriptJointBase : public ScriptObjectBase
  12. {
  13. public:
  14. /** Returns the native Joint object. */
  15. virtual Joint* getJoint() const { return mJoint.get(); };
  16. protected:
  17. friend ScriptJoint;
  18. ScriptJointBase(MonoObject* instance);
  19. virtual ~ScriptJointBase() {}
  20. /** Initializes the interop object with a native joint. Must be called right after construction. */
  21. void initialize(const SPtr<Joint>& joint);
  22. /** Destroys the internal joint object. */
  23. void destroyJoint();
  24. SPtr<Joint> mJoint;
  25. };
  26. /** A more specialized version of ScriptObject that allows the constructor to set the native joint. */
  27. template <class Type>
  28. class TScriptJoint : public ScriptObject<Type, ScriptJointBase>
  29. {
  30. public:
  31. virtual ~TScriptJoint() {}
  32. protected:
  33. TScriptJoint(MonoObject* instance, const SPtr<Joint>& joint)
  34. :ScriptObject(instance)
  35. {
  36. initialize(joint);
  37. }
  38. };
  39. /** Interop class between C++ & CLR for Joint. */
  40. class BS_SCR_BE_EXPORT ScriptJoint : public TScriptJoint<ScriptJoint>
  41. {
  42. public:
  43. SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "NativeJoint")
  44. private:
  45. friend class ScriptJointBase;
  46. ScriptJoint(MonoObject* instance);
  47. /** Triggered the joint breaks. */
  48. static void onJointBreak(MonoObject* instance);
  49. /************************************************************************/
  50. /* CLR HOOKS */
  51. /************************************************************************/
  52. static void internal_Destroy(ScriptJointBase* thisPtr);
  53. static void internal_SetBody(ScriptJointBase* thisPtr, JointBody body, ScriptRigidbody* value);
  54. static void internal_SetPosition(ScriptJointBase* thisPtr, JointBody body, Vector3* position);
  55. static void internal_SetRotation(ScriptJointBase* thisPtr, JointBody body, Quaternion* rotation);
  56. static void internal_SetBreakForce(ScriptJointBase* thisPtr, float force);
  57. static void internal_SetBreakTorque(ScriptJointBase* thisPtr, float torque);
  58. static void internal_SetEnableCollision(ScriptJointBase* thisPtr, bool value);
  59. typedef void(__stdcall *OnJointBreakThunkDef) (MonoObject*, MonoException**);
  60. static OnJointBreakThunkDef onJointBreakThunk;
  61. };
  62. }