#include "engine.h" #include #include #include #include #include #include #include "resourcemanager.h" #include "scene.h" Engine::Engine() : m_input(NULL), m_window(NULL) { m_clock = new sf::Clock(); m_clock->restart(); m_renderer = new SparrowRenderer(); m_renderer->setCamera(NULL); // TODO } void Engine::createWindow(std::string title, unsigned int w, unsigned int h, bool isWindowed) { m_window = new sf::Window(sf::VideoMode(w, h), title, isWindowed ? sf::Style::Default : sf::Style::Fullscreen, sf::ContextSettings(24)); m_window->setFramerateLimit(60); m_input = new Input(m_window); m_renderer->initGL(w, h); } void Engine::initPhysics() { btDefaultCollisionConfiguration *collisionConfiguration = new btDefaultCollisionConfiguration(); btBroadphaseInterface *broadPhase = new btAxisSweep3(btVector3(-1000, -1000, -1000), btVector3(1000, 1000, 1000)); btCollisionDispatcher *dispatcher = new btCollisionDispatcher(collisionConfiguration); btSequentialImpulseConstraintSolver *solver = new btSequentialImpulseConstraintSolver(); m_world = new btDiscreteDynamicsWorld(dispatcher, broadPhase, solver, collisionConfiguration); m_world->setGravity(btVector3(0, -10, 0)); } void Engine::update() { // update delta time m_lastTimeStamp = m_timeStamp; m_timeStamp = (unsigned int) m_clock->getElapsedTime().asMilliseconds(); // update Events m_input->updateEvents(); // update Scene m_scene->update(); // update Physics m_world->stepSimulation(1000.f*(float)getDeltaTime()); // update Display m_renderer->renderGL(); m_window->display(); } void Engine::start() { running = true; while(!m_input->isCloseRequested() && running){ update(); } } void Engine::stop() { running = false; } unsigned int Engine::getTime() { return m_timeStamp; } unsigned int Engine::getDeltaTime() { return m_timeStamp - m_lastTimeStamp; } void Engine::setScene(std::string sceneName) { m_scene = RESOURCE_GET(Scene,sceneName); }