diff --git a/include/renderd7/Color.hpp b/include/renderd7/Color.hpp index 39ac865..e6929e5 100644 --- a/include/renderd7/Color.hpp +++ b/include/renderd7/Color.hpp @@ -94,6 +94,7 @@ class Theme { void UndoAll(); void TextBy(RD7Color bg); RD7Color AutoText(RD7Color bg); + void ClearHistory() { changes.clear(); } std::vector &GetTableRef() { return clr_tab; } // For Smart Pointer diff --git a/include/renderd7/Image.hpp b/include/renderd7/Image.hpp index 8bb27d9..8ee22e4 100644 --- a/include/renderd7/Image.hpp +++ b/include/renderd7/Image.hpp @@ -30,10 +30,11 @@ namespace RenderD7 { class Image { public: Image(); - ~Image(); + ~Image() = default; RD7_SMART_CTOR(Image) void Load(const std::string& path); void From_NIMG(const nimg& image); + void Delete(); C2D_Image Get(); C2D_Image& GetRef(); @@ -42,8 +43,6 @@ class Image { bool Loadet(); private: - void safe_del(); - bool ld = false; C2D_Image img; }; } // namespace RenderD7 \ No newline at end of file diff --git a/include/renderd7/Sheet.hpp b/include/renderd7/Sheet.hpp index b28bc01..afc8689 100644 --- a/include/renderd7/Sheet.hpp +++ b/include/renderd7/Sheet.hpp @@ -22,6 +22,7 @@ #include #include +#include #include namespace RenderD7 { @@ -41,6 +42,9 @@ class Sheet { Result Load(const std::string& path); /// @brief Unload the Sheet void Free(); + Image::Ref GetImage(int idx); + C2D_SpriteSheet Get() { return this->spritesheet; } + private: /// \param spritesheet The Sheet C2D_SpriteSheet spritesheet; }; diff --git a/include/renderd7/renderd7.hpp b/include/renderd7/renderd7.hpp index 598ba2d..a85fcdc 100644 --- a/include/renderd7/renderd7.hpp +++ b/include/renderd7/renderd7.hpp @@ -158,18 +158,6 @@ int GetFps(); /// @param e To /// @return Random Int int GetRandomInt(int b, int e); -/// @brief DrawMetrikOvl (YOUR OWN RISK) -void DrawMetrikOvl(); -/// @brief Draw Image from RenderD7 Sheet -/// @param sheet Spritesheet -/// @param index Image index Value -/// @param x Pos X -/// @param y Pos Y -/// @param scaleX Scale on X-Axis -/// @param scaleY Scale on Y-Axis -/// @return success ? -bool DrawImageFromSheet(RenderD7::Sheet *sheet, size_t index, float x, float y, - float scaleX = 1.0, float scaleY = 1.0); /// @brief Fade In /// @param duration Duration in Frames void FadeIn(); diff --git a/source/Image.cpp b/source/Image.cpp index d556500..ae0639b 100644 --- a/source/Image.cpp +++ b/source/Image.cpp @@ -21,6 +21,8 @@ #include #include +#include + static u32 __rd7i_gp2o__(u32 v) { v--; v |= v >> 1; @@ -109,27 +111,27 @@ Image::Image() { img.subtex = nullptr; } -Image::~Image() { safe_del(); } - void Image::Load(const std::string &path) { // Make sure to cleanup - safe_del(); - ld = false; + Delete(); // Setup Func and Load Data int w, h, c = 0; uint8_t *image = stbi_load(path.c_str(), &w, &h, &c, 4); if (image == nullptr) { + _rd7i_logger()->Write("Failed to Load Image: " + path); return; } // Size/Fmt Check if (w > 1024 || h > 1024) { // Reason: Image to Large + _rd7i_logger()->Write("Image too Large!"); stbi_image_free(image); return; } std::vector wimg(w * h * 4); if (c == 3) { + _rd7i_logger()->Write("Convert Image to RGBA"); stbi_image_free(image); image = stbi_load(path.c_str(), &w, &h, &c, 3); __rd7i_r24r32(wimg, std::vector(image, image + (w * h * 3)), w, h); @@ -146,13 +148,11 @@ void Image::Load(const std::string &path) { __rd7i_c3dc2d__(tex, subtex, wimg.data(), (u32)(w * h * 4), (u32)w, (u32)h); img.tex = tex; img.subtex = subtex; - ld = true; } void Image::From_NIMG(const nimg &image) { // Make sure to cleanup - safe_del(); - ld = false; + Delete(); if (image.width > 1024 || image.height > 1024) return; C3D_Tex *tex = new C3D_Tex; Tex3DS_SubTexture *subtex = new Tex3DS_SubTexture; @@ -161,14 +161,13 @@ void Image::From_NIMG(const nimg &image) { (u32)image.height); img.tex = tex; img.subtex = subtex; - ld = true; } C2D_Image Image::Get() { return img; } C2D_Image &Image::GetRef() { return img; } void Image::Set(const C2D_Image &i) { - safe_del(); + Delete(); img = i; } @@ -177,10 +176,16 @@ R7Vec2 Image::GetSize() { return R7Vec2(img.subtex->width, img.subtex->height); } -void Image::safe_del() { - if (img.subtex != nullptr) delete img.subtex; - if (img.tex != nullptr) delete img.tex; +void Image::Delete() { + if (img.subtex != nullptr) { + delete img.subtex; + img.subtex = nullptr; + } + if (img.tex != nullptr) { + delete img.tex; + img.tex = nullptr; + } } -bool Image::Loadet() { return ld; } +bool Image::Loadet() { return (img.subtex != nullptr && img.tex != nullptr); } } // namespace RenderD7 \ No newline at end of file diff --git a/source/Render2.cpp b/source/Render2.cpp index c71abd1..e903ae7 100644 --- a/source/Render2.cpp +++ b/source/Render2.cpp @@ -148,7 +148,8 @@ void R2Base::Process() { line++; } } else if (it.type == 4) { - C2D_DrawImageAt(it.img->Get(), it.pos.x, it.pos.y, 0.5f); + if(it.img->Loadet()) + C2D_DrawImageAt(it.img->Get(), it.pos.x, it.pos.y, 0.5f); } else if (it.type == 5) { // TODO: Move the Draw Func into this API it.spr->Draw(); diff --git a/source/Sheet.cpp b/source/Sheet.cpp index 9f23c6a..5e4c926 100644 --- a/source/Sheet.cpp +++ b/source/Sheet.cpp @@ -20,6 +20,7 @@ #include Result RenderD7::Sheet::Load(const std::string& path) { + if (this->spritesheet) Free(); this->spritesheet = C2D_SpriteSheetLoad(path.c_str()); if (!this->spritesheet) { _rd7i_logger()->Write("Failed to Load Spritesheet from: " + path, 0); @@ -32,3 +33,10 @@ void RenderD7::Sheet::Free() { C2D_SpriteSheetFree(this->spritesheet); this->spritesheet = nullptr; } + +RenderD7::Image::Ref RenderD7::Sheet::GetImage(int idx) { + if (!this->spritesheet) return nullptr; + Image::Ref img = Image::New(); + img->GetRef() = C2D_SpriteSheetGetImage(this->spritesheet, idx); + return img; +} \ No newline at end of file diff --git a/source/Sprite.cpp b/source/Sprite.cpp index 910ae7c..645be20 100644 --- a/source/Sprite.cpp +++ b/source/Sprite.cpp @@ -19,7 +19,7 @@ #include void RenderD7::Sprite::FromSheet(RenderD7::Sheet::Ref sheet, size_t index) { - C2D_SpriteFromSheet(&this->sprite, sheet->spritesheet, index); + C2D_SpriteFromSheet(&this->sprite, sheet->Get(), index); } bool RenderD7::Sprite::Draw() { // Patch Depth before draw diff --git a/source/renderd7.cpp b/source/renderd7.cpp index 58a9131..a1047f3 100644 --- a/source/renderd7.cpp +++ b/source/renderd7.cpp @@ -250,16 +250,6 @@ RenderD7::LoggerBase::Ref RenderD7::Logger() { float RenderD7::GetDeltaTime() { return (float)rd7i_dtm; } -bool RenderD7::DrawImageFromSheet(RenderD7::Sheet *sheet, size_t index, float x, - float y, float scaleX, float scaleY) { - if (sheet->spritesheet != nullptr) { - if (C2D_SpriteSheetCount(sheet->spritesheet) >= index) { - return C2D_DrawImageAt(C2D_SpriteSheetGetImage(sheet->spritesheet, index), - x, y, 0.5f, nullptr, scaleX, scaleY); - } - } - return false; -} void RenderD7::Init::NdspFirm() { if (access("sdmc:/3ds/dspfirm.cdc", F_OK) != -1) { ndspInit();