From d628bbb1840ae465390e2f2a3dd919d7b8f783c9 Mon Sep 17 00:00:00 2001 From: "Grayson Riffe (Laptop)" Date: Mon, 30 Aug 2021 23:52:26 -0500 Subject: [PATCH] Reworked frame timing again; Reworked input --- Game/Game.vcxproj | 418 +++++++++--------- Game/src/MainState.cpp | 46 +- Game/src/include/MainState.h | 30 +- .../AssetBuild/CubeTest/models/cube.obj | 40 ++ .../AssetBuild/CubeTest/textures/cube.png | Bin 0 -> 36487 bytes NothinFancy/src/Application.cpp | 76 +--- NothinFancy/src/Renderer/Renderer.cpp | 2 +- NothinFancy/src/include/Application.h | 1 + 8 files changed, 313 insertions(+), 300 deletions(-) create mode 100644 NFPackCreator/AssetBuild/CubeTest/models/cube.obj create mode 100644 NFPackCreator/AssetBuild/CubeTest/textures/cube.png diff --git a/Game/Game.vcxproj b/Game/Game.vcxproj index 3c4b186..9d7491b 100644 --- a/Game/Game.vcxproj +++ b/Game/Game.vcxproj @@ -1,210 +1,210 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 16.0 - Win32Proj - {b7fec2d6-1d8f-487e-89cb-fd611fd1aeb6} - Game - 10.0 - - - - Application - true - v142 - Unicode - - - Application - false - v142 - true - Unicode - - - Application - true - v142 - Unicode - - - Application - false - v142 - true - Unicode - - - - - - - - - - - - - - - - - - - - - true - $(ProjectDir)bin\$(Platform)$(Configuration)\ - $(ProjectDir)int\$(Platform)$(Configuration)\ - - - false - $(ProjectDir)bin\$(Platform)$(Configuration)\ - $(ProjectDir)int\$(Platform)$(Configuration)\ - - - true - $(ProjectDir)bin\$(Platform)$(Configuration)\ - $(ProjectDir)int\$(Platform)$(Configuration)\ - - - false - $(ProjectDir)bin\$(Platform)$(Configuration)\ - $(ProjectDir)int\$(Platform)$(Configuration)\ - - - - Level3 - true - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - $(ProjectDir)src\include\;$(SolutionDir)NothinFancy\src\include\ - $(IntDir)obj\ - - - Console - true - mainCRTStartup - libcmt.lib - /ignore:4099 %(AdditionalOptions) - $(ProjectDir)dep\;%(AdditionalLibraryDirectories) - nf.res;%(AdditionalDependencies) - - - cd "$(SolutionDir)NFPackCreator\bin\AssetBuild" && "$(SolutionDir)NFPackCreator\bin\Win32$(Configuration)\NFPackCreator.exe" && del "$(OutDir)assets\" /Q /S && move "$(SolutionDir)NFPackCreator\bin\AssetBuild\*.nfpack" "$(OutDir)assets\" - - - - - Level3 - true - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - $(ProjectDir)src\include\;$(SolutionDir)NothinFancy\src\include\ - $(IntDir)obj\ - - - Windows - true - true - true - mainCRTStartup - libcmt.lib - /ignore:4099 %(AdditionalOptions) - $(ProjectDir)dep\;%(AdditionalLibraryDirectories) - nf.res;%(AdditionalDependencies) - - - cd "$(SolutionDir)NFPackCreator\bin\AssetBuild" && "$(SolutionDir)NFPackCreator\bin\Win32$(Configuration)\NFPackCreator.exe" && del "$(OutDir)assets\" /Q /S && move "$(SolutionDir)NFPackCreator\bin\AssetBuild\*.nfpack" "$(OutDir)assets\" - - - - - Level3 - true - _DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - $(ProjectDir)src\include\;$(SolutionDir)NothinFancy\src\include\ - $(IntDir)obj\ - - - Console - true - mainCRTStartup - libcmt.lib - /ignore:4099 %(AdditionalOptions) - $(ProjectDir)dep\;%(AdditionalLibraryDirectories) - nf.res;%(AdditionalDependencies) - - - cd "$(SolutionDir)NFPackCreator\bin\AssetBuild" && "$(SolutionDir)NFPackCreator\bin\Win32$(Configuration)\NFPackCreator.exe" && del "$(OutDir)assets\" /Q /S && move "$(SolutionDir)NFPackCreator\bin\AssetBuild\*.nfpack" "$(OutDir)assets\" - - - - - Level3 - true - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - $(ProjectDir)src\include\;$(SolutionDir)NothinFancy\src\include\ - $(IntDir)obj\ - - - Windows - true - true - true - mainCRTStartup - libcmt.lib - /ignore:4099 %(AdditionalOptions) - $(ProjectDir)dep\;%(AdditionalLibraryDirectories) - nf.res;%(AdditionalDependencies) - - - cd "$(SolutionDir)NFPackCreator\bin\AssetBuild" && "$(SolutionDir)NFPackCreator\bin\Win32$(Configuration)\NFPackCreator.exe" && del "$(OutDir)assets\" /Q /S && move "$(SolutionDir)NFPackCreator\bin\AssetBuild\*.nfpack" "$(OutDir)assets\" - - - - - {1b9c5361-e301-41bf-97e7-56d65f11e2bb} - - - - - - - - - - - - - - - <_delete Include="$(OutDir)**\*" /> - - - + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {b7fec2d6-1d8f-487e-89cb-fd611fd1aeb6} + Game + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectDir)bin\$(Platform)$(Configuration)\ + $(ProjectDir)int\$(Platform)$(Configuration)\ + + + false + $(ProjectDir)bin\$(Platform)$(Configuration)\ + $(ProjectDir)int\$(Platform)$(Configuration)\ + + + true + $(ProjectDir)bin\$(Platform)$(Configuration)\ + $(ProjectDir)int\$(Platform)$(Configuration)\ + + + false + $(ProjectDir)bin\$(Platform)$(Configuration)\ + $(ProjectDir)int\$(Platform)$(Configuration)\ + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(ProjectDir)src\include\;$(SolutionDir)NothinFancy\src\include\ + $(IntDir)obj\ + + + Console + true + mainCRTStartup + libcmt.lib + /ignore:4099 %(AdditionalOptions) + $(ProjectDir)dep\;%(AdditionalLibraryDirectories) + nf.res;%(AdditionalDependencies) + + + cd "$(SolutionDir)NFPackCreator\AssetBuild" && "$(SolutionDir)NFPackCreator\bin\Win32$(Configuration)\NFPackCreator.exe" && del "$(OutDir)assets\" /Q /S && move "$(SolutionDir)NFPackCreator\AssetBuild\*.nfpack" "$(OutDir)assets\" + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(ProjectDir)src\include\;$(SolutionDir)NothinFancy\src\include\ + $(IntDir)obj\ + + + Windows + true + true + true + mainCRTStartup + libcmt.lib + /ignore:4099 %(AdditionalOptions) + $(ProjectDir)dep\;%(AdditionalLibraryDirectories) + nf.res;%(AdditionalDependencies) + + + cd "$(SolutionDir)NFPackCreator\AssetBuild" && "$(SolutionDir)NFPackCreator\bin\Win32$(Configuration)\NFPackCreator.exe" && del "$(OutDir)assets\" /Q /S && move "$(SolutionDir)NFPackCreator\AssetBuild\*.nfpack" "$(OutDir)assets\" + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(ProjectDir)src\include\;$(SolutionDir)NothinFancy\src\include\ + $(IntDir)obj\ + + + Console + true + mainCRTStartup + libcmt.lib + /ignore:4099 %(AdditionalOptions) + $(ProjectDir)dep\;%(AdditionalLibraryDirectories) + nf.res;%(AdditionalDependencies) + + + cd "$(SolutionDir)NFPackCreator\AssetBuild" && "$(SolutionDir)NFPackCreator\bin\Win32$(Configuration)\NFPackCreator.exe" && del "$(OutDir)assets\" /Q /S && move "$(SolutionDir)NFPackCreator\AssetBuild\*.nfpack" "$(OutDir)assets\" + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(ProjectDir)src\include\;$(SolutionDir)NothinFancy\src\include\ + $(IntDir)obj\ + + + Windows + true + true + true + mainCRTStartup + libcmt.lib + /ignore:4099 %(AdditionalOptions) + $(ProjectDir)dep\;%(AdditionalLibraryDirectories) + nf.res;%(AdditionalDependencies) + + + cd "$(SolutionDir)NFPackCreator\AssetBuild" && "$(SolutionDir)NFPackCreator\bin\Win32$(Configuration)\NFPackCreator.exe" && del "$(OutDir)assets\" /Q /S && move "$(SolutionDir)NFPackCreator\AssetBuild\*.nfpack" "$(OutDir)assets\" + + + + + {1b9c5361-e301-41bf-97e7-56d65f11e2bb} + + + + + + + + + + + + + + + <_delete Include="$(OutDir)**\*" /> + + + \ No newline at end of file diff --git a/Game/src/MainState.cpp b/Game/src/MainState.cpp index 5d4f146..bbabee9 100644 --- a/Game/src/MainState.cpp +++ b/Game/src/MainState.cpp @@ -1,24 +1,24 @@ -#include "MainState.h" - -MainState::MainState(nf::Application* app) : - Gamestate(app) -{ - -} - -void MainState::onEnter() { - Log("MainState onEnter!"); - -} - -void MainState::update(double deltaTime) { - -} - -void MainState::render(nf::Renderer& renderer) { - -} - -void MainState::onExit() { - Log("MainState onExit!"); +#include "MainState.h" + +MainState::MainState(nf::Application* app) : + Gamestate(app) +{ + +} + +void MainState::onEnter() { + Log("MainState onEnter!"); + +} + +void MainState::update(double deltaTime) { + +} + +void MainState::render(nf::Renderer& renderer) { + +} + +void MainState::onExit() { + Log("MainState onExit!"); } \ No newline at end of file diff --git a/Game/src/include/MainState.h b/Game/src/include/MainState.h index 3335fb6..15c6cc1 100644 --- a/Game/src/include/MainState.h +++ b/Game/src/include/MainState.h @@ -1,16 +1,16 @@ -#pragma once -#include "NothinFancy.h" - -class MainState : public nf::Gamestate { -public: - MainState(nf::Application* app); - - void onEnter() override; - - void update(double deltaTime) override; - void render(nf::Renderer& renderer) override; - - void onExit() override; -private: - +#pragma once +#include "NothinFancy.h" + +class MainState : public nf::Gamestate { +public: + MainState(nf::Application* app); + + void onEnter() override; + + void update(double deltaTime) override; + void render(nf::Renderer& renderer) override; + + void onExit() override; +private: + }; \ No newline at end of file diff --git a/NFPackCreator/AssetBuild/CubeTest/models/cube.obj b/NFPackCreator/AssetBuild/CubeTest/models/cube.obj new file mode 100644 index 0000000..1f50dcb --- /dev/null +++ b/NFPackCreator/AssetBuild/CubeTest/models/cube.obj @@ -0,0 +1,40 @@ +# Blender v2.93.3 OBJ File: '' +# www.blender.org +o Cube_Cube.001 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +v -1.000000 -1.000000 1.000000 +v -1.000000 1.000000 1.000000 +v 1.000000 -1.000000 1.000000 +v 1.000000 1.000000 1.000000 +vt 0.375000 0.003906 +vt 0.625000 0.253906 +vt 0.375000 0.253906 +vt 0.875000 0.750000 +vt 0.625000 0.500000 +vt 0.875000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.750000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 1.000000 +vt 0.625000 0.003906 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +s off +f 2/1 3/2 1/3 +f 4/4 7/5 3/6 +f 8/7 5/8 7/5 +f 6/9 1/10 5/8 +f 7/5 1/11 3/12 +f 4/13 6/9 8/7 +f 2/1 4/14 3/2 +f 4/4 8/7 7/5 +f 8/7 6/9 5/8 +f 6/9 2/15 1/10 +f 7/5 5/8 1/11 +f 4/13 2/16 6/9 diff --git a/NFPackCreator/AssetBuild/CubeTest/textures/cube.png b/NFPackCreator/AssetBuild/CubeTest/textures/cube.png new file mode 100644 index 0000000000000000000000000000000000000000..61abd60f6cdd59e39bf0b8a13be2bc9e625ec5a0 GIT binary patch literal 36487 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 O42`YYs;OHJp7}SC#hE1l literal 0 HcmV?d00001 diff --git a/NothinFancy/src/Application.cpp b/NothinFancy/src/Application.cpp index 2c376e5..7e0c437 100644 --- a/NothinFancy/src/Application.cpp +++ b/NothinFancy/src/Application.cpp @@ -78,6 +78,7 @@ namespace nf { break; } } + updateInput(); std::this_thread::sleep_for(std::chrono::milliseconds(5)); } mainThread.join(); @@ -185,33 +186,40 @@ namespace nf { } } + void Application::updateInput() { + for (unsigned int i = 0; i < 164; i++) { + if (GetFocus() == m_window) + m_input[i] = GetKeyState(i) & 0x8000; + else + m_input[i] = false; + } + } + void Application::runMainGameThread() { m_renderer = new Renderer(this); startIntroState(); - std::chrono::steady_clock::time_point start_time = std::chrono::steady_clock::now(); - const std::chrono::duration wait_time = std::chrono::nanoseconds(1000000000 / 60); - auto next_time = start_time + wait_time; - m_deltaTime = 0.0167; + std::chrono::steady_clock::time_point currentTime = std::chrono::steady_clock::now(); + std::chrono::steady_clock::time_point lastFrame = std::chrono::steady_clock::now(); while (m_running) { - start_time = std::chrono::steady_clock::now(); - m_currentState->update(m_deltaTime); - m_currentState->render(*m_renderer); - m_renderer->doFrame(); - m_frames++; - if (m_stateChange) - doStateChange(); + currentTime = std::chrono::steady_clock::now(); + m_deltaTime = std::chrono::duration(currentTime - lastFrame).count(); + if (m_deltaTime >= m_minFrametime) { + lastFrame = std::chrono::steady_clock::now(); + m_currentState->update(m_deltaTime); + m_currentState->render(*m_renderer); + m_renderer->doFrame(); + m_frames++; + if (m_stateChange) + doStateChange(); + } m_fpsClock2 = std::chrono::steady_clock::now(); m_fpsDuration = m_fpsClock2 - m_fpsClock1; if (m_fpsDuration.count() >= 1.0) { - m_FPS = m_frames - 1; + m_FPS = m_frames; m_frames = 0; Log("FPS: " + std::to_string(m_FPS)); m_fpsClock1 = std::chrono::steady_clock::now(); } - std::this_thread::sleep_until(next_time); - m_deltaTime = (double)(std::chrono::steady_clock::now() - start_time).count(); - next_time += wait_time; - //TODO: Redo FPS AGAIN like how I did it in PongClone } m_currentState->onExit(); delete m_renderer; @@ -255,42 +263,6 @@ namespace nf { case WM_MENUCHAR: { return MNC_CLOSE << 16; } - case WM_LBUTTONDOWN: { - app->m_input[1] = true; - return 0; - } - case WM_LBUTTONUP: { - app->m_input[1] = false; - return 0; - } - case WM_RBUTTONDOWN: { - app->m_input[2] = true; - return 0; - } - case WM_RBUTTONUP: { - app->m_input[2] = false; - return 0; - } - case WM_MBUTTONDOWN: { - app->m_input[4] = true; - return 0; - } - case WM_MBUTTONUP: { - app->m_input[4] = false; - return 0; - } - case WM_KEYDOWN: { - if (wParam < 164 && !(lParam & (1 << 30))) { - app->m_input[wParam] = true; - } - break; - } - case WM_KEYUP: { - if (wParam < 164) { - app->m_input[wParam] = false; - } - break; - } case WM_CLOSE: { DestroyWindow(hWnd); return 0; diff --git a/NothinFancy/src/Renderer/Renderer.cpp b/NothinFancy/src/Renderer/Renderer.cpp index e31c301..55d8b1c 100644 --- a/NothinFancy/src/Renderer/Renderer.cpp +++ b/NothinFancy/src/Renderer/Renderer.cpp @@ -70,7 +70,7 @@ namespace nf { void Renderer::doFrame() { glViewport(0, 0, m_app->getConfig().width, m_app->getConfig().height); - proj = glm::perspective(glm::radians(45.0f), (float)m_app->getConfig().width / (float)m_app->getConfig().height, 0.1f, 100.0f); + proj = glm::perspective(glm::radians(45.0f), (float)m_app->getConfig().width / (float)m_app->getConfig().height, 0.1f, 100000.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (Entity* draw : m_lGame) { diff --git a/NothinFancy/src/include/Application.h b/NothinFancy/src/include/Application.h index 6465717..d99c7e1 100644 --- a/NothinFancy/src/include/Application.h +++ b/NothinFancy/src/include/Application.h @@ -35,6 +35,7 @@ namespace nf { RECT getWindowRect() const; void calculateNewWindowPos(int& x, int& y); void toggleFullscreen(); + void updateInput(); void runMainGameThread(); void startIntroState(); void doStateChange();