using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace BansheeEngine { /** @addtogroup Rendering * @{ */ /// /// Texture that references a part of a larger texture by specifying an UV subset. When the sprite texture is rendererd /// only the portion of the texture specified by the UV subset will be rendered. This allows you to use the same texture /// for multiple sprites (texture atlasing). Sprite textures also allow you to specify sprite sheet animation by varying /// which portion of the UV is selected over time. /// public partial class SpriteTexture : Resource { private SpriteTexture(bool __dummy0) { } protected SpriteTexture() { } /// Creates a new sprite texture that references the entire area of the provided texture. public SpriteTexture(RRef texture) { Internal_create(this, texture); } /// Creates a new sprite texture that references a sub-area of the provided texture. public SpriteTexture(Vector2 uvOffset, Vector2 uvScale, RRef texture) { Internal_create0(this, ref uvOffset, ref uvScale, texture); } /// Returns a reference wrapper for this resource. public RRef Ref { get { return Internal_GetRef(mCachedPtr); } } /// Determines the internal texture that the sprite texture references. public RRef Texture { get { return Internal_getTexture(mCachedPtr); } set { Internal_setTexture(mCachedPtr, value); } } /// Returns width of the sprite texture in pixels. public uint Width { get { return Internal_getWidth(mCachedPtr); } } /// Returns height of the sprite texture in pixels. public uint Height { get { return Internal_getHeight(mCachedPtr); } } /// /// Determines the offset into the referenced texture where the sprite starts. The offset is in UV coordinates, in range /// [0, 1]. /// public Vector2 Offset { get { Vector2 temp; Internal_getOffset(mCachedPtr, out temp); return temp; } set { Internal_setOffset(mCachedPtr, ref value); } } /// /// Determines the size of the sprite in the referenced texture. Size is in UV coordinates, range [0, 1]. /// public Vector2 Scale { get { Vector2 temp; Internal_getScale(mCachedPtr, out temp); return temp; } set { Internal_setScale(mCachedPtr, ref value); } } /// /// Sets properties describing sprite animation. The animation splits the sprite area into a grid of sub-images which can /// be evaluated over time. In order to view the animation you must also enable playback through setAnimationPlayback(). /// public SpriteSheetGridAnimation Animation { get { SpriteSheetGridAnimation temp; Internal_getAnimation(mCachedPtr, out temp); return temp; } set { Internal_setAnimation(mCachedPtr, ref value); } } /// Determines if and how should the sprite animation play. public SpriteAnimationPlayback AnimationPlayback { get { return Internal_getAnimationPlayback(mCachedPtr); } set { Internal_setAnimationPlayback(mCachedPtr, value); } } /// Returns a reference wrapper for this resource. public static implicit operator RRef(SpriteTexture x) { return Internal_GetRef(x.mCachedPtr); } [MethodImpl(MethodImplOptions.InternalCall)] private static extern RRef Internal_GetRef(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_setTexture(IntPtr thisPtr, RRef texture); [MethodImpl(MethodImplOptions.InternalCall)] private static extern RRef Internal_getTexture(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern uint Internal_getWidth(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern uint Internal_getHeight(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_setOffset(IntPtr thisPtr, ref Vector2 offset); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_getOffset(IntPtr thisPtr, out Vector2 __output); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_setScale(IntPtr thisPtr, ref Vector2 scale); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_getScale(IntPtr thisPtr, out Vector2 __output); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_setAnimation(IntPtr thisPtr, ref SpriteSheetGridAnimation anim); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_getAnimation(IntPtr thisPtr, out SpriteSheetGridAnimation __output); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_setAnimationPlayback(IntPtr thisPtr, SpriteAnimationPlayback playback); [MethodImpl(MethodImplOptions.InternalCall)] private static extern SpriteAnimationPlayback Internal_getAnimationPlayback(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_create(SpriteTexture managedInstance, RRef texture); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_create0(SpriteTexture managedInstance, ref Vector2 uvOffset, ref Vector2 uvScale, RRef texture); } /** @} */ }