Exemple #1
0
            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;
            }