NativeCollider.cs 7.5 KB

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