//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// using System; using System.Runtime.CompilerServices; namespace BansheeEngine { /** @cond INTEROP */ /// /// Wrapper around the native Animation class. /// /// internal class NativeAnimation : ScriptObject { public AnimWrapMode WrapMode { set { Internal_SetWrapMode(mCachedPtr, value); } } public float Speed { set { Internal_SetSpeed(mCachedPtr, value); } } public int NumClips { get { return Internal_GetNumClips(mCachedPtr); } } public AABox Bounds { set { Internal_SetBounds(mCachedPtr, ref value); } } public bool Cull { set { Internal_SetCull(mCachedPtr, value); } } public Action OnEventTriggered; public void Play(AnimationClip clip) { IntPtr clipPtr = IntPtr.Zero; if (clip != null) clipPtr = clip.GetCachedPtr(); Internal_Play(mCachedPtr, clipPtr); } public void BlendAdditive(AnimationClip clip, float weight, float fadeLength, int layer) { IntPtr clipPtr = IntPtr.Zero; if (clip != null) clipPtr = clip.GetCachedPtr(); Internal_BlendAdditive(mCachedPtr, clipPtr, weight, fadeLength, layer); } public void Blend1D(Blend1DInfo info, float t) { if (info == null) return; Internal_Blend1D(mCachedPtr, info, t); } public void Blend2D(Blend2DInfo info, Vector2 t) { if (info == null) return; Internal_Blend2D(mCachedPtr, info, ref t); } public void CrossFade(AnimationClip clip, float fadeLength) { IntPtr clipPtr = IntPtr.Zero; if (clip != null) clipPtr = clip.GetCachedPtr(); Internal_CrossFade(mCachedPtr, clipPtr, fadeLength); } public void Sample(AnimationClip clip, float time) { IntPtr clipPtr = IntPtr.Zero; if (clip != null) clipPtr = clip.GetCachedPtr(); Internal_Sample(mCachedPtr, clipPtr, time); } public void Stop(int layer) { Internal_Stop(mCachedPtr, layer); } public void StopAll() { Internal_StopAll(mCachedPtr); } public bool IsPlaying() { return Internal_IsPlaying(mCachedPtr); } public AnimationClip GetClip(int index) { return Internal_GetClip(mCachedPtr, index); } public bool GetState(AnimationClip clip, out AnimationClipState state) { IntPtr clipPtr = IntPtr.Zero; if (clip != null) clipPtr = clip.GetCachedPtr(); return Internal_GetState(mCachedPtr, clipPtr, out state); } public void SetState(AnimationClip clip, AnimationClipState state) { IntPtr clipPtr = IntPtr.Zero; if (clip != null) clipPtr = clip.GetCachedPtr(); Internal_SetState(mCachedPtr, clipPtr, ref state); } public void SetMorphChannelWeight(int idx, float weight) { Internal_SetMorphChannelWeight(mCachedPtr, idx, weight); } public bool GetGenericCurveValue(int curveIdx, out float value) { return Internal_GetGenericCurveValue(mCachedPtr, curveIdx, out value); } public void MapCurveToSceneObject(string curve, SceneObject sceneObject) { if (curve == null || sceneObject == null) return; Internal_MapCurveToSceneObject(mCachedPtr, curve, sceneObject.GetCachedPtr()); } public void UnmapSceneObject(SceneObject sceneObject) { if (sceneObject == null) return; Internal_UnmapSceneObject(mCachedPtr, sceneObject.GetCachedPtr()); } internal NativeAnimation() { Internal_Create(this); } internal void Destroy() { Internal_Destroy(mCachedPtr); } private void Internal_OnEventTriggered(AnimationClip clip, string name) { OnEventTriggered?.Invoke(clip, name); } [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_Create(NativeAnimation instance); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_Destroy(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetWrapMode(IntPtr thisPtr, AnimWrapMode wrapMode); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetSpeed(IntPtr thisPtr, float speed); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_Play(IntPtr thisPtr, IntPtr clipPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_BlendAdditive(IntPtr thisPtr, IntPtr clipPtr, float weight, float fadeLength, int layer); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_Blend1D(IntPtr thisPtr, Blend1DInfo info, float t); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_Blend2D(IntPtr thisPtr, Blend2DInfo info, ref Vector2 t); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_CrossFade(IntPtr thisPtr, IntPtr clipPtr, float fadeLength); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_Sample(IntPtr thisPtr, IntPtr clipPtr, float time); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_Stop(IntPtr thisPtr, int layer); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_StopAll(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool Internal_IsPlaying(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool Internal_GetState(IntPtr thisPtr, IntPtr clipPtr, out AnimationClipState state); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetState(IntPtr thisPtr, IntPtr clipPtr, ref AnimationClipState state); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetMorphChannelWeight(IntPtr thisPtr, int idx, float weight); [MethodImpl(MethodImplOptions.InternalCall)] private static extern int Internal_GetNumClips(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern AnimationClip Internal_GetClip(IntPtr thisPtr, int idx); [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool Internal_GetGenericCurveValue(IntPtr thisPtr, int curveIdx, out float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_MapCurveToSceneObject(IntPtr thisPtr, string curve, IntPtr sceneObjectPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_UnmapSceneObject(IntPtr thisPtr, IntPtr sceneObjectPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetBounds(IntPtr thisPtr, ref AABox bounds); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetCull(IntPtr thisPtr, bool cull); } /** @endcond */ }