#include "imgui.h" #include "imgui-SFML.h" #define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include constexpr int FPS=30; constexpr int X_DIM = 1920 / 2; constexpr int Y_DIM = 1080 / 2; void ImGui_setup(sf::RenderWindow &window) { bool res = ImGui::SFML::Init(window); fmt::println("IMGUI returned {}", res); } void ImGui_update(sf::RenderWindow &window, sf::Clock &deltaClock, sf::Time &tick) { ImGui::SFML::Update(window, deltaClock.restart()); // ImGui::ShowDemoWindow(); ImGui::Begin("Clock"); sf::Vector2u size = window.getSize(); ImGui::SetWindowPos(ImVec2(size.x - 150, 0)); ImGui::SetWindowSize(ImVec2(150, 50)); std::string msg = fmt::format("Time: {}\n", tick.asSeconds()); ImGui::Button(msg.c_str()); ImGui::End(); } void Window_update(sf::RenderWindow &window) { window.clear(); ImGui::SFML::Render(window); window.display(); } void Handle_events(sf::RenderWindow &window) { sf::Event event; // is this a main event loop while (window.pollEvent(event)) { ImGui::SFML::ProcessEvent(window, event); switch(event.type) { case sf::Event::Closed: fmt::print("Exiting...\n"); window.close(); break; case sf::Event::KeyPressed: if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) { window.close(); } break; default: // do nothing break; } } } sf::Time Update_entities(sf::RenderWindow &window, sf::Clock &clock, sf::Clock &deltaClock, sf::Time &tick) { sf::Vector2u winSize = window.getSize(); float timeStep = 1.0f / FPS; sf::Time since = clock.getElapsedTime(); sf::Time nextTick = since - tick > sf::seconds(1) ? since : tick; ImGui_update(window, deltaClock, tick); Window_update(window); return nextTick; } int main() { fmt::print("Setting up a window for you...\n"); sf::ContextSettings settings; settings.antialiasingLevel = 8; sf::RenderWindow window(sf::VideoMode(X_DIM, Y_DIM), "Turing's Tarpit", sf::Style::None, settings); window.setPosition({.x=0,.y=0}); window.setFramerateLimit(FPS); window.setVerticalSyncEnabled(true); ImGui_setup(window); sf::Clock deltaClock; sf::Clock clock; sf::Time tick = clock.getElapsedTime(); while (window.isOpen()) { Handle_events(window); // preparing for refactoring this into a class or struct for everything tick = Update_entities(window, clock, deltaClock, tick); } ImGui::SFML::Shutdown(); }