diff --git a/framework/content/defaultreaders.hpp b/framework/content/defaultreaders.hpp index 9684f5b..7579941 100644 --- a/framework/content/defaultreaders.hpp +++ b/framework/content/defaultreaders.hpp @@ -12,7 +12,7 @@ namespace xna { elementReader = manager->GetTypeReader(typeof()); } - sptr> Read(ContentReader& input, std::vector& existingInstance) override { + std::vector Read(ContentReader& input, std::vector& existingInstance) override { const auto length = input.ReadInt32(); std::vector objArray(length); @@ -27,7 +27,7 @@ namespace xna { }; class BooleanReader : public ContentTypeReaderT { - sptr Read(ContentReader& input, bool& existingInstance) override { + bool Read(ContentReader& input, bool& existingInstance) override { auto value = input.ReadBoolean(); auto b = New(value); return b; diff --git a/framework/content/manager.hpp b/framework/content/manager.hpp index 45ce5f1..b70a927 100644 --- a/framework/content/manager.hpp +++ b/framework/content/manager.hpp @@ -43,26 +43,26 @@ namespace xna { } template - sptr Load(String const& assetName) { - if (assetName.empty()) return nullptr; + T Load(String const& assetName) { + if (assetName.empty()) return T(); - if (_loadedAssets.contains(assetName)) { + /*if (_loadedAssets.contains(assetName)) { auto& ptr = _loadedAssets[assetName]; auto obj1 = reinterpret_pointer_cast(ptr); return obj1; - } + }*/ auto obj2 = ReadAsset(assetName); //auto voidAsset = reinterpret_pointer_cast(obj2); - _loadedAssets.insert({ assetName , obj2 }); + //_loadedAssets.insert({ assetName , obj2 }); return obj2; } protected: template - sptr ReadAsset(String const& assetName) { + T ReadAsset(String const& assetName) { auto input = OpenStream(assetName); auto contentReader = ContentReader::Create(this, input, assetName); diff --git a/framework/content/reader.hpp b/framework/content/reader.hpp index 5a8e402..f953d5f 100644 --- a/framework/content/reader.hpp +++ b/framework/content/reader.hpp @@ -17,19 +17,19 @@ namespace xna { static sptr Create(ContentManager* contentManager, sptr& input, String const& assetName); template - sptr ReadAsset(); + T ReadAsset(); template - sptr ReadObject(); + T ReadObject(); template - sptr ReadObject(T existingInstance); + T ReadObject(T existingInstance); template - sptr ReadObject(ContentTypeReader& typeReader); + T ReadObject(ContentTypeReader& typeReader); template - sptr ReadObject(ContentTypeReader& typeReader, T existingInstance); + T ReadObject(ContentTypeReader& typeReader, T existingInstance); Vector2 ReadVector2(); Vector3 ReadVector3(); @@ -51,13 +51,13 @@ namespace xna { Int ReadHeader(); template - sptr ReadObjectInternal(std::any& existingInstance, xna_error_nullarg); + T ReadObjectInternal(std::any& existingInstance, xna_error_nullarg); template - sptr ReadObjectInternal(ContentTypeReader& typeReader, std::any& existingInstance, xna_error_nullarg); + T ReadObjectInternal(ContentTypeReader& typeReader, std::any& existingInstance, xna_error_nullarg); template - sptr InvokeReader(ContentTypeReader& reader, std::any& existingInstance, xna_error_nullarg); + T InvokeReader(ContentTypeReader& reader, std::any& existingInstance, xna_error_nullarg); private: ContentManager* _contentManager = nullptr; @@ -72,19 +72,20 @@ namespace xna { }; template - inline sptr ContentReader::ReadObjectInternal(std::any& existingInstance, xna_error_ptr_arg) + inline T ContentReader::ReadObjectInternal(std::any& existingInstance, xna_error_ptr_arg) { const auto num = Read7BitEncodedInt(); if (num == 0) { - return New(); + return T(); } const auto index = num - 1; if (index >= typeReaders.size()) { xna_error_apply(err, XnaErrorCode::ARGUMENT_OUT_OF_RANGE); - return New(); + + return T(); } auto reader = typeReaders[index]; @@ -92,22 +93,22 @@ namespace xna { } template - inline sptr ContentReader::InvokeReader(ContentTypeReader& reader, std::any& existingInstance, xna_error_ptr_arg) + inline T ContentReader::InvokeReader(ContentTypeReader& reader, std::any& existingInstance, xna_error_ptr_arg) { auto contentTypeReader = reinterpret_cast*>(&reader); - sptr objB = nullptr; + T objB; if (contentTypeReader) { - auto existingInstance1 = existingInstance.has_value() ? std::any_cast>(existingInstance) : nullptr; - objB = contentTypeReader->Read(*this, *existingInstance1); + auto existingInstance1 = existingInstance.has_value() ? std::any_cast(existingInstance) : T(); + objB = contentTypeReader->Read(*this, existingInstance1); return objB; } - return New(); + return T(); } template - inline sptr ContentReader::ReadAsset() + inline T ContentReader::ReadAsset() { const auto sharedResourceCount = ReadHeader(); auto obj = ReadObject(); @@ -115,33 +116,33 @@ namespace xna { } template - inline sptr ContentReader::ReadObject() + inline T ContentReader::ReadObject() { auto a = std::any(); return ReadObjectInternal(a); } template - inline sptr ContentReader::ReadObject(T existingInstance) + inline T ContentReader::ReadObject(T existingInstance) { return ReadObjectInternal(std::any(existingInstance)); } template - inline sptr ContentReader::ReadObject(ContentTypeReader& typeReader) + inline T ContentReader::ReadObject(ContentTypeReader& typeReader) { auto obj = std::any(); return ReadObjectInternal(typeReader, obj); } template - inline sptr ContentReader::ReadObject(ContentTypeReader& typeReader, T existingInstance) + inline T ContentReader::ReadObject(ContentTypeReader& typeReader, T existingInstance) { return ReadObjectInternal(typeReader, std::any(existingInstance)); } template - inline sptr ContentReader::ReadObjectInternal(ContentTypeReader& typeReader, std::any& existingInstance, xna_error_ptr_arg) + inline T ContentReader::ReadObjectInternal(ContentTypeReader& typeReader, std::any& existingInstance, xna_error_ptr_arg) { return typeReader.TargetIsValueType ? InvokeReader(typeReader, existingInstance, err) diff --git a/framework/content/typereadermanager.hpp b/framework/content/typereadermanager.hpp index d9f230a..fcf5553 100644 --- a/framework/content/typereadermanager.hpp +++ b/framework/content/typereadermanager.hpp @@ -41,7 +41,7 @@ namespace xna { return std::any(); } - virtual sptr Read(ContentReader& input, T& existingInstance) = 0; + virtual T Read(ContentReader& input, T& existingInstance) = 0; }; //-------------------------------------------------------// @@ -175,8 +175,8 @@ namespace xna { }); } - virtual sptr Read(ContentReader& input, Object& existingInstance) override { - return nullptr; + virtual Object Read(ContentReader& input, Object& existingInstance) override { + return Object(); } }; } diff --git a/framework/forward.hpp b/framework/forward.hpp index dd6f930..3085424 100644 --- a/framework/forward.hpp +++ b/framework/forward.hpp @@ -88,6 +88,9 @@ namespace xna { struct GamePadState; struct KeyboardState; struct MouseState; + + //Pointer + using PTexture2D = std::shared_ptr; } #endif \ No newline at end of file diff --git a/framework/platform/content-readers/texture2Dreader-dx.hpp b/framework/platform/content-readers/texture2Dreader-dx.hpp index 7ad93f7..7bff5bc 100644 --- a/framework/platform/content-readers/texture2Dreader-dx.hpp +++ b/framework/platform/content-readers/texture2Dreader-dx.hpp @@ -7,11 +7,11 @@ #include "../texture-dx.hpp" namespace xna { - class Texture2DReader : public ContentTypeReaderT { + class Texture2DReader : public ContentTypeReaderT { public: Texture2DReader() : ContentTypeReaderT(typeof()){} - sptr Read(ContentReader& input, Texture2D& existingInstance) override{ + PTexture2D Read(ContentReader& input, PTexture2D& existingInstance) override{ const auto format = static_cast(input.ReadInt32()); const auto width = input.ReadInt32(); const auto height = input.ReadInt32(); diff --git a/framework/platform/init-dx.cpp b/framework/platform/init-dx.cpp index c822e88..1634626 100644 --- a/framework/platform/init-dx.cpp +++ b/framework/platform/init-dx.cpp @@ -10,9 +10,9 @@ namespace xna { Type::NameOfRegisteredTypes.insert({ "Texture2D", typeof() }); //Texture2DReader - Type::NameOfRegisteredTypes.insert({ "Texture2DReader", typeof() }); - Type::NameOfRegisteredTypes.insert({ "xna::Texture2DReader", typeof() }); - Type::NameOfRegisteredTypes.insert({ "Microsoft.Xna.Framework.Content.Texture2DReader", typeof() }); + const auto textureReader = typeof(); + Type::NameOfRegisteredTypes.insert({ "xna::Texture2DReader", textureReader }); + Type::NameOfRegisteredTypes.insert({ "Microsoft.Xna.Framework.Content.Texture2DReader", textureReader }); } void InitPlatform::InitActivadors() @@ -25,6 +25,6 @@ namespace xna { ContentTypeReaderActivador::SetActivador(typeof(), []() -> sptr { auto obj = New (); return reinterpret_pointer_cast(obj); - }); + }); } } \ No newline at end of file diff --git a/framework/xna.cpp b/framework/xna.cpp index 8107cf6..7f12728 100644 --- a/framework/xna.cpp +++ b/framework/xna.cpp @@ -28,6 +28,9 @@ namespace xna { void LoadContent() override { spriteBatch = New(*graphicsDevice); + texture = Content()->Load("idle"); + //Texture2D texture = Content()->Load("idle"); + Game::LoadContent(); } @@ -39,9 +42,11 @@ namespace xna { } void Draw(GameTime const& gameTime) override { - graphicsDevice->Clear(Colors::CornflowerBlue); + graphicsDevice->Clear(Colors::CornflowerBlue); - + spriteBatch->Begin(); + spriteBatch->Draw(*texture, Vector2(10, 10), Colors::White); + spriteBatch->End(); Game::Draw(gameTime); } @@ -49,6 +54,7 @@ namespace xna { private: sptr graphics = nullptr; sptr spriteBatch = nullptr; + PTexture2D texture = nullptr; }; }