2
0

NativeDistanceJoint.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. using System.Runtime.InteropServices;
  6. namespace BansheeEngine
  7. {
  8. /** @cond INTEROP */
  9. /** @addtogroup Interop
  10. * @{
  11. */
  12. /// <summary>
  13. /// Wrapper around the native DistanceJoint class.
  14. /// <see cref="DistanceJoint"/>
  15. /// </summary>
  16. internal class NativeDistanceJoint : NativeJoint
  17. {
  18. public float Distance
  19. {
  20. get { return Internal_GetDistance(mCachedPtr); }
  21. }
  22. public float MinDistance
  23. {
  24. set { Internal_SetMinDistance(mCachedPtr, value); }
  25. }
  26. public float MaxDistance
  27. {
  28. set { Internal_SetMaxDistance(mCachedPtr, value); }
  29. }
  30. public float Tolerance
  31. {
  32. set { Internal_SetTolerance(mCachedPtr, value); }
  33. }
  34. public Spring Spring
  35. {
  36. set { Internal_SetSpring(mCachedPtr, ref value); }
  37. }
  38. public bool EnableMinDistanceLimit
  39. {
  40. set { Internal_SetEnableMinDistanceLimit(mCachedPtr, value); }
  41. }
  42. public bool EnableMaxDistanceLimit
  43. {
  44. set { Internal_SetEnableMaxDistanceLimit(mCachedPtr, value); }
  45. }
  46. public bool EnableSpring
  47. {
  48. set { Internal_SetEnableSpring(mCachedPtr, value); }
  49. }
  50. public NativeDistanceJoint(ScriptCommonJointData commonData, ScriptDistanceJointData data)
  51. {
  52. Internal_CreateInstance(this, ref commonData, ref data);
  53. }
  54. [MethodImpl(MethodImplOptions.InternalCall)]
  55. private static extern void Internal_CreateInstance(NativeDistanceJoint instance, ref ScriptCommonJointData commonData,
  56. ref ScriptDistanceJointData data);
  57. [MethodImpl(MethodImplOptions.InternalCall)]
  58. private static extern float Internal_GetDistance(IntPtr thisPtr);
  59. [MethodImpl(MethodImplOptions.InternalCall)]
  60. private static extern void Internal_SetMinDistance(IntPtr thisPtr, float value);
  61. [MethodImpl(MethodImplOptions.InternalCall)]
  62. private static extern void Internal_SetMaxDistance(IntPtr thisPtr, float value);
  63. [MethodImpl(MethodImplOptions.InternalCall)]
  64. private static extern void Internal_SetTolerance(IntPtr thisPtr, float value);
  65. [MethodImpl(MethodImplOptions.InternalCall)]
  66. private static extern void Internal_SetSpring(IntPtr thisPtr, ref Spring value);
  67. [MethodImpl(MethodImplOptions.InternalCall)]
  68. private static extern void Internal_SetEnableMinDistanceLimit(IntPtr thisPtr, bool value);
  69. [MethodImpl(MethodImplOptions.InternalCall)]
  70. private static extern void Internal_SetEnableMaxDistanceLimit(IntPtr thisPtr, bool value);
  71. [MethodImpl(MethodImplOptions.InternalCall)]
  72. private static extern void Internal_SetEnableSpring(IntPtr thisPtr, bool value);
  73. }
  74. /// <summary>
  75. /// Used for passing DistanceJoint initialization data between native and managed code.
  76. /// </summary>
  77. [StructLayout(LayoutKind.Sequential), SerializeObject]
  78. internal struct ScriptDistanceJointData // Note: Must match C++ struct ScriptDistanceJointData
  79. {
  80. public float minDistance;
  81. public float maxDistance;
  82. public float tolerance;
  83. public Spring spring;
  84. public DistanceJoint.Flag flags;
  85. }
  86. /** @} */
  87. /** @endcond */
  88. }