#include "imgui.h" #include "imgui-SFML.h" #define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include using namespace ImGui; constexpr int FPS=30; constexpr int X_DIM = 1920 / 2; constexpr int Y_DIM = 1080 / 2; bool window_active_out = false; bool show_build_log = false; void ImGui_setup(sf::RenderWindow &window) { bool res = SFML::Init(window); fmt::println("IMGUI returned {}", res); } void ImGui_update(sf::RenderWindow &window, sf::Clock &deltaClock) { sf::Vector2u size = window.getSize(); SFML::Update(window, deltaClock.restart()); SetNextWindowPos(ImVec2(0, 0)); SetNextWindowSize(ImVec2(size.x, size.y / 2)); Begin("Build Status", &window_active_out); TextColored(ImVec4(1,1,0,1), "Build Log"); BeginChild("Scrolling"); for(int n = 0; n < 50; n++) { TextWrapped("%04d: Some Text", n); } EndChild(); End(); } void Window_update(sf::RenderWindow &window, sf::Sprite &background) { window.clear(); window.draw(background); if(show_build_log) { SFML::Render(window); } window.display(); } void Handle_events(sf::RenderWindow &window) { sf::Event event; // is this a main event loop while (window.pollEvent(event)) { if(show_build_log) { 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)) { if(show_build_log) { window_active_out = false; } else { window.close(); } } else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space)) { window_active_out = !window_active_out; } break; default: // do nothing break; } } } void Update_entities(sf::RenderWindow &window, sf::Sprite &background, sf::Clock &clock, sf::Clock &deltaClock) { background.setPosition(0, 0); if(show_build_log) { ImGui_update(window, deltaClock); } Window_update(window, background); } 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::Texture texture; sf::Sprite background; // fake image here if(!texture.loadFromFile("./assets/turing_tarpit_main_screen.png")) { fmt::println("Error loading sprite!"); } texture.setSmooth(true); background.setTexture(texture); while (window.isOpen()) { Handle_events(window); // preparing for refactoring this into a class or struct for everything Update_entities(window, background, clock, deltaClock); show_build_log = window_active_out; } SFML::Shutdown(); }