#pragma once #include <3ds.h> #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define RENDERD7VSTRING "0.9.2" #define CHANGELOG \ "0.9.2: Add NpiSplashVideo\nNvid Support(v0.0.1)\nAdd Basic RenderD7 " \ "Splash\nFaster Graphics Init\nFade Effects\nFix Screen for this " \ "Changelog\n0.9.1: Fix Critical bug in\nSpritesheet animations\nFix Color " \ "Conver(Hex)\n0.9.0: Remove Stupid try of Console\nAdd Services list and " \ "Clean up " \ "Code.\nAlso added Minimal Init for hax2.x\n0.8.5: Fix Deltatime \n0.8.4: " \ "A lot of Fixes and new\nFeatures for BitmapPrinter! \n0.8.3: Addet " \ "Overlaycount to Info\nand Addet ResultDecoder for errors.\n\n0.8.2: Fix a " \ "lot of Stuff and\nadd c++17 based filesystem class.\n0.8.1: Add abillity " \ "to Get Stdout as string\nto render it to the screen.\n0.8.0: Implement " \ "BitmapPrinter\n0.7.3: Implement Over\nRender Overlay Framework\n0.7.2: " \ "Implement MT to csv file\nsaving.(removed) Add RGB2HEX.\n0.7.1: Add the " \ "New Overlay Handler. Its\nJust in code and does nothing yet.\n0.7.0: Made " \ "Big Progress In the MT\nOvl but it still crashes On\na Scnd " \ "C3D_FrameEnd()." \ "\nImplement 800px but\ndoesn't work that good. \n0.6.2: Fix Crash when " \ "exiting\ntrouth Home Menu.\n0.6.10: rewrite Threadsystem,\nImprove " \ "framerate\n0.6.02: Fix Code in lang.hpp\nadd Draw Text Left " \ "Function\n(Right since 0.7.0).\nadd changelog\n0.6.01: add Threading " \ "system.\n0.6.0: Better " \ "Scene Management\n0.5.0: Fixed some Bugs!\n0.4.0: Trying to fix " \ "Filesystem and Bugs!\n0.3.0: Recreate D7-Core into RenderD7!\n0.2.0: " \ "Trying to create Animations of\nImages instead of Sheets!\n0.1.0: Initial " \ "Release of\nD7-Core sprite animation plugin!" #define DEFAULT_CENTER 0.5f /*extern C3D_RenderTarget* Top; extern C3D_RenderTarget* TopRight; extern C3D_RenderTarget* Bottom;*/ extern u32 d7_hDown; extern u32 d7_hHeld; extern u32 d7_hUp; extern touchPosition d7_touch; extern std::string dspststus; extern bool rd7_do_splash; /// RenderD7 namespace RenderD7 { float GetDeltaTime(); enum kbd { SWKBD, BKBD }; enum kbd_type { NUMPAD, STANDARD }; struct TObject { int x; // Position X int y; // Position Y int w; // Button Width int h; // Button Height std::string text = ""; // Text float correctx = 0; // Correct X Position float correcty = 0; // Correct Y Position float txtsize = 0.7f; // Set Text Size }; class Scene { public: static std::stack> scenes; virtual ~Scene() {} virtual void Logic(u32 hDown, u32 hHeld, u32 hUp, touchPosition touch) = 0; virtual void Draw() const = 0; // virtual void Ovl() const = 0; static void Load(std::unique_ptr scene, bool fade = false); static void Back(); static void doDraw(); static void doLogic(u32 hDown, u32 hHeld, u32 hUp, touchPosition touch); // static void HandleOvl(); }; class RSettings : public RenderD7::Scene { private: void calculate_screens(const std::vector &lines, int &screen_index, int &screens); enum RState { RSETTINGS, RINFO, RSERVICES, RCLOG }; RenderD7::RSettings::RState m_state = RenderD7::RSettings::RState::RSETTINGS; mutable float txtposy = 30; int screens = 0; int screen_index = 0; std::vector lines; std::string rd7srstate = "false"; std::string mtovlstate = "false"; std::string fpsstate = "60"; std::string mtscreenstate = "Top"; std::string mttxtcolstate = "#ffffff"; std::string mtcola = "255"; std::string mttxtcola = "255"; std::vector buttons = { {20, 35, 120, 35, "RD7SR", -11, 10}, {20, 85, 120, 35, "Changelog", -27, 9}, {20, 135, 120, 35, "MT_OVL", -19, 10}, {20, 185, 120, 35, "FPS", 6, 10}, {180, 35, 120, 35, "MTSCREEN", -29, 10}, {180, 85, 120, 35, "DSPERR", -13, 10}, {180, 135, 120, 35, "INFO", 2, 10}, {180, 185, 120, 35, "Services", -13, 10}}; public: RSettings(); void Draw(void) const override; ~RSettings(); void Logic(u32 hDown, u32 hHeld, u32 hUp, touchPosition touch) override; }; void LoadSettings(); class DSP_NF : public RenderD7::Ovl { public: DSP_NF(); void Draw(void) const override; void Logic() override; private: int msgposy = 240; int delay = 0; }; int GetRandomInt(int b, int e); void DrawMetrikOvl(); bool DrawImageFromSheet(RenderD7::Sheet *sheet, size_t index, float x, float y, float scaleX = 1.0, float scaleY = 1.0); void DoNpiIntro(); /// @brief Fade In /// @param duration Duration in Frames void FadeIn(); /// @brief Fade Out /// @param duration Duration in Frames void FadeOut(); void FadeDisplay(); namespace Error { void DisplayError(std::string toptext, std::string errortext, int timesec = 3); void DisplayFatalError(std::string toptext, std::string errortext); } // namespace Error namespace Init { Result Main(std::string app_name = "RD7Game"); Result Minimal(std::string app_name = "RD7Game"); Result Reload(); void Graphics(); void NdspFirm(); } // namespace Init namespace Exit { void Main(); void Minimal(); void NdspFirm(); void Graphics(); } // namespace Exit namespace Msg { void Display(std::string titletxt, std::string subtext, C3D_RenderTarget *target); void DisplayWithProgress(std::string titletext, std::string subtext, float current, float total, u32 prgbarcolor); } // namespace Msg namespace Convert { inline float StringtoFloat(std::string inp) { return std::atof(inp.c_str()); } inline int StringtoInt(std::string inp) { return std::atoi(inp.c_str()); } inline bool FloatToBool(float inp) { if (inp == 1) return true; else return false; } } // namespace Convert struct DirContent { std::string name; std::string path; bool isDir; }; namespace FS { bool FileExist(const std::string &path); } bool IsNdspInit(); void SetupLog(void); std::string GetFramerate(); bool MainLoop(); void ExitApp(); void ClearTextBufs(void); std::string Kbd(int lenght, SwkbdType tp); void FrameEnd(); void ToggleRD7SR(); bool IsRD7SR(); struct TLBtn { int x; // Position X int y; // Position Y int w; // Button Width int h; // Button Height }; struct ScrollList1 { std::string Text = ""; }; struct ScrollList2 { float x; float y; float w; float h; std::string Text = ""; }; /*enum ListType { ONE, TWO };*/ void DrawList1(RenderD7::ScrollList1 &l, float txtsize, C3D_RenderTarget *t); void DrawTObjects(std::vector tobjects, u32 color, u32 txtcolor, int selection = -1, u32 selbgcolor = RenderD7::Color::Hex("#2D98AF"), u32 selcolor = RenderD7::Color::Hex("#000000")); void DrawSTObject(std::vector tobject, int tobjectindex, u32 color, u32 txtcolor); bool touchTObj(touchPosition touch, RenderD7::TObject button); bool touchTLBtn(touchPosition touch, RenderD7::TLBtn button); void DrawTLBtns(std::vector btns, u32 color, int selection = -1, u32 selbgcolor = RenderD7::Color::Hex("#2D98AF"), u32 selcolor = RenderD7::Color::Hex("#000000")); struct Checkbox { float x, y, s; bool is_chexked = false; u32 outcol, incol, chcol; }; void DrawCheckbox(Checkbox box); void GetDirContentsExt(std::vector &dircontent, const std::vector &extensions); void GetDirContents(std::vector &dircontent); } // namespace RenderD7