summaryrefslogtreecommitdiff
path: root/src/port/Engine.cpp
diff options
context:
space:
mode:
authorMalkierian <malkierian@live.com>2025-02-04 11:43:20 -0700
committerGitHub <noreply@github.com>2025-02-04 11:43:20 -0700
commit695879c4cb6e09dae01eb6f204359619c177b79e (patch)
treef4b76c257c7450d0890357cf1659b3eb8e524c79 /src/port/Engine.cpp
parent301bbd3cd9d899baf8bb16b88675f1ff3d6d7f19 (diff)
Modern Menu (#183)
* Add modern menu. Add and include LUS cvars .cmake file for macro usage in modern menu. * Un-ignore new .cmake * Copy new Resolution Editor stuff from 2ship (incomplete). Fix fullscreen checkbox. Finish changes for new UIWidgets. Cleanup ShipUtils. * Remove duplicate asm-differ entry from .gitmodules. * Re-implement Freecam options. * Cleanup freecam character follow buttons. Partially re-implement Multiplayer window as enhancement sidebar (needs text input widget to finish). Cleanup disables. --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
Diffstat (limited to 'src/port/Engine.cpp')
-rw-r--r--src/port/Engine.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp
index fd6db00b4..b180f3202 100644
--- a/src/port/Engine.cpp
+++ b/src/port/Engine.cpp
@@ -18,6 +18,9 @@
#include "resource/importers/UnkActorSpawnDataFactory.h"
#include "resource/importers/ArrayFactory.h"
#include <Fast3D/Fast3dWindow.h>
+#include <Fonts.h>
+#include "window/gui/resource/Font.h"
+#include "window/gui/resource/FontFactory.h"
#include <Fast3D/gfx_pc.h>
#include <Fast3D/gfx_rendering_api.h>
@@ -139,6 +142,14 @@ GameEngine::GameEngine() {
loader->RegisterResourceFactory(std::make_shared<MK64::ResourceFactoryBinaryUnkActorSpawnDataV0>(),
RESOURCE_FORMAT_BINARY, "UnkSpawnData",
static_cast<uint32_t>(MK64::ResourceType::UnkSpawnData), 0);
+
+ fontMono = CreateFontWithSize(16.0f, "fonts/Inconsolata-Regular.ttf");
+ fontMonoLarger = CreateFontWithSize(20.0f, "fonts/Inconsolata-Regular.ttf");
+ fontMonoLargest = CreateFontWithSize(24.0f, "fonts/Inconsolata-Regular.ttf");
+ fontStandard = CreateFontWithSize(16.0f, "fonts/Montserrat-Regular.ttf");
+ fontStandardLarger = CreateFontWithSize(20.0f, "fonts/Montserrat-Regular.ttf");
+ fontStandardLargest = CreateFontWithSize(24.0f, "fonts/Montserrat-Regular.ttf");
+ ImGui::GetIO().FontDefault = fontMono;
}
void GameEngine::Create() {
@@ -296,6 +307,37 @@ uint8_t GameEngine::GetBankIdByName(const std::string& name) {
return 0;
}
+ImFont* GameEngine::CreateFontWithSize(float size, std::string fontPath) {
+ auto mImGuiIo = &ImGui::GetIO();
+ ImFont* font;
+ if (fontPath == "") {
+ ImFontConfig fontCfg = ImFontConfig();
+ fontCfg.OversampleH = fontCfg.OversampleV = 1;
+ fontCfg.PixelSnapH = true;
+ fontCfg.SizePixels = size;
+ font = mImGuiIo->Fonts->AddFontDefault(&fontCfg);
+ } else {
+ auto initData = std::make_shared<Ship::ResourceInitData>();
+ initData->Format = RESOURCE_FORMAT_BINARY;
+ initData->Type = static_cast<uint32_t>(RESOURCE_TYPE_FONT);
+ initData->ResourceVersion = 0;
+ initData->Path = fontPath;
+ std::shared_ptr<Ship::Font> fontData = std::static_pointer_cast<Ship::Font>(
+ Ship::Context::GetInstance()->GetResourceManager()->LoadResource(fontPath, false, initData));
+ font = mImGuiIo->Fonts->AddFontFromMemoryTTF(fontData->Data, fontData->DataSize, size);
+ }
+ // FontAwesome fonts need to have their sizes reduced by 2.0f/3.0f in order to align correctly
+ float iconFontSize = size * 2.0f / 3.0f;
+ static const ImWchar sIconsRanges[] = { ICON_MIN_FA, ICON_MAX_16_FA, 0 };
+ ImFontConfig iconsConfig;
+ iconsConfig.MergeMode = true;
+ iconsConfig.PixelSnapH = true;
+ iconsConfig.GlyphMinAdvanceX = iconFontSize;
+ mImGuiIo->Fonts->AddFontFromMemoryCompressedBase85TTF(fontawesome_compressed_data_base85, iconFontSize,
+ &iconsConfig, sIconsRanges);
+ return font;
+}
+
// End
extern "C" uint32_t GameEngine_GetSampleRate() {