/// <summary> /// Sets animation parameters for a sprite sheet primitive. /// <param name="beginColumn">Zero-based first frame column for the beginning sprite in the animation sequence.</param> /// <param name="beginRow">Zero-based first frame row for the beginning sprite in the animation sequence.</param> /// <param name="endColumn">Zero-based first frame column for the ending sprite in the animation sequence.</param> /// <param name="endRow">Zero-based first frame row for the ending sprite in the animation sequence.</param> /// <param name="ticksPerFrame">How many ticks the animation will pause for on each frame.</param> /// <param name="mode">The behavior of the animation loop.</param> /// <seealso cref="SetTextureSpriteSheet"/> /// <seealso cref="UseSpriteSheet"/> /// <seealso cref="UseSpriteSheetAnimation"/> /// <seealso cref="CurrentSpriteSheetFrameX"/> /// <seealso cref="CurrentSpriteSheetFrameY"/> /// </summary> public void SetTextureSpriteAnimationFrames(int beginColumn, int beginRow, int endColumn, int endRow, int ticksPerFrame, SpriteSheetAnimationMode mode) { if (ticksPerFrame < 1) { ticksPerFrame = 1; } m_SpriteBeginFrame = beginRow * m_SpriteSheetColumns + beginColumn; m_SpriteEndFrame = endRow * m_SpriteSheetColumns + endColumn; int tmp = m_SpriteBeginFrame; if (m_SpriteBeginFrame > m_SpriteEndFrame) { m_SpriteBeginFrame = m_SpriteEndFrame; m_SpriteEndFrame = tmp; } CurrentSpriteSheetFrame = m_SpriteBeginFrame; m_TicksPerFrame = ticksPerFrame; m_CurrentFrameTicks = 0; m_SpriteAnimMode = mode; m_SpriteFrameInc = 1; if (mode == SpriteSheetAnimationMode.AnimateBackward || mode == SpriteSheetAnimationMode.AnimateBackwardThenStop) { m_SpriteFrameInc = -1; CurrentSpriteSheetFrame = m_SpriteEndFrame - 1; } }
internal void Init(PrimitiveType p, BlendState b, Vector2 c, Vector2 s, String tex) { m_DrawBlendState = b; m_Center = c; m_Size = s; m_Velocity = new Vector2(1, 0); // This cannot be zero!! Otherwise Speed will not work!! m_ShouldTravel = false; m_Type = p; m_Rotate = 0.0f; // rotate angle and FrontDirection are tied together in 1-1 m_FrontDirection = new Vector2(1, 0); // initial front direction for all prtimives is in the positive X-direction m_NormalDirection = new Vector2(0, 1); m_Texture = tex; m_Color = Color.Aquamarine; m_TextureColor = Color.White; m_Label = null; m_LabelColor = Color.Black; m_CenterReference = true; m_Visible = true; //sprite sheet info init m_UseSpriteSheet = false; m_UseSpriteSheetAnimation = false; m_SpriteSheetColumns = 0; m_SpriteSheetRows = 0; m_SpriteSheetPadding = 0; m_SpriteCurrentFrame = -1; m_SpriteBeginFrame = 0; m_SpriteEndFrame = 0; m_TicksPerFrame = 1; m_CurrentFrameTicks = 0; m_SpriteFrameInc = 1; m_SpriteAnimMode = SpriteSheetAnimationMode.AnimateForward; m_SpriteSourceRect = Rectangle.Empty; if (null != sm_DrawHelper) { // null should happen only once, for the system WorldRec AddToAutoDrawSet(); } }
/// <summary> /// Sets animation parameters for a sprite sheet primitive. /// <param name="beginX">Zero-based first frame column for the beginning sprite in the animation sequence.</param> /// <param name="beginY">Zero-based first frame row for the beginning sprite in the animation sequence.</param> /// <param name="endX">Zero-based first frame column for the ending sprite in the animation sequence.</param> /// <param name="endY">Zero-based first frame row for the ending sprite in the animation sequence.</param> /// <param name="ticksPerFrame">How many ticks the animation will pause for on each frame.</param> /// <param name="mode">The behavior of the animation loop.</param> /// <seealso cref="SetTextureSpriteSheet"/> /// <seealso cref="UseSpriteSheet"/> /// <seealso cref="UseSpriteSheetAnimation"/> /// <seealso cref="CurrentSpriteSheetFrameX"/> /// <seealso cref="CurrentSpriteSheetFrameY"/> /// </summary> public void SetTextureSpriteAnimationFrames(int beginX, int beginY, int endX, int endY, int ticksPerFrame, SpriteSheetAnimationMode mode) { if (ticksPerFrame < 1) ticksPerFrame = 1; m_SpriteBeginFrame = beginY * m_SpriteSheetColumns + beginX; m_SpriteEndFrame = endY * m_SpriteSheetColumns + endX; int tmp = m_SpriteBeginFrame; if (m_SpriteBeginFrame > m_SpriteEndFrame) { m_SpriteBeginFrame = m_SpriteEndFrame; m_SpriteEndFrame = tmp; } CurrentSpriteSheetFrame = m_SpriteBeginFrame; m_TicksPerFrame = ticksPerFrame; m_CurrentFrameTicks = 0; m_SpriteAnimMode = mode; m_SpriteFrameInc = 1; if (mode == SpriteSheetAnimationMode.AnimateBackward) m_SpriteFrameInc = -1; }