#ifndef XNA_CONTENT_READERS_GRAPHICS_HPP #define XNA_CONTENT_READERS_GRAPHICS_HPP #include "../../common/numerics.hpp" #include "../../csharp/timespan.hpp" #include "../../csharp/type.hpp" #include "../../graphics/sprite.hpp" #include "../../graphics/texture.hpp" #include "../manager.hpp" #include "../reader.hpp" #include "../../graphics/shared.hpp" namespace xna { using PTexture2D = std::shared_ptr; class Texture2DReader : public ContentTypeReaderT { public: Texture2DReader() : ContentTypeReaderT(typeof()) { ContentTypeReader::TargetIsValueType = false; } PTexture2D Read(ContentReader& input, PTexture2D& existingInstance) override { const auto format = static_cast(input.ReadInt32()); const auto width = input.ReadInt32(); const auto height = input.ReadInt32(); const auto mipMaps = input.ReadInt32(); auto a_device = ContentManager::GameServiceProvider()->GetService(*typeof()); sptr device = nullptr; if (a_device.has_value()) device = std::any_cast>(a_device); auto texture2D = snew(device, width, height, mipMaps, format); for (size_t level = 0; level < mipMaps; ++level) { auto elementCount = input.ReadInt32(); std::vector data = input.ReadByteBuffer(elementCount); texture2D->SetData(static_cast(level), nullptr, data, 0, elementCount); } return texture2D; } }; using PSpriteFont = std::shared_ptr; class SpriteFontReader : public ContentTypeReaderT { public: SpriteFontReader() : ContentTypeReaderT(typeof()) { ContentTypeReader::TargetIsValueType = false; } PSpriteFont Read(ContentReader& input, PSpriteFont& existingInstance) override { const auto texture = input.ReadObject(); const auto glyphs = input.ReadObject>(); const auto cropping = input.ReadObject>(); const auto charMap = input.ReadObject>(); const auto lineSpacing = input.ReadInt32(); const auto spacing = input.ReadSingle(); const auto kerning = input.ReadObject>(); std::optional defaultCharacter; if (input.ReadBoolean()) defaultCharacter = std::optional(input.ReadChar()); auto font = snew(texture, glyphs, cropping, charMap, lineSpacing, spacing, kerning, defaultCharacter); return font; } }; } #endif