#include "Subconscious.hpp" #include "WorldScene.hpp" #include // TODO remove (needed for mousewheel debug) #include #include /*** public methods ***/ Subconscious::Subconscious() : _window(sf::VideoMode(800, 600), "Subconscious") { _window.setVerticalSyncEnabled(true); _window.setFramerateLimit(90); // TODO currentScene = new MenuScene("main-menu") or something } Subconscious::~Subconscious() {} void Subconscious::run() { _running = true; while (_running && _window.isOpen()) { sf::Event event; while (_window.pollEvent(event)) { switch (event.type) { /*** Keyboard Events ***/ case sf::Event::KeyPressed: switch (event.key.code) { case sf::Keyboard::Up: if (WorldScene *worldScene = dynamic_cast(_currentScene)) { worldScene->pan(0, -10); } break; case sf::Keyboard::Down: if (WorldScene *worldScene = dynamic_cast(_currentScene)) { worldScene->pan(0, 10); } break; case sf::Keyboard::Left: if (WorldScene *worldScene = dynamic_cast(_currentScene)) { worldScene->pan(-10, 0); } break; case sf::Keyboard::Right: if (WorldScene *worldScene = dynamic_cast(_currentScene)) { worldScene->pan(10, 0); } break; default: break; } break; case sf::Event::KeyReleased: break; /*** Mouse Events ***/ case sf::Event::MouseButtonPressed: break; case sf::Event::MouseButtonReleased: break; case sf::Event::MouseMoved: break; case sf::Event::MouseWheelScrolled: // my mouse always outputs +/- 1.0000, so the zoom speed // is 1/10.0 => .1 // TODO make this a setting that can be changed // (mousewheel sensibility) // // std::cout << std::fixed << std::setprecision(3) // << event.mouseWheelScroll.delta << std::endl; if (WorldScene *worldScene = dynamic_cast(_currentScene)) { worldScene->zoom(event.mouseWheelScroll.delta/10.0); } break; /*** Window Events ***/ case sf::Event::Closed: _window.close(); break; case sf::Event::Resized: _currentScene->resize(event.size); break; default: break; } } gameUpdate(); gameRender(); } } void Subconscious::demo() { Scene *demoScene = new WorldScene(_window); _currentScene = demoScene; _scenes.push_back(demoScene); run(); } /*** private methods ***/ void Subconscious::gameUpdate() { } void Subconscious::gameRender() { _window.clear(); if (_currentScene != nullptr) { _currentScene->render(); } _window.display(); }