NativeCollider.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using System;
  4. using System.Runtime.CompilerServices;
  5. namespace BansheeEngine
  6. {
  7. /** @addtogroup Interop
  8. * @{
  9. */
  10. /// <summary>
  11. /// Wrapper around the native Collider class.
  12. /// <see cref="Collider"/>
  13. /// </summary>
  14. internal class NativeCollider : ScriptObject
  15. {
  16. private Collider component;
  17. /// <summary>
  18. /// Component that owns the native collider object.
  19. /// </summary>
  20. public Collider Component
  21. {
  22. get { return component; }
  23. set { component = value; }
  24. }
  25. public Vector3 Position
  26. {
  27. get { Vector3 pos; Internal_GetPosition(mCachedPtr, out pos); return pos; }
  28. set { Quaternion rot = Rotation; Internal_SetTransform(mCachedPtr, ref value, ref rot); }
  29. }
  30. public Quaternion Rotation
  31. {
  32. get { Quaternion rot; Internal_GetRotation(mCachedPtr, out rot); return rot; }
  33. set { Vector3 pos = Position; Internal_SetTransform(mCachedPtr, ref pos, ref value); }
  34. }
  35. public Vector3 Scale
  36. {
  37. get { Vector3 scale; Internal_GetScale(mCachedPtr, out scale); return scale; }
  38. set { Internal_SetScale(mCachedPtr, ref value); }
  39. }
  40. public bool IsTrigger
  41. {
  42. get { return Internal_GetIsTrigger(mCachedPtr); }
  43. set { Internal_SetIsTrigger(mCachedPtr, value); }
  44. }
  45. public NativeRigidbody Rigidbody
  46. {
  47. get { return Internal_GetRigidbody(mCachedPtr); }
  48. set
  49. {
  50. IntPtr rigidbodyPtr = IntPtr.Zero;
  51. if (value != null)
  52. rigidbodyPtr = value.GetCachedPtr();
  53. Internal_SetRigidbody(mCachedPtr, rigidbodyPtr);
  54. }
  55. }
  56. public float Mass
  57. {
  58. get { return Internal_GetMass(mCachedPtr); }
  59. set { Internal_SetMass(mCachedPtr, value); }
  60. }
  61. public PhysicsMaterial Material
  62. {
  63. get { return Internal_GetMaterial(mCachedPtr); }
  64. set
  65. {
  66. IntPtr materialPtr = IntPtr.Zero;
  67. if (value != null)
  68. materialPtr = value.GetCachedPtr();
  69. Internal_SetMaterial(mCachedPtr, materialPtr);
  70. }
  71. }
  72. public float ContactOffset
  73. {
  74. get { return Internal_GetContactOffset(mCachedPtr); }
  75. set { Internal_SetContactOffset(mCachedPtr, value); }
  76. }
  77. public float RestOffset
  78. {
  79. get { return Internal_GetRestOffset(mCachedPtr); }
  80. set { Internal_SetRestOffset(mCachedPtr, value); }
  81. }
  82. public ulong Layer
  83. {
  84. get { return Internal_GetLayer(mCachedPtr); }
  85. set { Internal_SetLayer(mCachedPtr, value); }
  86. }
  87. public CollisionReportMode CollisionReportMode
  88. {
  89. get { return Internal_GetCollisionReportMode(mCachedPtr); }
  90. set { Internal_SetCollisionReportMode(mCachedPtr, value); }
  91. }
  92. public bool Raycast(Vector3 origin, Vector3 unitDir, out ScriptPhysicsQueryHit hit, float maxDist)
  93. {
  94. return Internal_RayCast(mCachedPtr, ref origin, ref unitDir, out hit, maxDist);
  95. }
  96. public void Destroy()
  97. {
  98. Internal_Destroy(mCachedPtr);
  99. }
  100. private void Internal_DoOnCollisionBegin(ScriptCollisionData scriptCollisionData)
  101. {
  102. Component.DoOnCollisionBegin(new CollisionData(scriptCollisionData));
  103. }
  104. private void Internal_DoOnCollisionStay(ScriptCollisionData scriptCollisionData)
  105. {
  106. Component.DoOnCollisionStay(new CollisionData(scriptCollisionData));
  107. }
  108. private void Internal_DoOnCollisionEnd(ScriptCollisionData scriptCollisionData)
  109. {
  110. Component.DoOnCollisionEnd(new CollisionData(scriptCollisionData));
  111. }
  112. [MethodImpl(MethodImplOptions.InternalCall)]
  113. private static extern void Internal_Destroy(IntPtr thisPtr);
  114. [MethodImpl(MethodImplOptions.InternalCall)]
  115. private static extern void Internal_GetPosition(IntPtr thisPtr, out Vector3 pos);
  116. [MethodImpl(MethodImplOptions.InternalCall)]
  117. private static extern void Internal_GetRotation(IntPtr thisPtr, out Quaternion rot);
  118. [MethodImpl(MethodImplOptions.InternalCall)]
  119. private static extern void Internal_SetTransform(IntPtr thisPtr, ref Vector3 pos, ref Quaternion rot);
  120. [MethodImpl(MethodImplOptions.InternalCall)]
  121. private static extern void Internal_SetScale(IntPtr thisPtr, ref Vector3 scale);
  122. [MethodImpl(MethodImplOptions.InternalCall)]
  123. private static extern void Internal_GetScale(IntPtr thisPtr, out Vector3 scale);
  124. [MethodImpl(MethodImplOptions.InternalCall)]
  125. private static extern void Internal_SetIsTrigger(IntPtr thisPtr, bool value);
  126. [MethodImpl(MethodImplOptions.InternalCall)]
  127. private static extern bool Internal_GetIsTrigger(IntPtr thisPtr);
  128. [MethodImpl(MethodImplOptions.InternalCall)]
  129. private static extern void Internal_SetRigidbody(IntPtr thisPtr, IntPtr rigidbody);
  130. [MethodImpl(MethodImplOptions.InternalCall)]
  131. private static extern NativeRigidbody Internal_GetRigidbody(IntPtr thisPtr);
  132. [MethodImpl(MethodImplOptions.InternalCall)]
  133. private static extern void Internal_SetMass(IntPtr thisPtr, float mass);
  134. [MethodImpl(MethodImplOptions.InternalCall)]
  135. private static extern float Internal_GetMass(IntPtr thisPtr);
  136. [MethodImpl(MethodImplOptions.InternalCall)]
  137. private static extern void Internal_SetMaterial(IntPtr thisPtr, IntPtr physicsMaterial);
  138. [MethodImpl(MethodImplOptions.InternalCall)]
  139. private static extern PhysicsMaterial Internal_GetMaterial(IntPtr thisPtr);
  140. [MethodImpl(MethodImplOptions.InternalCall)]
  141. private static extern void Internal_SetContactOffset(IntPtr thisPtr, float value);
  142. [MethodImpl(MethodImplOptions.InternalCall)]
  143. private static extern float Internal_GetContactOffset(IntPtr thisPtr);
  144. [MethodImpl(MethodImplOptions.InternalCall)]
  145. private static extern void Internal_SetRestOffset(IntPtr thisPtr, float value);
  146. [MethodImpl(MethodImplOptions.InternalCall)]
  147. private static extern float Internal_GetRestOffset(IntPtr thisPtr);
  148. [MethodImpl(MethodImplOptions.InternalCall)]
  149. private static extern void Internal_SetLayer(IntPtr thisPtr, ulong layer);
  150. [MethodImpl(MethodImplOptions.InternalCall)]
  151. private static extern ulong Internal_GetLayer(IntPtr thisPtr);
  152. [MethodImpl(MethodImplOptions.InternalCall)]
  153. private static extern void Internal_SetCollisionReportMode(IntPtr thisPtr, CollisionReportMode mode);
  154. [MethodImpl(MethodImplOptions.InternalCall)]
  155. private static extern CollisionReportMode Internal_GetCollisionReportMode(IntPtr thisPtr);
  156. [MethodImpl(MethodImplOptions.InternalCall)]
  157. private static extern bool Internal_RayCast(IntPtr thisPtr, ref Vector3 origin, ref Vector3 unitDir,
  158. out ScriptPhysicsQueryHit hit, float maxDist);
  159. }
  160. /** @} */
  161. }