NativeAnimation.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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 Action<AnimationClip, string> OnEventTriggered;
  23. public void Play(AnimationClip clip)
  24. {
  25. IntPtr clipPtr = IntPtr.Zero;
  26. if (clip != null)
  27. clipPtr = clip.GetCachedPtr();
  28. Internal_Play(mCachedPtr, clipPtr);
  29. }
  30. public void BlendAdditive(AnimationClip clip, float weight, float fadeLength, int layer)
  31. {
  32. IntPtr clipPtr = IntPtr.Zero;
  33. if (clip != null)
  34. clipPtr = clip.GetCachedPtr();
  35. Internal_BlendAdditive(mCachedPtr, clipPtr, weight, fadeLength, layer);
  36. }
  37. public void Blend1D(Blend1DInfo info, float t)
  38. {
  39. if (info == null)
  40. return;
  41. Internal_Blend1D(mCachedPtr, info, t);
  42. }
  43. public void Blend2D(Blend2DInfo info, Vector2 t)
  44. {
  45. if (info == null)
  46. return;
  47. Internal_Blend2D(mCachedPtr, info, ref t);
  48. }
  49. public void CrossFade(AnimationClip clip, float fadeLength)
  50. {
  51. IntPtr clipPtr = IntPtr.Zero;
  52. if (clip != null)
  53. clipPtr = clip.GetCachedPtr();
  54. Internal_CrossFade(mCachedPtr, clipPtr, fadeLength);
  55. }
  56. public void Stop(int layer)
  57. {
  58. Internal_Stop(mCachedPtr, layer);
  59. }
  60. public void StopAll()
  61. {
  62. Internal_StopAll(mCachedPtr);
  63. }
  64. public bool IsPlaying()
  65. {
  66. return Internal_IsPlaying(mCachedPtr);
  67. }
  68. public bool GetState(AnimationClip clip, out AnimationClipState state)
  69. {
  70. IntPtr clipPtr = IntPtr.Zero;
  71. if (clip != null)
  72. clipPtr = clip.GetCachedPtr();
  73. return Internal_GetState(mCachedPtr, clipPtr, out state);
  74. }
  75. public void SetState(AnimationClip clip, AnimationClipState state)
  76. {
  77. IntPtr clipPtr = IntPtr.Zero;
  78. if (clip != null)
  79. clipPtr = clip.GetCachedPtr();
  80. Internal_SetState(mCachedPtr, clipPtr, ref state);
  81. }
  82. internal NativeAnimation()
  83. {
  84. Internal_Create(this);
  85. }
  86. internal void Destroy()
  87. {
  88. Internal_Destroy(mCachedPtr);
  89. }
  90. private void Internal_OnEventTriggered(AnimationClip clip, string name)
  91. {
  92. OnEventTriggered?.Invoke(clip, name);
  93. }
  94. [MethodImpl(MethodImplOptions.InternalCall)]
  95. private static extern void Internal_Create(NativeAnimation instance);
  96. [MethodImpl(MethodImplOptions.InternalCall)]
  97. private static extern void Internal_Destroy(IntPtr thisPtr);
  98. [MethodImpl(MethodImplOptions.InternalCall)]
  99. private static extern void Internal_SetWrapMode(IntPtr thisPtr, AnimWrapMode wrapMode);
  100. [MethodImpl(MethodImplOptions.InternalCall)]
  101. private static extern void Internal_SetSpeed(IntPtr thisPtr, float speed);
  102. [MethodImpl(MethodImplOptions.InternalCall)]
  103. private static extern void Internal_Play(IntPtr thisPtr, IntPtr clipPtr);
  104. [MethodImpl(MethodImplOptions.InternalCall)]
  105. private static extern void Internal_BlendAdditive(IntPtr thisPtr, IntPtr clipPtr, float weight, float fadeLength,
  106. int layer);
  107. [MethodImpl(MethodImplOptions.InternalCall)]
  108. private static extern void Internal_Blend1D(IntPtr thisPtr, Blend1DInfo info, float t);
  109. [MethodImpl(MethodImplOptions.InternalCall)]
  110. private static extern void Internal_Blend2D(IntPtr thisPtr, Blend2DInfo info, ref Vector2 t);
  111. [MethodImpl(MethodImplOptions.InternalCall)]
  112. private static extern void Internal_CrossFade(IntPtr thisPtr, IntPtr clipPtr, float fadeLength);
  113. [MethodImpl(MethodImplOptions.InternalCall)]
  114. private static extern void Internal_Stop(IntPtr thisPtr, int layer);
  115. [MethodImpl(MethodImplOptions.InternalCall)]
  116. private static extern void Internal_StopAll(IntPtr thisPtr);
  117. [MethodImpl(MethodImplOptions.InternalCall)]
  118. private static extern bool Internal_IsPlaying(IntPtr thisPtr);
  119. [MethodImpl(MethodImplOptions.InternalCall)]
  120. private static extern bool Internal_GetState(IntPtr thisPtr, IntPtr clipPtr, out AnimationClipState state);
  121. [MethodImpl(MethodImplOptions.InternalCall)]
  122. private static extern void Internal_SetState(IntPtr thisPtr, IntPtr clipPtr, ref AnimationClipState state);
  123. }
  124. /** @endcond */
  125. }