#ifndef XNA_GRAPHICS_SPRITE_HPP #define XNA_GRAPHICS_SPRITE_HPP #include "../default.hpp" #include "../common/numerics.hpp" #include "../common/color.hpp" #include #include "../graphics/gresource.hpp" namespace xna { //Enables a group of sprites to be drawn using the same settings. class SpriteBatch : public GraphicsResource { public: SpriteBatch(sptr const& device); //Begins a sprite batch operation. void Begin( SpriteSortMode sortMode = SpriteSortMode::Deferred, BlendState* blendState = nullptr, SamplerState* samplerState = nullptr, DepthStencilState* depthStencil = nullptr, RasterizerState* rasterizerState = nullptr, Effect* effect = nullptr, Matrix const& transformMatrix = Matrix::Identity() ); //Flushes the sprite batch and restores the device state to how it was before Begin was called. void End(); // // Draw - Adds a sprite to a batch of sprites to be rendered. // void Draw(uptr const& texture, Vector2 const& position, Color const& color) { Draw(*texture, position, color); } void Draw(sptr const& texture, Vector2 const& position, Color const& color) { Draw(*texture, position, color); } void Draw(Texture2D& texture, Vector2 const& position, Color const& color); void Draw(uptr const& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color) { Draw(*texture, position, sourceRectangle, color); } void Draw(sptr const& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color) { Draw(*texture, position, sourceRectangle, color); } void Draw(Texture2D& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color); void Draw(uptr const& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, float scale, SpriteEffects effects, float layerDepth) { Draw(*texture, position, sourceRectangle, color, rotation, origin, scale, effects, layerDepth); } void Draw(sptr const& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, float scale, SpriteEffects effects, float layerDepth) { Draw(*texture, position, sourceRectangle, color, rotation, origin, scale, effects, layerDepth); } void Draw(Texture2D& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, float scale, SpriteEffects effects, float layerDepth); void Draw(uptr const& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, Vector2 const& scale, SpriteEffects effects, float layerDepth) { Draw(*texture, position, sourceRectangle, color, rotation, origin, scale, effects, layerDepth); } void Draw(sptr const& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, Vector2 const& scale, SpriteEffects effects, float layerDepth) { Draw(*texture, position, sourceRectangle, color, rotation, origin, scale, effects, layerDepth); } void Draw(Texture2D& texture, Vector2 const& position, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, Vector2 const& scale, SpriteEffects effects, float layerDepth); void Draw(uptr const& texture, Rectangle const& destinationRectangle, Color const& color) { Draw(*texture, destinationRectangle, color); } void Draw(sptr const& texture, Rectangle const& destinationRectangle, Color const& color) { Draw(*texture, destinationRectangle, color); } void Draw(Texture2D& texture, Rectangle const& destinationRectangle, Color const& color); void Draw(uptr const& texture, Rectangle const& destinationRectangle, std::optional const& sourceRectangle, Color const& color) { Draw(*texture, destinationRectangle, sourceRectangle, color); } void Draw(sptr const& texture, Rectangle const& destinationRectangle, std::optional const& sourceRectangle, Color const& color) { Draw(*texture, destinationRectangle, sourceRectangle, color); } void Draw(Texture2D& texture, Rectangle const& destinationRectangle, std::optional const& sourceRectangle, Color const& color); void Draw(uptr const& texture, Rectangle const& destinationRectangle, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, SpriteEffects effects, float layerDepth) { Draw(*texture, destinationRectangle, sourceRectangle, color, rotation, origin, effects, layerDepth); } void Draw(sptr const& texture, Rectangle const& destinationRectangle, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, SpriteEffects effects, float layerDepth) { Draw(*texture, destinationRectangle, sourceRectangle, color, rotation, origin, effects, layerDepth); } void Draw(Texture2D& texture, Rectangle const& destinationRectangle, std::optional const& sourceRectangle, Color const& color, float rotation, Vector2 const& origin, SpriteEffects effects, float layerDepth); // // DrawString - Adds a string to a batch of sprites to be rendered. // void DrawString(uptr const& spriteFont, String const& text, Vector2 const& position, Color const& color) { DrawString(*spriteFont, text, position, color); } void DrawString(sptr const& spriteFont, String const& text, Vector2 const& position, Color const& color) { DrawString(*spriteFont, text, position, color); } void DrawString(SpriteFont& spriteFont, String const& text, Vector2 const& position, Color const& color); void DrawString(uptr const& spriteFont, String const& text, Vector2 const& position, Color const& color, float rotation, Vector2 const& origin, float scale, SpriteEffects effects, float layerDepth) { DrawString(*spriteFont, text, position, color, rotation, origin, scale, effects, layerDepth); } void DrawString(sptr const& spriteFont, String const& text, Vector2 const& position, Color const& color, float rotation, Vector2 const& origin, float scale, SpriteEffects effects, float layerDepth) { DrawString(*spriteFont, text, position, color, rotation, origin, scale, effects, layerDepth); } void DrawString(SpriteFont& spriteFont, String const& text, Vector2 const& position, Color const& color, float rotation, Vector2 const& origin, float scale, SpriteEffects effects, float layerDepth); void Viewport(xna::Viewport const& value); public: struct PlatformImplementation; uptr implementation = nullptr; }; //Represents a font texture. class SpriteFont { public: SpriteFont( sptr const& texture, std::vector const& glyphs, std::vector const& cropping, std::vector const& charMap, Int lineSpacing, float spacing, std::vector const& kerning, std::optional const& defaultCharacter); // Returns the width and height of a string. Vector2 MeasureString(String const& text, bool ignoreWhiteSpace = true); // Returns the width and height of a string. Vector2 MeasureString(WString const& text, bool ignoreWhiteSpace = true); //Gets or sets the default character for the font. Char DefaultCharacter() const; //Gets or sets the default character for the font. void DefaultCharacter(Char value); //Gets or sets the vertical distance (in pixels) between the base lines of two consecutive lines of text Int LineSpacing() const; //Gets or sets the vertical distance (in pixels) between the base lines of two consecutive lines of text void LineSpacing(Int value); public: struct PlatformImplementation; uptr impl = nullptr; }; using PSpriteFont = sptr; } #endif