Garbage collection for rendered truetype fonts implemented. Added CREDITS file. Removed strange forward declare requirement on util file.
This commit is contained in:
parent
5331a3d443
commit
d9b1908985
22
Crawler/CREDITS
Normal file
22
Crawler/CREDITS
Normal file
@ -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
|
@ -132,6 +132,7 @@
|
|||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
<AdditionalIncludeDirectories>C:\Users\sigon\Documents\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>C:\Users\sigon\Documents\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalOptions>/MP8 %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@ -152,6 +153,7 @@
|
|||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
|
<AdditionalOptions>/MP8 %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@ -172,6 +174,7 @@
|
|||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
|
<AdditionalOptions>/MP8 %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@ -191,6 +194,7 @@
|
|||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
<AdditionalIncludeDirectories>C:\Users\sigon\Documents\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>C:\Users\sigon\Documents\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalOptions>/MP8 %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@ -215,6 +219,7 @@
|
|||||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
|
<AdditionalOptions>/MP8 %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@ -238,6 +243,7 @@
|
|||||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
|
<AdditionalOptions>/MP8 %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
|
@ -32,4 +32,13 @@ SUCH DAMAGE.
|
|||||||
Portions of this software are copyright © 2023 The FreeType
|
Portions of this software are copyright © 2023 The FreeType
|
||||||
Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
|
Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
|
||||||
All rights reserved.
|
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
|
||||||
*/
|
*/
|
||||||
|
@ -39,7 +39,7 @@ All rights reserved.
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_PATCH 1
|
#define VERSION_PATCH 1
|
||||||
#define VERSION_BUILD 3285
|
#define VERSION_BUILD 3298
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
@ -245,8 +245,8 @@ void VisualNovel::Draw(){
|
|||||||
vf2d dialogDisplaySize={game->GetScreenSize().x-48.f,20.f};
|
vf2d dialogDisplaySize={game->GetScreenSize().x-48.f,20.f};
|
||||||
Menu::DrawThemedWindow(dialogDisplayPos,dialogDisplaySize);
|
Menu::DrawThemedWindow(dialogDisplayPos,dialogDisplaySize);
|
||||||
FontRect speakerTextSize=font.GetStringBounds(speakerDisplayName);
|
FontRect speakerTextSize=font.GetStringBounds(speakerDisplayName);
|
||||||
game->DrawShadowStringDecal(font,nameDisplayPos-vf2d{10,8}+(nameDisplayWindowSize+vf2d{24,0})/2-speakerTextSize.size/2,speakerDisplayName);
|
game->DrawStringDecal(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,dialogDisplayPos-vf2d{10,10},activeText);
|
||||||
float yOffset=util::lerp(dialogDisplaySize.y+12,-8,textScrollTime/maxTextScrollTime);
|
float yOffset=util::lerp(dialogDisplaySize.y+12,-8,textScrollTime/maxTextScrollTime);
|
||||||
game->DrawPolygonDecal(
|
game->DrawPolygonDecal(
|
||||||
Menu::GetPatchPart(1,1).Decal(),
|
Menu::GetPatchPart(1,1).Decal(),
|
||||||
|
BIN
Crawler/assets/Habbo.ttf
Normal file
BIN
Crawler/assets/Habbo.ttf
Normal file
Binary file not shown.
BIN
Crawler/assets/LCDBlock.ttf
Normal file
BIN
Crawler/assets/LCDBlock.ttf
Normal file
Binary file not shown.
Binary file not shown.
BIN
Crawler/assets/Unknown.ttf
Normal file
BIN
Crawler/assets/Unknown.ttf
Normal file
Binary file not shown.
BIN
Crawler/assets/c64esque.ttf
Normal file
BIN
Crawler/assets/c64esque.ttf
Normal file
Binary file not shown.
@ -61,7 +61,13 @@ story_background_image_location = backgrounds/
|
|||||||
story_player_name = You
|
story_player_name = You
|
||||||
|
|
||||||
# Dialog font and size.
|
# Dialog font and size.
|
||||||
dialog_font_size = LessRoundBox,12
|
dialog_font_size = Habbo,12
|
||||||
|
|
||||||
|
# Location font and size.
|
||||||
|
location_font_size = Habbo,24
|
||||||
|
|
||||||
|
# Encrypted font and size.
|
||||||
|
encrypted_font_size = Unknown,16
|
||||||
|
|
||||||
# Whether or not to show individual data accesses from config data structure.
|
# Whether or not to show individual data accesses from config data structure.
|
||||||
debug_access_options = 0
|
debug_access_options = 0
|
||||||
|
@ -365,6 +365,11 @@ namespace olc {
|
|||||||
fallbacks.emplace_back(path, fontSize);
|
fallbacks.emplace_back(path, fontSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::u32string GetFontName(){
|
||||||
|
std::string name=fontFace->family_name;
|
||||||
|
return std::u32string(name.begin(),name.end());
|
||||||
|
}
|
||||||
|
|
||||||
static bool init() {
|
static bool init() {
|
||||||
FT_Error error = FT_Init_FreeType(&library);
|
FT_Error error = FT_Init_FreeType(&library);
|
||||||
|
|
||||||
|
@ -1026,6 +1026,7 @@ namespace olc
|
|||||||
// Specify which Sprite should be the target of drawing functions, use nullptr
|
// Specify which Sprite should be the target of drawing functions, use nullptr
|
||||||
// to specify the primary screen
|
// to specify the primary screen
|
||||||
void SetDrawTarget(Sprite* target);
|
void SetDrawTarget(Sprite* target);
|
||||||
|
float GetRuntime() const;
|
||||||
// Gets the current Frames Per Second
|
// Gets the current Frames Per Second
|
||||||
uint32_t GetFPS() const;
|
uint32_t GetFPS() const;
|
||||||
// Gets last update of elapsed time
|
// Gets last update of elapsed time
|
||||||
@ -1258,6 +1259,7 @@ namespace olc
|
|||||||
uint32_t nLastFPS = 0;
|
uint32_t nLastFPS = 0;
|
||||||
bool bPixelCohesion = false;
|
bool bPixelCohesion = false;
|
||||||
DecalMode nDecalMode = DecalMode::NORMAL;
|
DecalMode nDecalMode = DecalMode::NORMAL;
|
||||||
|
float fRunTime = 0.0f;
|
||||||
DecalStructure nDecalStructure = DecalStructure::FAN;
|
DecalStructure nDecalStructure = DecalStructure::FAN;
|
||||||
std::function<olc::Pixel(const int x, const int y, const olc::Pixel&, const olc::Pixel&)> funcPixelMode;
|
std::function<olc::Pixel(const int x, const int y, const olc::Pixel&, const olc::Pixel&)> funcPixelMode;
|
||||||
std::chrono::time_point<std::chrono::system_clock> m_tp1, m_tp2;
|
std::chrono::time_point<std::chrono::system_clock> m_tp1, m_tp2;
|
||||||
@ -2119,6 +2121,9 @@ namespace olc
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float PixelGameEngine::GetRuntime() const
|
||||||
|
{ return fRunTime; }
|
||||||
|
|
||||||
uint32_t PixelGameEngine::GetFPS() const
|
uint32_t PixelGameEngine::GetFPS() const
|
||||||
{ return nLastFPS; }
|
{ 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){
|
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;
|
if(sText.length()==0)return;
|
||||||
static Decal*temp=nullptr;
|
static std::map<std::u32string,DecalData>garbageCollector;
|
||||||
if(temp!=nullptr){
|
std::u32string key=font.GetFontName()+U"_"+sText;
|
||||||
delete temp;
|
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);
|
||||||
}
|
}
|
||||||
temp=font.RenderStringToDecal(sText,col);
|
garbageCollector[key].expireTime=GetRuntime()+120.0f;
|
||||||
DrawDecal(pos,temp,scale/4,col);
|
std::erase_if(garbageCollector,[&](auto&key){
|
||||||
|
if(key.second.expireTime<GetRuntime()){
|
||||||
|
delete key.second.decal;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
DrawDecal(pos,garbageCollector[key].decal,scale/4,col);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelGameEngine::DrawShadowStringDecal(Font&font, const olc::vf2d& pos, const std::u32string& sText, const Pixel col, const Pixel shadowCol, const olc::vf2d& scale,const float shadowSizeFactor){
|
void PixelGameEngine::DrawShadowStringDecal(Font&font, const olc::vf2d& pos, const std::u32string& sText, const Pixel col, const Pixel shadowCol, const olc::vf2d& scale,const float shadowSizeFactor){
|
||||||
|
struct DecalData{
|
||||||
|
Decal*decal;
|
||||||
|
float expireTime=0.0f;
|
||||||
|
};
|
||||||
if(sText.length()==0)return;
|
if(sText.length()==0)return;
|
||||||
static Decal*temp=nullptr;
|
static std::map<std::u32string,DecalData>garbageCollector;
|
||||||
if(temp!=nullptr){
|
std::u32string key=font.GetFontName()+U"_"+sText;
|
||||||
delete temp;
|
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);
|
||||||
}
|
}
|
||||||
temp=font.RenderStringToDecal(sText,col);
|
garbageCollector[key].expireTime=GetRuntime()+120.0f;
|
||||||
|
std::erase_if(garbageCollector,[&](auto&key){
|
||||||
|
if(key.second.expireTime<GetRuntime()){
|
||||||
|
delete key.second.decal;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
for(float y=-shadowSizeFactor;y<=shadowSizeFactor+0.1;y+=shadowSizeFactor/2){
|
for(float y=-shadowSizeFactor;y<=shadowSizeFactor+0.1;y+=shadowSizeFactor/2){
|
||||||
for(float x=-shadowSizeFactor;x<=shadowSizeFactor+0.1;x+=shadowSizeFactor/2){
|
for(float x=-shadowSizeFactor;x<=shadowSizeFactor+0.1;x+=shadowSizeFactor/2){
|
||||||
if(x!=0||y!=0){
|
if(x!=0||y!=0){
|
||||||
DrawDecal(pos+vf2d{x,y},temp,scale/4,shadowCol);
|
DrawDecal(pos+vf2d{x,y},garbageCollector[key].decal,scale/4,shadowCol);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DrawDecal(pos,temp,scale/4,col);
|
DrawDecal(pos,garbageCollector[key].decal,scale/4,col);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelGameEngine::DrawShadowStringPropDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col, const Pixel shadowCol, const olc::vf2d& scale,const float shadowSizeFactor){
|
void PixelGameEngine::DrawShadowStringPropDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col, const Pixel shadowCol, const olc::vf2d& scale,const float shadowSizeFactor){
|
||||||
@ -3990,6 +4019,7 @@ namespace olc
|
|||||||
// Our time per frame coefficient
|
// Our time per frame coefficient
|
||||||
float fElapsedTime = elapsedTime.count();
|
float fElapsedTime = elapsedTime.count();
|
||||||
fLastElapsed = fElapsedTime;
|
fLastElapsed = fElapsedTime;
|
||||||
|
fRunTime += fElapsedTime;
|
||||||
|
|
||||||
if (bConsoleSuspendTime)
|
if (bConsoleSuspendTime)
|
||||||
fElapsedTime = 0.0f;
|
fElapsedTime = 0.0f;
|
||||||
|
@ -38,13 +38,8 @@ All rights reserved.
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "olcUTIL_Geometry2D.h"
|
#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).
|
//Returns 0-range (as a float).
|
||||||
float random(float range);
|
float random(float range);
|
||||||
//Returns a normalized vector pointing from posFrom towards posTo.
|
//Returns a normalized vector pointing from posFrom towards posTo.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user