public Command( Texture2D texture, Vector2 pos, Rectangle srcRect, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float depth, int index) { int srcRectLeft = srcRect.Left; int srcRectRight = srcRect.Right; int srcRectTop = srcRect.Top; int srcRectBottom = srcRect.Bottom; if (effects.HasFlag(SpriteEffects.FlipHorizontally)) { var temp = srcRectRight; srcRectRight = srcRectLeft; srcRectLeft = temp; } if (effects.HasFlag(SpriteEffects.FlipVertically)) { var temp = srcRectBottom; srcRectBottom = srcRectTop; srcRectTop = temp; } rotation = MathHelper.ToRadians(rotation); float sin = (float)Math.Sin(rotation); float cos = (float)Math.Cos(rotation); var size = srcRect.Size.ToVector2() * scale; Vector2 wAdd = new Vector2(size.X * cos, size.X * sin); Vector2 hAdd = new Vector2(-size.Y * sin, size.Y * cos); pos.X -= origin.X * scale.X * cos - origin.Y * scale.Y * sin; pos.Y -= origin.Y * scale.Y * cos + origin.X * scale.X * sin; Texture = texture; Depth = depth; VertexTL.Color = color; VertexTR.Color = color; VertexBL.Color = color; VertexBR.Color = color; VertexTL.Position = new Vector3(pos.X, pos.Y, 0f); VertexTR.Position = new Vector3(pos.X + wAdd.X, pos.Y + wAdd.Y, 0f); VertexBL.Position = new Vector3(pos.X + hAdd.X, pos.Y + hAdd.Y, 0f); VertexBR.Position = new Vector3(pos.X + wAdd.X + hAdd.X, pos.Y + wAdd.Y + hAdd.Y, 0f); Min = new Vector2( MathUtils.Min ( VertexTL.Position.X, VertexTR.Position.X, VertexBL.Position.X, VertexBR.Position.X ), MathUtils.Min ( VertexTL.Position.Y, VertexTR.Position.Y, VertexBL.Position.Y, VertexBR.Position.Y )); Max = new Vector2( MathUtils.Max ( VertexTL.Position.X, VertexTR.Position.X, VertexBL.Position.X, VertexBR.Position.X ), MathUtils.Max ( VertexTL.Position.Y, VertexTR.Position.Y, VertexBL.Position.Y, VertexBR.Position.Y )); VertexTL.TextureCoordinate = new Vector2((float)srcRectLeft / (float)texture.Width, (float)srcRectTop / (float)texture.Height); VertexTR.TextureCoordinate = new Vector2((float)srcRectRight / (float)texture.Width, (float)srcRectTop / (float)texture.Height); VertexBL.TextureCoordinate = new Vector2((float)srcRectLeft / (float)texture.Width, (float)srcRectBottom / (float)texture.Height); VertexBR.TextureCoordinate = new Vector2((float)srcRectRight / (float)texture.Width, (float)srcRectBottom / (float)texture.Height); Index = index; }