diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f438893b..535e89cb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,7 +3,7 @@ add_subdirectory(core) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(FRONTEND "qt" CACHE INTERNAL "") +set(FRONTEND "sdl" CACHE INTERNAL "") if(${FRONTEND} MATCHES "qt") add_subdirectory(frontend/qt) diff --git a/src/core/Scheduler.cpp b/src/core/Scheduler.cpp index 0cd88357..7f046600 100644 --- a/src/core/Scheduler.cpp +++ b/src/core/Scheduler.cpp @@ -1,6 +1,28 @@ #include +#include namespace natsukashii::core { +Event::Event(u128 time, EventHandler handler, void* ptr) : time(time), handler(handler), ptr(ptr) { } + Scheduler::Scheduler() { + events.emplace_back(Event(UINT128_MAX, [](void*) { + printf("Reached event at UINT128_MAX, wtf?!\n"); + exit(1); + }, nullptr)); +} + +void Scheduler::PushEvent(u128 time, EventHandler handler, void* ptr) { + for(int i = 0; i < events.size(); i++) { + if(time < events[i].time) { // if it's lower than the next event we can just insert it. + events.emplace_back(Event(time, handler, ptr)); + break; + } + } +} + +void Scheduler::Dispatch() { + for(auto& event : events) { + event.handler(event.ptr); + } +} } -} \ No newline at end of file diff --git a/src/core/Scheduler.hpp b/src/core/Scheduler.hpp index 70a99da8..127941d7 100644 --- a/src/core/Scheduler.hpp +++ b/src/core/Scheduler.hpp @@ -1,10 +1,24 @@ #pragma once #include +#include namespace natsukashii::core { +using EventHandler = void(*)(void*); +struct Event { + Event(u128, EventHandler, void*); +private: + friend class Scheduler; + u128 time; + void* ptr; + EventHandler handler; +}; + struct Scheduler { Scheduler(); + void PushEvent(u128, EventHandler, void*); + void Dispatch(); private: u128 currentTime = 0; + std::vector events{}; }; -} \ No newline at end of file +} diff --git a/src/core/common.hpp b/src/core/common.hpp index 10ea8d0e..fc68d029 100644 --- a/src/core/common.hpp +++ b/src/core/common.hpp @@ -13,4 +13,8 @@ using s32 = int32_t; using s64 = int64_t; using u128 = __uint128_t; using s128 = __int128_t; -using m128 = __m128i; \ No newline at end of file +using m128 = __m128i; +#define UINT128_MAX ((u128)0xFFFF'FFFF'FFFF'FFFF << 64) | 0xFFFF'FFFF'FFFF'FFFF +#define UINT128_MIN 0 +#define INT128_MAX ((u128)0x7FFF'FFFF'FFFF'FFFF << 64) | 0xFFFF'FFFF'FFFF'FFFF +#define INT128_MIN (-INT128_MAX - 1LL) diff --git a/src/frontend/qt/Frontend.cpp b/src/frontend/qt/Frontend.cpp index c80f99eb..debc1eab 100644 --- a/src/frontend/qt/Frontend.cpp +++ b/src/frontend/qt/Frontend.cpp @@ -1,5 +1,7 @@ #include -Window::~Window() {} +namespace natsukashii::frontend { +App::~App() {} -Window::Window() {} +App::App() {} +} diff --git a/src/frontend/qt/Frontend.hpp b/src/frontend/qt/Frontend.hpp index f0a5dbca..7ee98a6c 100644 --- a/src/frontend/qt/Frontend.hpp +++ b/src/frontend/qt/Frontend.hpp @@ -1,6 +1,8 @@ #pragma once - -struct Window { - ~Window(); - Window(); +namespace natsukashii::frontend { +struct App { + ~App(); + App(); + void Run() {} }; +}