public static void DrawAnimation(this IDrawing drawing, FramesGroup framesGroup, double x, double y, float alpha = 1.0f, Drawing.Flip flip = Drawing.Flip.None) { var frame = framesGroup.Frames.FirstOrDefault(); if (frame != null) { var src = frame.Source; flip = flip.Add(Drawing.Flip.FlipHorizontal, framesGroup.Reference.FlipX) .Add(Drawing.Flip.FlipVertical, framesGroup.Reference.FlipY); var nx = x - frame.Pivot.X; var ny = y - frame.Pivot.Y; if (flip.HasFlag(Drawing.Flip.FlipHorizontal)) { nx += frame.Pivot.X * 2 - src.Width; } if (flip.HasFlag(Drawing.Flip.FlipVertical)) { ny -= frame.Pivot.Y * 2 - src.Height; } drawing.DrawSurface(framesGroup.Texture, new System.Drawing.Rectangle((int)src.Left, (int)src.Top, (int)src.Width, (int)src.Height), new System.Drawing.Rectangle((int)nx, (int)ny, (int)src.Width, (int)src.Height), alpha, flip); } }
public static Drawing.Flip Add(this Drawing.Flip x, Drawing.Flip y, bool reverse) { return(reverse ? (Drawing.Flip)((int)x ^ (int)y) : x); }
public static Drawing.Flip Add(this Drawing.Flip x, Drawing.Flip y) { return((Drawing.Flip)((int)x ^ (int)y)); }