diff --git a/compat/AKeyCodes.hpp b/compat/AKeyCodes.hpp index f850219..f6e649f 100644 --- a/compat/AKeyCodes.hpp +++ b/compat/AKeyCodes.hpp @@ -58,6 +58,9 @@ enum AKEYCODE_APOSTROPHE = VK_OEM_7, // ''"' AKEYCODE_SPACE = VK_SPACE, + AKEYCODE_F3 = VK_F3, + AKEYCODE_F4 = VK_F4, + AKEYCODE_0 = '0', AKEYCODE_1 = '1', //... @@ -72,7 +75,6 @@ enum AKEYCODE_T = 'T', AKEYCODE_Z = 'Z', - AKEYCODE_F4 = VK_F4, }; // this sucks @@ -128,6 +130,7 @@ enum AKEYCODE_Q, AKEYCODE_T, AKEYCODE_Z, + AKEYCODE_F3, AKEYCODE_F4, AKEYCODE_ARROW_LEFT, AKEYCODE_ARROW_RIGHT, @@ -137,6 +140,8 @@ enum static inline int translate_sdl_key_to_mcpe(int key) { switch (key) { case SDLK_ESCAPE: return AKEYCODE_MENU; + case SDLK_F3: return AKEYCODE_F3; + case SDLK_F4: return AKEYCODE_F4; case SDLK_F5: return AKEYCODE_SEARCH; case SDLK_y: return AKEYCODE_BACK; case SDLK_u: return AKEYCODE_BUTTON_X; @@ -176,7 +181,6 @@ static inline int translate_sdl_key_to_mcpe(int key) { case SDLK_q: return AKEYCODE_Q; case SDLK_t: return AKEYCODE_T; case SDLK_z: return AKEYCODE_Z; - case SDLK_F4: return AKEYCODE_F4; case SDLK_LEFT: return AKEYCODE_ARROW_LEFT; case SDLK_RIGHT: return AKEYCODE_ARROW_RIGHT; case SDLK_RETURN: return AKEYCODE_ENTER; diff --git a/source/Minecraft.cpp b/source/Minecraft.cpp index 0c6ed48..8287803 100644 --- a/source/Minecraft.cpp +++ b/source/Minecraft.cpp @@ -466,6 +466,10 @@ void Minecraft::tickInput() m_pLocalPlayer->drop(&inst); } } + else if (keyCode == AKEYCODE_F3) + { + m_options.m_bDebugText = !m_options.m_bDebugText; + } #ifdef ENH_ALLOW_AO else if (keyCode == AKEYCODE_F4) { @@ -555,6 +559,11 @@ void Minecraft::sendMessage(const std::string& message) } } +std::string Minecraft::getVersionString() +{ + return "v0.1.0 alpha"; +} + void Minecraft::_levelGenerated() { if (m_pNetEventCallback) @@ -987,6 +996,11 @@ ItemInstance* Minecraft::getSelectedItem() return &m_CurrItemInstance; } +int Minecraft::getFpsIntlCounter() +{ + return 0; +} + void Minecraft::leaveGame(bool bCopyMap) { m_bPreparingLevel = false; diff --git a/source/Minecraft.hpp b/source/Minecraft.hpp index 8ae0b69..91cadb7 100644 --- a/source/Minecraft.hpp +++ b/source/Minecraft.hpp @@ -56,6 +56,7 @@ public: void tickMouse(); void handleCharInput(char chr); void sendMessage(const std::string& message); + std::string getVersionString(); virtual void onGraphicsReset(); virtual void update() override; @@ -75,6 +76,8 @@ public: ItemInstance* getSelectedItem(); + virtual int getFpsIntlCounter(); + public: static int width, height; static bool useAmbientOcclusion; diff --git a/source/NinecraftApp.cpp b/source/NinecraftApp.cpp index 949da24..c2bd369 100644 --- a/source/NinecraftApp.cpp +++ b/source/NinecraftApp.cpp @@ -55,6 +55,13 @@ void NinecraftApp::initGLStates() glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); } +int NinecraftApp::getFpsIntlCounter() +{ + int ofps = m_fps; + m_fps = 0; + return ofps; +} + void NinecraftApp::init() { Mth::initMth(); @@ -110,6 +117,7 @@ void NinecraftApp::update() void NinecraftApp::updateStats() { + /* int timeMs = getTimeMs(); if (timeMs > field_2B0 + 999) { @@ -128,6 +136,7 @@ void NinecraftApp::updateStats() field_2B0 = timeMs; m_fps = 0; } + */ } NinecraftApp::NinecraftApp() diff --git a/source/NinecraftApp.hpp b/source/NinecraftApp.hpp index f3b277e..20b9e33 100644 --- a/source/NinecraftApp.hpp +++ b/source/NinecraftApp.hpp @@ -28,6 +28,8 @@ public: void updateStats(); void initGLStates(); + int getFpsIntlCounter() override; + private: int field_DBC; bool field_DC0; diff --git a/source/client/common/Options.cpp b/source/client/common/Options.cpp index 6acc142..a2eeebd 100644 --- a/source/client/common/Options.cpp +++ b/source/client/common/Options.cpp @@ -52,6 +52,8 @@ void Options::initDefaultValues() field_1C = "Default"; m_playerName = "Steve"; m_bServerVisibleDefault = true; + m_bDebugText = false; + m_keyBinds[0] = { "key.forward", 'W' }; m_keyBinds[1] = { "key.left", 'A' }; m_keyBinds[2] = { "key.back", 'S' }; diff --git a/source/client/common/Options.hpp b/source/client/common/Options.hpp index ce70f4b..f5674ce 100644 --- a/source/client/common/Options.hpp +++ b/source/client/common/Options.hpp @@ -110,5 +110,6 @@ public: std::string m_playerName; bool m_bServerVisibleDefault; bool m_bAutoJump; + bool m_bDebugText; }; diff --git a/source/client/renderer/GameRenderer.cpp b/source/client/renderer/GameRenderer.cpp index ef0becd..94f50d0 100644 --- a/source/client/renderer/GameRenderer.cpp +++ b/source/client/renderer/GameRenderer.cpp @@ -49,6 +49,9 @@ void GameRenderer::_init() field_7C = 0.0f; field_80 = 0.0f; field_84 = 0.0f; + m_lastUpdatedMS = 0; + m_shownFPS = 0; + m_shownChunkUpdates = 0; } GameRenderer::GameRenderer(Minecraft* pMinecraft) : @@ -622,6 +625,34 @@ void GameRenderer::render(float f) #endif } } + + std::stringstream debugText; + debugText << "ReMinecraftPE " << m_pMinecraft->getVersionString(); + debugText << "\n" << m_shownFPS << " fps, " << m_shownChunkUpdates << " chunk updates"; + + if (m_pMinecraft->m_options.m_bDebugText) + { + if (m_pMinecraft->m_pLocalPlayer) + { + char posStr[64]; + Vec3 pos = m_pMinecraft->m_pLocalPlayer->getPos(f); + snprintf(posStr, sizeof posStr, "%.2f, %.2f, %.2f", pos.x, pos.y, pos.z); + + debugText << "\npos: " << posStr; + debugText << "\n" << m_pMinecraft->m_pLevelRenderer->gatherStats1(); + } + + m_pMinecraft->m_pFont->drawShadow(debugText.str(), 2, 2, 0xFFFFFF); + } + + int timeMs = getTimeMs(); + if (timeMs - m_lastUpdatedMS >= 1000) + { + m_lastUpdatedMS = timeMs; + m_shownFPS = m_pMinecraft->getFpsIntlCounter(); + m_shownChunkUpdates = Chunk::updates; + Chunk::updates = 0; + } } void GameRenderer::tick() diff --git a/source/client/renderer/GameRenderer.hpp b/source/client/renderer/GameRenderer.hpp index 29bb42f..6032796 100644 --- a/source/client/renderer/GameRenderer.hpp +++ b/source/client/renderer/GameRenderer.hpp @@ -84,5 +84,7 @@ public: float m_matrix_projection[16]; float m_matrix_model_view[16]; + + int m_shownFPS, m_shownChunkUpdates, m_lastUpdatedMS; };