NativeAnimation.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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 Sample(AnimationClip clip, float time)
  69. {
  70. IntPtr clipPtr = IntPtr.Zero;
  71. if (clip != null)
  72. clipPtr = clip.GetCachedPtr();
  73. Internal_Sample(mCachedPtr, clipPtr, time);
  74. }
  75. public void Stop(int layer)
  76. {
  77. Internal_Stop(mCachedPtr, layer);
  78. }
  79. public void StopAll()
  80. {
  81. Internal_StopAll(mCachedPtr);
  82. }
  83. public bool IsPlaying()
  84. {
  85. return Internal_IsPlaying(mCachedPtr);
  86. }
  87. public AnimationClip GetClip(int index)
  88. {
  89. return Internal_GetClip(mCachedPtr, index);
  90. }
  91. public bool GetState(AnimationClip clip, out AnimationClipState state)
  92. {
  93. IntPtr clipPtr = IntPtr.Zero;
  94. if (clip != null)
  95. clipPtr = clip.GetCachedPtr();
  96. return Internal_GetState(mCachedPtr, clipPtr, out state);
  97. }
  98. public void SetState(AnimationClip clip, AnimationClipState state)
  99. {
  100. IntPtr clipPtr = IntPtr.Zero;
  101. if (clip != null)
  102. clipPtr = clip.GetCachedPtr();
  103. Internal_SetState(mCachedPtr, clipPtr, ref state);
  104. }
  105. public void SetMorphShapeWeight(int idx, float weight)
  106. {
  107. Internal_SetMorphShapeWeight(mCachedPtr, idx, weight);
  108. }
  109. public bool GetGenericCurveValue(int curveIdx, out float value)
  110. {
  111. return Internal_GetGenericCurveValue(mCachedPtr, curveIdx, out value);
  112. }
  113. public void MapCurveToSceneObject(string curve, SceneObject sceneObject)
  114. {
  115. if (curve == null || sceneObject == null)
  116. return;
  117. Internal_MapCurveToSceneObject(mCachedPtr, curve, sceneObject.GetCachedPtr());
  118. }
  119. public void UnmapSceneObject(SceneObject sceneObject)
  120. {
  121. if (sceneObject == null)
  122. return;
  123. Internal_UnmapSceneObject(mCachedPtr, sceneObject.GetCachedPtr());
  124. }
  125. internal NativeAnimation()
  126. {
  127. Internal_Create(this);
  128. }
  129. internal void Destroy()
  130. {
  131. Internal_Destroy(mCachedPtr);
  132. }
  133. private void Internal_OnEventTriggered(AnimationClip clip, string name)
  134. {
  135. OnEventTriggered?.Invoke(clip, name);
  136. }
  137. [MethodImpl(MethodImplOptions.InternalCall)]
  138. private static extern void Internal_Create(NativeAnimation instance);
  139. [MethodImpl(MethodImplOptions.InternalCall)]
  140. private static extern void Internal_Destroy(IntPtr thisPtr);
  141. [MethodImpl(MethodImplOptions.InternalCall)]
  142. private static extern void Internal_SetWrapMode(IntPtr thisPtr, AnimWrapMode wrapMode);
  143. [MethodImpl(MethodImplOptions.InternalCall)]
  144. private static extern void Internal_SetSpeed(IntPtr thisPtr, float speed);
  145. [MethodImpl(MethodImplOptions.InternalCall)]
  146. private static extern void Internal_Play(IntPtr thisPtr, IntPtr clipPtr);
  147. [MethodImpl(MethodImplOptions.InternalCall)]
  148. private static extern void Internal_BlendAdditive(IntPtr thisPtr, IntPtr clipPtr, float weight, float fadeLength,
  149. int layer);
  150. [MethodImpl(MethodImplOptions.InternalCall)]
  151. private static extern void Internal_Blend1D(IntPtr thisPtr, Blend1DInfo info, float t);
  152. [MethodImpl(MethodImplOptions.InternalCall)]
  153. private static extern void Internal_Blend2D(IntPtr thisPtr, Blend2DInfo info, ref Vector2 t);
  154. [MethodImpl(MethodImplOptions.InternalCall)]
  155. private static extern void Internal_CrossFade(IntPtr thisPtr, IntPtr clipPtr, float fadeLength);
  156. [MethodImpl(MethodImplOptions.InternalCall)]
  157. private static extern void Internal_Sample(IntPtr thisPtr, IntPtr clipPtr, float time);
  158. [MethodImpl(MethodImplOptions.InternalCall)]
  159. private static extern void Internal_Stop(IntPtr thisPtr, int layer);
  160. [MethodImpl(MethodImplOptions.InternalCall)]
  161. private static extern void Internal_StopAll(IntPtr thisPtr);
  162. [MethodImpl(MethodImplOptions.InternalCall)]
  163. private static extern bool Internal_IsPlaying(IntPtr thisPtr);
  164. [MethodImpl(MethodImplOptions.InternalCall)]
  165. private static extern bool Internal_GetState(IntPtr thisPtr, IntPtr clipPtr, out AnimationClipState state);
  166. [MethodImpl(MethodImplOptions.InternalCall)]
  167. private static extern void Internal_SetState(IntPtr thisPtr, IntPtr clipPtr, ref AnimationClipState state);
  168. [MethodImpl(MethodImplOptions.InternalCall)]
  169. private static extern void Internal_SetMorphShapeWeight(IntPtr thisPtr, int idx, float weight);
  170. [MethodImpl(MethodImplOptions.InternalCall)]
  171. private static extern int Internal_GetNumClips(IntPtr thisPtr);
  172. [MethodImpl(MethodImplOptions.InternalCall)]
  173. private static extern AnimationClip Internal_GetClip(IntPtr thisPtr, int idx);
  174. [MethodImpl(MethodImplOptions.InternalCall)]
  175. private static extern bool Internal_GetGenericCurveValue(IntPtr thisPtr, int curveIdx, out float value);
  176. [MethodImpl(MethodImplOptions.InternalCall)]
  177. private static extern void Internal_MapCurveToSceneObject(IntPtr thisPtr, string curve, IntPtr sceneObjectPtr);
  178. [MethodImpl(MethodImplOptions.InternalCall)]
  179. private static extern void Internal_UnmapSceneObject(IntPtr thisPtr, IntPtr sceneObjectPtr);
  180. [MethodImpl(MethodImplOptions.InternalCall)]
  181. private static extern void Internal_SetBounds(IntPtr thisPtr, ref AABox bounds);
  182. [MethodImpl(MethodImplOptions.InternalCall)]
  183. private static extern void Internal_SetCull(IntPtr thisPtr, bool cull);
  184. }
  185. /** @endcond */
  186. }