#include #include #ifdef IMGUI #include #include #endif #include "World.h" // TODO: Find a way to go to edges instead of just equally split (?) int main() { World world(32,32); world.setBlock(BlockType::AIR,1,1,30,30); world.setBlock(BlockType::WALL,4,4,2,2); world.player.move(2,2); std::cout << world << std::endl; sf::RenderWindow window(sf::VideoMode(1000,1000),"Da raycasting"); #ifdef IMGUI if (!ImGui::SFML::Init(window)) { std::cout << "Failed to init Dear ImGui SFML" << std::endl; return -1; } sf::Clock fpsDataClock; float frameTimings[100]; unsigned int frameCount = 0; #endif // window.setFramerateLimit(60); sf::Event event{}; sf::Clock frameTime; while (window.isOpen()) { while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) { window.close(); continue; } if (event.type == sf::Event::Resized) { // Keep the view area fit to the window. sf::FloatRect newView(0, 0, static_cast(event.size.width), static_cast(event.size.height)); window.setView(sf::View(newView)); continue; } #ifdef IMGUI ImGui::SFML::ProcessEvent(window, event); // Check if Dear ImGui should process the key events. ImGuiIO& io = ImGui::GetIO(); if (io.WantCaptureMouse || io.WantCaptureKeyboard) continue; #endif if (event.type == sf::Event::KeyPressed) { switch (event.key.code) { case sf::Keyboard::Key::Escape: window.close(); break; case sf::Keyboard::Key::Left: world.player.currentRotationSpeed = -world.player.rotationSpeed; break; case sf::Keyboard::Key::Right: world.player.currentRotationSpeed = world.player.rotationSpeed; break; case sf::Keyboard::Key::Up: world.player.updateSpeed(1, 0); break; case sf::Keyboard::Key::Down: world.player.updateSpeed(-1, 0); break; default: break; } } else if (event.type == sf::Event::KeyReleased) { switch (event.key.code) { case sf::Keyboard::Key::Left: case sf::Keyboard::Key::Right: world.player.currentRotationSpeed = 0; break; case sf::Keyboard::Key::Up: case sf::Keyboard::Key::Down: world.player.updateSpeed(0, 0); break; default: break; } } } window.clear(); const sf::Time& deltaT = frameTime.restart(); #ifdef IMGUI ImGui::SFML::Update(window, deltaT); #endif world.step(deltaT.asSeconds()); world.render(window); #ifdef IMGUI // ImGui::ShowDemoWindow(); ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav; ImVec2 window_area = ImGui::GetMainViewport()->WorkSize; ImGui::SetNextWindowPos({window_area.x - 20, 20}, ImGuiCond_Always, {1,0}); ImGui::SetNextWindowBgAlpha(0.2f); ImGui::Begin("FPS", nullptr ,window_flags); if (fpsDataClock.getElapsedTime().asMilliseconds() > 20) { frameTimings[frameCount%100] = static_cast(deltaT.asMicroseconds()); frameCount++; fpsDataClock.restart(); } ImGui::Text("FPS : %d", (int)(1.0/deltaT.asSeconds())); ImGui::PlotLines("µs", frameTimings, frameCount >= 100 ? 100 : frameCount); ImGui::End(); ImGui::SFML::Render(window); #endif window.display(); } #ifdef IMGUI ImGui::SFML::Shutdown(); #endif return 0; }