From d9b19089855aa7873b97aec3bd2f95de791e7d4c Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Wed, 29 Nov 2023 16:43:41 -0600 Subject: [PATCH] Garbage collection for rendered truetype fonts implemented. Added CREDITS file. Removed strange forward declare requirement on util file. --- Crawler/CREDITS | 22 ++++++++++ Crawler/Crawler.vcxproj | 6 +++ Crawler/LICENSE | 9 ++++ Crawler/Version.h | 2 +- Crawler/VisualNovel.cpp | 4 +- Crawler/assets/Habbo.ttf | Bin 0 -> 10308 bytes Crawler/assets/LCDBlock.ttf | Bin 0 -> 32452 bytes Crawler/assets/LessRoundBox.ttf | Bin 12540 -> 0 bytes Crawler/assets/Unknown.ttf | Bin 0 -> 13636 bytes Crawler/assets/c64esque.ttf | Bin 0 -> 34984 bytes Crawler/assets/config/configuration.txt | 8 +++- Crawler/olcPGEX_TTF.h | 5 +++ Crawler/olcPixelGameEngine.h | 56 ++++++++++++++++++------ Crawler/util.h | 7 +-- 14 files changed, 96 insertions(+), 23 deletions(-) create mode 100644 Crawler/CREDITS create mode 100644 Crawler/assets/Habbo.ttf create mode 100644 Crawler/assets/LCDBlock.ttf delete mode 100644 Crawler/assets/LessRoundBox.ttf create mode 100644 Crawler/assets/Unknown.ttf create mode 100644 Crawler/assets/c64esque.ttf diff --git a/Crawler/CREDITS b/Crawler/CREDITS new file mode 100644 index 00000000..37dfffac --- /dev/null +++ b/Crawler/CREDITS @@ -0,0 +1,22 @@ +*** Minifantasy - Tiny Overworld v1.0 *** + +Minifantasy is an original idea by Krishna Palacio + +ERA OF FANTASY - GRASSLANDS + +https://twitter.com/Namatnieks +https://aamatniekss.itch.io/grasslands-era-of-fantasy-pixelart-asset-pack + + +Portions of this software are copyright © 2023 The FreeType +Project (www.freetype.org). Please see LICENSE_FT.txt for more information. +All rights reserved. + +Fonts used are public domain, however authors are credited as such: +c64esque by andraaspar +Habbo by Omni +Unknown by Anonymous + +Fonts obtained from: +Nb Pixel Font Bundle: https://nimblebeastscollective.itch.io/nb-pixel-font-bundle +Nb Pixel Font Bundle 2: https://nimblebeastscollective.itch.io/nb-pixel-font-bundle-2 \ No newline at end of file diff --git a/Crawler/Crawler.vcxproj b/Crawler/Crawler.vcxproj index 1a4336cd..e10554d5 100644 --- a/Crawler/Crawler.vcxproj +++ b/Crawler/Crawler.vcxproj @@ -132,6 +132,7 @@ true stdcpp20 C:\Users\sigon\Documents\include;%(AdditionalIncludeDirectories) + /MP8 %(AdditionalOptions) Console @@ -152,6 +153,7 @@ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 + /MP8 %(AdditionalOptions) Console @@ -172,6 +174,7 @@ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 + /MP8 %(AdditionalOptions) Console @@ -191,6 +194,7 @@ true stdcpp20 C:\Users\sigon\Documents\include;%(AdditionalIncludeDirectories) + /MP8 %(AdditionalOptions) Console @@ -215,6 +219,7 @@ NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 + /MP8 %(AdditionalOptions) Console @@ -238,6 +243,7 @@ NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true stdcpp20 + /MP8 %(AdditionalOptions) Console diff --git a/Crawler/LICENSE b/Crawler/LICENSE index 2eba1401..2d3bac43 100644 --- a/Crawler/LICENSE +++ b/Crawler/LICENSE @@ -32,4 +32,13 @@ SUCH DAMAGE. Portions of this software are copyright © 2023 The FreeType Project (www.freetype.org). Please see LICENSE_FT.txt for more information. All rights reserved. + +Fonts used are public domain, however authors are credited as such: +c64esque by andraaspar +Habbo by Omni +Unknown by Anonymous + +Fonts obtained from: +Nb Pixel Font Bundle: https://nimblebeastscollective.itch.io/nb-pixel-font-bundle +Nb Pixel Font Bundle 2: https://nimblebeastscollective.itch.io/nb-pixel-font-bundle-2 */ diff --git a/Crawler/Version.h b/Crawler/Version.h index 1052f3a8..4deef484 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -39,7 +39,7 @@ All rights reserved. #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 1 -#define VERSION_BUILD 3285 +#define VERSION_BUILD 3298 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Crawler/VisualNovel.cpp b/Crawler/VisualNovel.cpp index 9327a793..acd670f3 100644 --- a/Crawler/VisualNovel.cpp +++ b/Crawler/VisualNovel.cpp @@ -245,8 +245,8 @@ void VisualNovel::Draw(){ vf2d dialogDisplaySize={game->GetScreenSize().x-48.f,20.f}; Menu::DrawThemedWindow(dialogDisplayPos,dialogDisplaySize); FontRect speakerTextSize=font.GetStringBounds(speakerDisplayName); - game->DrawShadowStringDecal(font,nameDisplayPos-vf2d{10,8}+(nameDisplayWindowSize+vf2d{24,0})/2-speakerTextSize.size/2,speakerDisplayName); - game->DrawShadowStringDecal(font,dialogDisplayPos-vf2d{10,10},activeText); + game->DrawStringDecal(font,nameDisplayPos-vf2d{10,8}+(nameDisplayWindowSize+vf2d{24,0})/2-speakerTextSize.size/2,speakerDisplayName); + game->DrawStringDecal(font,dialogDisplayPos-vf2d{10,10},activeText); float yOffset=util::lerp(dialogDisplaySize.y+12,-8,textScrollTime/maxTextScrollTime); game->DrawPolygonDecal( Menu::GetPatchPart(1,1).Decal(), diff --git a/Crawler/assets/Habbo.ttf b/Crawler/assets/Habbo.ttf new file mode 100644 index 0000000000000000000000000000000000000000..77075e4af1c4848f833ba4f85b776f14f96cd848 GIT binary patch literal 10308 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 literal 0 HcmV?d00001 diff --git a/Crawler/assets/LCDBlock.ttf b/Crawler/assets/LCDBlock.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cedde0b5366466621d38cc64e95dad08ded19aaa GIT binary patch literal 32452 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 F{~zH)74-lB literal 0 HcmV?d00001 diff --git a/Crawler/assets/LessRoundBox.ttf b/Crawler/assets/LessRoundBox.ttf deleted file mode 100644 index d030f4b71c8c561fd49229e71d81430e28e0791f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12540 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 literal 0 HcmV?d00001 diff --git a/Crawler/assets/c64esque.ttf b/Crawler/assets/c64esque.ttf new file mode 100644 index 0000000000000000000000000000000000000000..78de3a5891376b52034d9296109c686b274e0a99 GIT binary patch literal 34984 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 zJkPp0family_name; + return std::u32string(name.begin(),name.end()); + } + static bool init() { FT_Error error = FT_Init_FreeType(&library); diff --git a/Crawler/olcPixelGameEngine.h b/Crawler/olcPixelGameEngine.h index 46c50f28..a7d945c2 100644 --- a/Crawler/olcPixelGameEngine.h +++ b/Crawler/olcPixelGameEngine.h @@ -1026,6 +1026,7 @@ namespace olc // Specify which Sprite should be the target of drawing functions, use nullptr // to specify the primary screen void SetDrawTarget(Sprite* target); + float GetRuntime() const; // Gets the current Frames Per Second uint32_t GetFPS() const; // Gets last update of elapsed time @@ -1258,6 +1259,7 @@ namespace olc uint32_t nLastFPS = 0; bool bPixelCohesion = false; DecalMode nDecalMode = DecalMode::NORMAL; + float fRunTime = 0.0f; DecalStructure nDecalStructure = DecalStructure::FAN; std::function funcPixelMode; std::chrono::time_point m_tp1, m_tp2; @@ -2119,6 +2121,9 @@ namespace olc return 0; } + float PixelGameEngine::GetRuntime() const + { return fRunTime; } + uint32_t PixelGameEngine::GetFPS() const { return nLastFPS; } @@ -3339,30 +3344,54 @@ namespace olc } void PixelGameEngine::DrawStringDecal(Font&font, const olc::vf2d& pos, const std::u32string& sText, const Pixel col, const olc::vf2d& scale){ + struct DecalData{ + Decal*decal; + float expireTime=0.0f; + }; if(sText.length()==0)return; - static Decal*temp=nullptr; - if(temp!=nullptr){ - delete temp; - } - temp=font.RenderStringToDecal(sText,col); - DrawDecal(pos,temp,scale/4,col); + static std::mapgarbageCollector; + std::u32string key=font.GetFontName()+U"_"+sText; + if(!garbageCollector.count(key)){ //If the text key already exists, don't have to recreate the decal, just update the expire time. + garbageCollector[key].decal=font.RenderStringToDecal(sText,WHITE); + } + garbageCollector[key].expireTime=GetRuntime()+120.0f; + std::erase_if(garbageCollector,[&](auto&key){ + if(key.second.expireTimegarbageCollector; + std::u32string key=font.GetFontName()+U"_"+sText; + if(!garbageCollector.count(key)){ //If the text key already exists, don't have to recreate the decal, just update the expire time. + garbageCollector[key].decal=font.RenderStringToDecal(sText,WHITE); + } + garbageCollector[key].expireTime=GetRuntime()+120.0f; + std::erase_if(garbageCollector,[&](auto&key){ + if(key.second.expireTime #include "olcUTIL_Geometry2D.h" -#if defined(__EMSCRIPTEN__) - #include "olcPGEX_TTF.h" -#else - class olc::Font; -#endif -namespace util{ +namespace olc::util{ //Returns 0-range (as a float). float random(float range); //Returns a normalized vector pointing from posFrom towards posTo.