#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 = true; 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::Time &tick) { sf::Vector2u size = window.getSize(); SFML::Update(window, deltaClock.restart()); SetNextWindowPos(ImVec2(0, size.y / 2)); SetNextWindowSize(ImVec2(size.x, size.y / 2)); Begin("Turing's Tarpit", &window_active_out); // HP | Hits Taken | Round | Streak Text("HP X"); SameLine(); Text("Hits Taken X"); SameLine(); Text("Round X"); SameLine(); Text("Streak X"); // HP BAR float hp = 50.0f; SliderFloat("HP", &hp, 0.0f, 100.0f); // Build Log TextColored(ImVec4(1,1,0,1), "Build Log"); BeginChild("Scrolling"); for(int n = 0; n < 50; n++) { TextWrapped("%04d: Some Text", n); } EndChild(); // image placeholder End(); } void Window_update(sf::RenderWindow &window, sf::Sprite &player) { window.clear(); window.draw(player); SFML::Render(window); window.display(); } void Handle_events(sf::RenderWindow &window) { sf::Event event; // is this a main event loop while (window.pollEvent(event)) { 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::Sprite &player, 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; player.setPosition(winSize.x/2, 0); player.setScale({2.0f, 2.0f}); ImGui_update(window, deltaClock, tick); Window_update(window, player); 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(); sf::Texture texture; sf::Sprite player; // fake image here if(!texture.loadFromFile("./assets/sprite.png")) { fmt::println("Error loading sprite!"); } texture.setSmooth(true); player.setTexture(texture); while (window.isOpen() && window_active_out) { Handle_events(window); // preparing for refactoring this into a class or struct for everything tick = Update_entities(window, player, clock, deltaClock, tick); } SFML::Shutdown(); }