mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-08 15:44:56 +00:00
More CThardus
This commit is contained in:
@@ -48,7 +48,7 @@ void ViewManager::TestGameView::resized(const boo::SWindowRect& root, const boo:
|
||||
|
||||
void ViewManager::TestGameView::draw(boo::IGraphicsCommandQueue* gfxQ) {
|
||||
m_vm.m_projManager.mainDraw();
|
||||
if (m_debugText && g_StateManager && g_StateManager->Player())
|
||||
if (m_debugText)
|
||||
m_debugText->draw(gfxQ);
|
||||
}
|
||||
|
||||
@@ -60,68 +60,75 @@ void ViewManager::TestGameView::think() {
|
||||
m_debugText->resized(rootView().subRect(), sub);
|
||||
}
|
||||
|
||||
if (m_debugText && g_StateManager) {
|
||||
if (m_debugText) {
|
||||
std::string overlayText;
|
||||
const hecl::CVar* showFrameIdx = hecl::CVarManager::instance()->findCVar("debugOverlay.showFrameCounter");
|
||||
const hecl::CVar* playerInfo = hecl::CVarManager::instance()->findCVar("debugOverlay.playerInfo");
|
||||
const hecl::CVar* worldInfo = hecl::CVarManager::instance()->findCVar("debugOverlay.worldInfo");
|
||||
const hecl::CVar* areaInfo = hecl::CVarManager::instance()->findCVar("debugOverlay.areaInfo");
|
||||
const hecl::CVar* showInGameTime = hecl::CVarManager::instance()->findCVar("debugOverlay.showInGameTime");
|
||||
if (showFrameIdx && showFrameIdx->toBoolean())
|
||||
overlayText += fmt::format(fmt("Frame: {}\n"), g_StateManager->GetUpdateFrameIndex());
|
||||
const hecl::CVar* showResourceStats = hecl::CVarManager::instance()->findCVar("debugOverlay.showResourceStats");
|
||||
if (g_StateManager) {
|
||||
if (showFrameIdx && showFrameIdx->toBoolean())
|
||||
overlayText += fmt::format(fmt("Frame: {}\n"), g_StateManager->GetUpdateFrameIndex());
|
||||
|
||||
if (showInGameTime && showInGameTime->toBoolean()) {
|
||||
double igt = g_GameState->GetTotalPlayTime();
|
||||
u32 ms = u64(igt * 1000) % 1000;
|
||||
auto pt = std::div(igt, 3600);
|
||||
overlayText += fmt::format(fmt("PlayTime: {:02d}:{:02d}:{:02d}.{:03d}\n"), pt.quot, pt.rem / 60, pt.rem % 60,
|
||||
ms);
|
||||
}
|
||||
if (g_StateManager->Player() && playerInfo && playerInfo->toBoolean()) {
|
||||
const CPlayer& pl = g_StateManager->GetPlayer();
|
||||
const zeus::CQuaternion plQ = zeus::CQuaternion(pl.GetTransform().getRotation().buildMatrix3f());
|
||||
const zeus::CTransform camXf = g_StateManager->GetCameraManager()->GetCurrentCameraTransform(*g_StateManager);
|
||||
const zeus::CQuaternion camQ = zeus::CQuaternion(camXf.getRotation().buildMatrix3f());
|
||||
overlayText +=
|
||||
fmt::format(fmt("Player Position: x {}, y {}, z {}\n"
|
||||
" Roll: {}, Pitch: {}, Yaw: {}\n"
|
||||
" Momentum: x {}, y: {}, z: {}\n"
|
||||
" Velocity: x {}, y: {}, z: {}\n"
|
||||
"Camera Position: x {}, y {}, z {}\n"
|
||||
" Roll: {}, Pitch: {}, Yaw: {}\n"),
|
||||
pl.GetTranslation().x(), pl.GetTranslation().y(), pl.GetTranslation().z(),
|
||||
zeus::radToDeg(plQ.roll()), zeus::radToDeg(plQ.pitch()), zeus::radToDeg(plQ.yaw()),
|
||||
pl.GetMomentum().x(), pl.GetMomentum().y(), pl.GetMomentum().z(), pl.GetVelocity().x(),
|
||||
pl.GetVelocity().y(), pl.GetVelocity().z(), camXf.origin.x(), camXf.origin.y(), camXf.origin.z(),
|
||||
zeus::radToDeg(camQ.roll()), zeus::radToDeg(camQ.pitch()), zeus::radToDeg(camQ.yaw()));
|
||||
}
|
||||
if (worldInfo && worldInfo->toBoolean()) {
|
||||
TLockedToken<CStringTable> tbl =
|
||||
g_SimplePool->GetObj({FOURCC('STRG'), g_StateManager->GetWorld()->IGetStringTableAssetId()});
|
||||
const urde::TAreaId aId = g_GameState->CurrentWorldState().GetCurrentAreaId();
|
||||
overlayText += fmt::format(fmt("World: 0x{}{}, Area: {}\n"), g_GameState->CurrentWorldAssetId(),
|
||||
(tbl.IsLoaded() ? (" " + hecl::Char16ToUTF8(tbl->GetString(0))).c_str() : ""), aId);
|
||||
}
|
||||
|
||||
const urde::TAreaId aId = g_GameState->CurrentWorldState().GetCurrentAreaId();
|
||||
if (areaInfo && areaInfo->toBoolean() && g_StateManager->GetWorld() &&
|
||||
g_StateManager->GetWorld()->DoesAreaExist(aId)) {
|
||||
const auto& layerStates = g_GameState->CurrentWorldState().GetLayerState();
|
||||
std::string layerBits;
|
||||
u32 totalActive = 0;
|
||||
for (u32 i = 0; i < layerStates->GetAreaLayerCount(aId); ++i) {
|
||||
if (layerStates->IsLayerActive(aId, i)) {
|
||||
++totalActive;
|
||||
layerBits += "1";
|
||||
} else
|
||||
layerBits += "0";
|
||||
if (showInGameTime && showInGameTime->toBoolean()) {
|
||||
double igt = g_GameState->GetTotalPlayTime();
|
||||
u32 ms = u64(igt * 1000) % 1000;
|
||||
auto pt = std::div(igt, 3600);
|
||||
overlayText +=
|
||||
fmt::format(fmt("PlayTime: {:02d}:{:02d}:{:02d}.{:03d}\n"), pt.quot, pt.rem / 60, pt.rem % 60, ms);
|
||||
}
|
||||
|
||||
if (g_StateManager->Player() && playerInfo && playerInfo->toBoolean()) {
|
||||
const CPlayer& pl = g_StateManager->GetPlayer();
|
||||
const zeus::CQuaternion plQ = zeus::CQuaternion(pl.GetTransform().getRotation().buildMatrix3f());
|
||||
const zeus::CTransform camXf = g_StateManager->GetCameraManager()->GetCurrentCameraTransform(*g_StateManager);
|
||||
const zeus::CQuaternion camQ = zeus::CQuaternion(camXf.getRotation().buildMatrix3f());
|
||||
overlayText += fmt::format(fmt("Player Position: x {}, y {}, z {}\n"
|
||||
" Roll: {}, Pitch: {}, Yaw: {}\n"
|
||||
" Momentum: x {}, y: {}, z: {}\n"
|
||||
" Velocity: x {}, y: {}, z: {}\n"
|
||||
"Camera Position: x {}, y {}, z {}\n"
|
||||
" Roll: {}, Pitch: {}, Yaw: {}\n"),
|
||||
pl.GetTranslation().x(), pl.GetTranslation().y(), pl.GetTranslation().z(),
|
||||
zeus::radToDeg(plQ.roll()), zeus::radToDeg(plQ.pitch()), zeus::radToDeg(plQ.yaw()),
|
||||
pl.GetMomentum().x(), pl.GetMomentum().y(), pl.GetMomentum().z(),
|
||||
pl.GetVelocity().x(), pl.GetVelocity().y(), pl.GetVelocity().z(), camXf.origin.x(),
|
||||
camXf.origin.y(), camXf.origin.z(), zeus::radToDeg(camQ.roll()),
|
||||
zeus::radToDeg(camQ.pitch()), zeus::radToDeg(camQ.yaw()));
|
||||
}
|
||||
if (worldInfo && worldInfo->toBoolean()) {
|
||||
TLockedToken<CStringTable> tbl =
|
||||
g_SimplePool->GetObj({FOURCC('STRG'), g_StateManager->GetWorld()->IGetStringTableAssetId()});
|
||||
const urde::TAreaId aId = g_GameState->CurrentWorldState().GetCurrentAreaId();
|
||||
overlayText += fmt::format(fmt("World: 0x{}{}, Area: {}\n"), g_GameState->CurrentWorldAssetId(),
|
||||
(tbl.IsLoaded() ? (" " + hecl::Char16ToUTF8(tbl->GetString(0))).c_str() : ""), aId);
|
||||
}
|
||||
|
||||
const urde::TAreaId aId = g_GameState->CurrentWorldState().GetCurrentAreaId();
|
||||
if (areaInfo && areaInfo->toBoolean() && g_StateManager->GetWorld() &&
|
||||
g_StateManager->GetWorld()->DoesAreaExist(aId)) {
|
||||
const auto& layerStates = g_GameState->CurrentWorldState().GetLayerState();
|
||||
std::string layerBits;
|
||||
u32 totalActive = 0;
|
||||
for (u32 i = 0; i < layerStates->GetAreaLayerCount(aId); ++i) {
|
||||
if (layerStates->IsLayerActive(aId, i)) {
|
||||
++totalActive;
|
||||
layerBits += "1";
|
||||
} else
|
||||
layerBits += "0";
|
||||
}
|
||||
overlayText += fmt::format(fmt("Area AssetId: 0x{}, Total Objects: {}\n"
|
||||
"Active Layer bits: {}\n"),
|
||||
g_StateManager->GetWorld()->GetArea(aId)->GetAreaAssetId(),
|
||||
g_StateManager->GetAllObjectList().size(), layerBits);
|
||||
}
|
||||
overlayText += fmt::format(fmt("Area AssetId: 0x{}, Total Objects: {}\n"
|
||||
"Active Layer bits: {}\n"),
|
||||
g_StateManager->GetWorld()->GetArea(aId)->GetAreaAssetId(),
|
||||
g_StateManager->GetAllObjectList().size(), layerBits);
|
||||
}
|
||||
|
||||
if (showResourceStats && showResourceStats->toBoolean())
|
||||
overlayText += fmt::format(fmt("Resource Objects: {}\n"), g_SimplePool->GetLiveObjects());
|
||||
|
||||
if (!overlayText.empty())
|
||||
m_debugText->typesetGlyphs(overlayText);
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
#include "hecl/Console.hpp"
|
||||
|
||||
static logvisor::Module AthenaLog("Athena");
|
||||
static void AthenaExc(athena::error::Level level, const char* file, const char*, int line,
|
||||
fmt::string_view fmt, fmt::format_args args) {
|
||||
static void AthenaExc(athena::error::Level level, const char* file, const char*, int line, fmt::string_view fmt,
|
||||
fmt::format_args args) {
|
||||
AthenaLog.vreport(logvisor::Level(level), fmt, args);
|
||||
}
|
||||
|
||||
@@ -55,8 +55,11 @@ struct Application : boo::IApplicationCallback {
|
||||
|
||||
std::atomic_bool m_running = {true};
|
||||
|
||||
Application() : m_fileMgr(_SYS_STR("urde")), m_cvarManager(m_fileMgr), m_cvarCommons(m_cvarManager),
|
||||
m_viewManager(std::make_unique<ViewManager>(m_fileMgr, m_cvarManager)) {}
|
||||
Application()
|
||||
: m_fileMgr(_SYS_STR("urde"))
|
||||
, m_cvarManager(m_fileMgr)
|
||||
, m_cvarCommons(m_cvarManager)
|
||||
, m_viewManager(std::make_unique<ViewManager>(m_fileMgr, m_cvarManager)) {}
|
||||
|
||||
virtual ~Application() = default;
|
||||
|
||||
@@ -127,6 +130,9 @@ struct Application : boo::IApplicationCallback {
|
||||
hecl::CVar::EFlags::Game | hecl::CVar::EFlags::Archive | hecl::CVar::EFlags::ReadOnly);
|
||||
m_cvarManager.findOrMakeCVar("debugOverlay.showInGameTime"sv, "Displays the current in game time"sv, false,
|
||||
hecl::CVar::EFlags::Game | hecl::CVar::EFlags::Archive | hecl::CVar::EFlags::ReadOnly);
|
||||
m_cvarManager.findOrMakeCVar("debugOverlay.showResourceStats"sv,
|
||||
"Displays the current live resource object and token counts"sv, false,
|
||||
hecl::CVar::EFlags::Game | hecl::CVar::EFlags::Archive | hecl::CVar::EFlags::ReadOnly);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -139,9 +145,8 @@ static void SetupBasics(bool logging) {
|
||||
auto result = zeus::validateCPU();
|
||||
if (!result.first) {
|
||||
#if _WIN32 && !WINDOWS_STORE
|
||||
std::wstring msg = fmt::format(
|
||||
fmt(L"ERROR: This build of URDE requires the following CPU features:\n{}\n"),
|
||||
urde::CPUFeatureString(result.second));
|
||||
std::wstring msg = fmt::format(fmt(L"ERROR: This build of URDE requires the following CPU features:\n{}\n"),
|
||||
urde::CPUFeatureString(result.second));
|
||||
MessageBoxW(nullptr, msg.c_str(), L"CPU error", MB_OK | MB_ICONERROR);
|
||||
#else
|
||||
fmt::print(stderr, fmt("ERROR: This build of URDE requires the following CPU features:\n{}\n"),
|
||||
|
||||
Reference in New Issue
Block a user