diff --git a/TSE_Core/src/interfaces/ITimeInterface.hpp b/TSE_Core/src/interfaces/ITimeInterface.hpp new file mode 100644 index 0000000..b075099 --- /dev/null +++ b/TSE_Core/src/interfaces/ITimeInterface.hpp @@ -0,0 +1,11 @@ +#pragma once + +namespace TSE +{ + class ITimeInterface + { + public: + virtual float GetTotalEllapsedTime() = 0; + virtual ~ITimeInterface() = default; + }; +} // namespace TSE diff --git a/TSE_Core/src/interfaces/IWindow.cpp b/TSE_Core/src/interfaces/IWindow.cpp index 2f5ac67..ae72a9b 100644 --- a/TSE_Core/src/interfaces/IWindow.cpp +++ b/TSE_Core/src/interfaces/IWindow.cpp @@ -1,6 +1,7 @@ #include "IWindow.hpp" #include "Debug.hpp" #include "LuaStateHandler.hpp" +#include "Time.hpp" TSE::IWindow* TSE::IWindow::lastWindow = nullptr; @@ -10,6 +11,11 @@ bool TSE::IWindow::BaseInit() const Debug::Init(); } +void TSE::IWindow::BaseUpdate() const +{ + Time::Update(); +} + TSE::IWindow::~IWindow() { Debug::Close(); diff --git a/TSE_Core/src/interfaces/IWindow.hpp b/TSE_Core/src/interfaces/IWindow.hpp index 32bcff8..a662f2d 100644 --- a/TSE_Core/src/interfaces/IWindow.hpp +++ b/TSE_Core/src/interfaces/IWindow.hpp @@ -20,6 +20,7 @@ namespace TSE virtual bool ShouldClose() const = 0; bool BaseInit() const; + void BaseUpdate() const; ~IWindow(); }; } // namespace TSE diff --git a/TSE_Core/src/utils/Time.cpp b/TSE_Core/src/utils/Time.cpp new file mode 100644 index 0000000..84cb609 --- /dev/null +++ b/TSE_Core/src/utils/Time.cpp @@ -0,0 +1,38 @@ +#include "Time.hpp" + +TSE::ITimeInterface* TSE::Time::timeInterface = nullptr; +float TSE::Time::DeltaTime = 0; +float TSE::Time::LastFrameTime = 0; +float TSE::Time::CurrentTime = 0; + +void TSE::Time::Init(ITimeInterface *time) +{ + Time::timeInterface = time; +} + +void TSE::Time::Destroy() +{ + delete(timeInterface); +} + +float TSE::Time::deltaTime() +{ + return DeltaTime; +} + +float TSE::Time::currentTime() +{ + return CurrentTime; +} + +float TSE::Time::lastFrameTime() +{ + return LastFrameTime; +} + +void TSE::Time::Update() +{ + LastFrameTime = CurrentTime; + CurrentTime = timeInterface->GetTotalEllapsedTime(); + DeltaTime = CurrentTime - LastFrameTime; +} diff --git a/TSE_Core/src/utils/Time.hpp b/TSE_Core/src/utils/Time.hpp new file mode 100644 index 0000000..fd32c05 --- /dev/null +++ b/TSE_Core/src/utils/Time.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "interfaces/ITimeInterface.hpp" + +namespace TSE +{ + class Time + { + private: + static ITimeInterface* timeInterface; + static float LastFrameTime; + static float DeltaTime; + static float CurrentTime; + + public: + static void Init(ITimeInterface* time); + static void Destroy(); + static float deltaTime(); + static float currentTime(); + static float lastFrameTime(); + static void Update(); + }; +} // namespace TSE diff --git a/TSE_GlfwImpl/src/TimeInterfaceGlfw.cpp b/TSE_GlfwImpl/src/TimeInterfaceGlfw.cpp new file mode 100644 index 0000000..ebd7503 --- /dev/null +++ b/TSE_GlfwImpl/src/TimeInterfaceGlfw.cpp @@ -0,0 +1,8 @@ +#include "TimeInterfaceGlfw.hpp" + +#include "GLFW/glfw3.h" + +float TSE::GLFW::TimeInterfaceGlfw::GetTotalEllapsedTime() +{ + return (float)glfwGetTime(); +} \ No newline at end of file diff --git a/TSE_GlfwImpl/src/TimeInterfaceGlfw.hpp b/TSE_GlfwImpl/src/TimeInterfaceGlfw.hpp new file mode 100644 index 0000000..95b9fa3 --- /dev/null +++ b/TSE_GlfwImpl/src/TimeInterfaceGlfw.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "interfaces/ITimeInterface.hpp" + +namespace TSE::GLFW +{ + class TimeInterfaceGlfw : public ITimeInterface + { + public: + float GetTotalEllapsedTime() override; + }; +} // namespace TSE::GLFW diff --git a/TSE_GlfwImpl/src/WindowGlfw.cpp b/TSE_GlfwImpl/src/WindowGlfw.cpp index 82bc35f..d2696b6 100644 --- a/TSE_GlfwImpl/src/WindowGlfw.cpp +++ b/TSE_GlfwImpl/src/WindowGlfw.cpp @@ -1,4 +1,6 @@ #include "WindowGlfw.hpp" +#include "utils/Time.hpp" +#include "TimeInterfaceGlfw.hpp" #include "Debug.hpp" TSE::GLFW::WindowGlfw::WindowGlfw(string _title, int _width, int _height, IRenderingBackend* backend) @@ -36,6 +38,8 @@ bool TSE::GLFW::WindowGlfw::Init() return false; } + Time::Init(new TimeInterfaceGlfw()); + renderingBackend->InitPreWindow(); glfwWindowHint(GLFW_FOCUSED, true); @@ -118,6 +122,7 @@ void TSE::GLFW::WindowGlfw::Clear() const void TSE::GLFW::WindowGlfw::Update() const { + BaseUpdate(); glfwPollEvents(); renderingBackend->onUpdate();