NativeAnimation.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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. /** @cond INTEROP */
  8. /// <summary>
  9. /// Wrapper around the native Animation class.
  10. /// <see cref="Animation"/>
  11. /// </summary>
  12. internal class NativeAnimation : ScriptObject
  13. {
  14. public AnimWrapMode WrapMode
  15. {
  16. set { Internal_SetWrapMode(mCachedPtr, value); }
  17. }
  18. public float Speed
  19. {
  20. set { Internal_SetSpeed(mCachedPtr, value); }
  21. }
  22. public int NumClips
  23. {
  24. get { return Internal_GetNumClips(mCachedPtr); }
  25. }
  26. public AABox Bounds
  27. {
  28. set { Internal_SetBounds(mCachedPtr, ref value); }
  29. }
  30. public bool Cull
  31. {
  32. set { Internal_SetCull(mCachedPtr, value); }
  33. }
  34. public Action<AnimationClip, string> OnEventTriggered;
  35. public void Play(AnimationClip clip)
  36. {
  37. IntPtr clipPtr = IntPtr.Zero;
  38. if (clip != null)
  39. clipPtr = clip.GetCachedPtr();
  40. Internal_Play(mCachedPtr, clipPtr);
  41. }
  42. public void BlendAdditive(AnimationClip clip, float weight, float fadeLength, int layer)
  43. {
  44. IntPtr clipPtr = IntPtr.Zero;
  45. if (clip != null)
  46. clipPtr = clip.GetCachedPtr();
  47. Internal_BlendAdditive(mCachedPtr, clipPtr, weight, fadeLength, layer);
  48. }
  49. public void Blend1D(Blend1DInfo info, float t)
  50. {
  51. if (info == null)
  52. return;
  53. Internal_Blend1D(mCachedPtr, info, t);
  54. }
  55. public void Blend2D(Blend2DInfo info, Vector2 t)
  56. {
  57. if (info == null)
  58. return;
  59. Internal_Blend2D(mCachedPtr, info, ref t);
  60. }
  61. public void CrossFade(AnimationClip clip, float fadeLength)
  62. {
  63. IntPtr clipPtr = IntPtr.Zero;
  64. if (clip != null)
  65. clipPtr = clip.GetCachedPtr();
  66. Internal_CrossFade(mCachedPtr, clipPtr, fadeLength);
  67. }
  68. public void Stop(int layer)
  69. {
  70. Internal_Stop(mCachedPtr, layer);
  71. }
  72. public void StopAll()
  73. {
  74. Internal_StopAll(mCachedPtr);
  75. }
  76. public bool IsPlaying()
  77. {
  78. return Internal_IsPlaying(mCachedPtr);
  79. }
  80. public AnimationClip GetClip(int index)
  81. {
  82. return Internal_GetClip(mCachedPtr, index);
  83. }
  84. public bool GetState(AnimationClip clip, out AnimationClipState state)
  85. {
  86. IntPtr clipPtr = IntPtr.Zero;
  87. if (clip != null)
  88. clipPtr = clip.GetCachedPtr();
  89. return Internal_GetState(mCachedPtr, clipPtr, out state);
  90. }
  91. public void SetState(AnimationClip clip, AnimationClipState state)
  92. {
  93. IntPtr clipPtr = IntPtr.Zero;
  94. if (clip != null)
  95. clipPtr = clip.GetCachedPtr();
  96. Internal_SetState(mCachedPtr, clipPtr, ref state);
  97. }
  98. public bool GetGenericCurveValue(int curveIdx, out float value)
  99. {
  100. return Internal_GetGenericCurveValue(mCachedPtr, curveIdx, out value);
  101. }
  102. public void MapCurveToSceneObject(string curve, SceneObject sceneObject)
  103. {
  104. if (curve == null || sceneObject == null)
  105. return;
  106. Internal_MapCurveToSceneObject(mCachedPtr, curve, sceneObject.GetCachedPtr());
  107. }
  108. public void UnmapSceneObject(SceneObject sceneObject)
  109. {
  110. if (sceneObject == null)
  111. return;
  112. Internal_UnmapSceneObject(mCachedPtr, sceneObject.GetCachedPtr());
  113. }
  114. internal NativeAnimation()
  115. {
  116. Internal_Create(this);
  117. }
  118. internal void Destroy()
  119. {
  120. Internal_Destroy(mCachedPtr);
  121. }
  122. private void Internal_OnEventTriggered(AnimationClip clip, string name)
  123. {
  124. OnEventTriggered?.Invoke(clip, name);
  125. }
  126. [MethodImpl(MethodImplOptions.InternalCall)]
  127. private static extern void Internal_Create(NativeAnimation instance);
  128. [MethodImpl(MethodImplOptions.InternalCall)]
  129. private static extern void Internal_Destroy(IntPtr thisPtr);
  130. [MethodImpl(MethodImplOptions.InternalCall)]
  131. private static extern void Internal_SetWrapMode(IntPtr thisPtr, AnimWrapMode wrapMode);
  132. [MethodImpl(MethodImplOptions.InternalCall)]
  133. private static extern void Internal_SetSpeed(IntPtr thisPtr, float speed);
  134. [MethodImpl(MethodImplOptions.InternalCall)]
  135. private static extern void Internal_Play(IntPtr thisPtr, IntPtr clipPtr);
  136. [MethodImpl(MethodImplOptions.InternalCall)]
  137. private static extern void Internal_BlendAdditive(IntPtr thisPtr, IntPtr clipPtr, float weight, float fadeLength,
  138. int layer);
  139. [MethodImpl(MethodImplOptions.InternalCall)]
  140. private static extern void Internal_Blend1D(IntPtr thisPtr, Blend1DInfo info, float t);
  141. [MethodImpl(MethodImplOptions.InternalCall)]
  142. private static extern void Internal_Blend2D(IntPtr thisPtr, Blend2DInfo info, ref Vector2 t);
  143. [MethodImpl(MethodImplOptions.InternalCall)]
  144. private static extern void Internal_CrossFade(IntPtr thisPtr, IntPtr clipPtr, float fadeLength);
  145. [MethodImpl(MethodImplOptions.InternalCall)]
  146. private static extern void Internal_Stop(IntPtr thisPtr, int layer);
  147. [MethodImpl(MethodImplOptions.InternalCall)]
  148. private static extern void Internal_StopAll(IntPtr thisPtr);
  149. [MethodImpl(MethodImplOptions.InternalCall)]
  150. private static extern bool Internal_IsPlaying(IntPtr thisPtr);
  151. [MethodImpl(MethodImplOptions.InternalCall)]
  152. private static extern bool Internal_GetState(IntPtr thisPtr, IntPtr clipPtr, out AnimationClipState state);
  153. [MethodImpl(MethodImplOptions.InternalCall)]
  154. private static extern void Internal_SetState(IntPtr thisPtr, IntPtr clipPtr, ref AnimationClipState state);
  155. [MethodImpl(MethodImplOptions.InternalCall)]
  156. private static extern int Internal_GetNumClips(IntPtr thisPtr);
  157. [MethodImpl(MethodImplOptions.InternalCall)]
  158. private static extern AnimationClip Internal_GetClip(IntPtr thisPtr, int idx);
  159. [MethodImpl(MethodImplOptions.InternalCall)]
  160. private static extern bool Internal_GetGenericCurveValue(IntPtr thisPtr, int curveIdx, out float value);
  161. [MethodImpl(MethodImplOptions.InternalCall)]
  162. private static extern void Internal_MapCurveToSceneObject(IntPtr thisPtr, string curve, IntPtr sceneObjectPtr);
  163. [MethodImpl(MethodImplOptions.InternalCall)]
  164. private static extern void Internal_UnmapSceneObject(IntPtr thisPtr, IntPtr sceneObjectPtr);
  165. [MethodImpl(MethodImplOptions.InternalCall)]
  166. private static extern void Internal_SetBounds(IntPtr thisPtr, ref AABox bounds);
  167. [MethodImpl(MethodImplOptions.InternalCall)]
  168. private static extern void Internal_SetCull(IntPtr thisPtr, bool cull);
  169. }
  170. /** @endcond */
  171. }