X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FEngine.cc;h=18ce5d7e5f8c6d0b4664da080b16ba1ad2623ace;hp=51a3af0f5bfb6d75d71cdaed34cb7bdd9518c3ac;hb=ca0f7bdfba63140dca0bd20586d31980f3938eb2;hpb=57b78ebe21b1b48acd337daa5a1cb8c383959cfa diff --git a/src/Moof/Engine.cc b/src/Moof/Engine.cc index 51a3af0..18ce5d7 100644 --- a/src/Moof/Engine.cc +++ b/src/Moof/Engine.cc @@ -31,7 +31,6 @@ #include #include "fastevents.h" -#include #include #include "Dispatcher.hh" @@ -52,12 +51,14 @@ public: Impl(int argc, char* argv[], const std::string& configFile, const std::string& name, const std::string& iconFile, Engine* outer) : - interface(outer) + interface(outer), + timestep(0.01), + printFps(false) { #if defined(_WIN32) || defined (_WIN64) || defined(__WIN32__) - if (SDL_Init(SDL_INIT_EVERYTHING) != 0) + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) #else - if (SDL_Init(SDL_INIT_EVERYTHING | SDL_INIT_EVENTTHREAD) != 0) + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTTHREAD) != 0) #endif { logError("sdl is complaining: %s", SDL_GetError()); @@ -68,31 +69,23 @@ public: logError("fast events error: %s", FE_GetError()); throw Exception(Exception::SDL_ERROR); } - if (Sound_Init() == 0) - { - logError("sound initialization failed: %s", Sound_GetError()); - throw Exception(Exception::SDL_ERROR); - } alutInit(&argc, argv); Settings& settings = Settings::getInstance(); - settings.parseArgs(argc, argv); settings.loadFromFile(configFile); + settings.parseArgs(argc, argv); long randomSeed; - if (settings.get("engine.rngseed", randomSeed)) setSeed(randomSeed); + if (settings.get("rngseed", randomSeed)) setSeed(randomSeed); else setSeed(); - double ts = 0.01; - settings.get("engine.timestep", ts); - timestep = Scalar(ts); + settings.get("timestep", timestep); long maxFps = 40; - settings.getNumber("video.maxfps", maxFps); + settings.get("maxfps", maxFps); drawRate = 1.0 / Scalar(maxFps); - printFps = false; - settings.get("video.printfps", printFps); + settings.get("printfps", printFps); video = Video::alloc(name, iconFile); video->makeActive(); @@ -104,7 +97,6 @@ public: video.reset(); alutExit(); - Sound_Quit(); FE_Quit(); SDL_Quit(); } @@ -119,7 +111,7 @@ public: int run() { - Scalar ticksNow = getTicks(); + Scalar ticksNow = Timer::getTicks(); Scalar nextStep = ticksNow; Scalar nextDraw = ticksNow; @@ -135,13 +127,15 @@ public: running = true; do { - Scalar newTicks = getTicks(); + Scalar newTicks = Timer::getTicks(); deltaTime = newTicks - ticksNow; ticksNow = newTicks; if (deltaTime >= 0.25) deltaTime = 0.25; accumulator += deltaTime; + Timer::fireIfExpired(ticksNow); + while (accumulator >= timestep) { dispatchEvents(); @@ -174,7 +168,7 @@ public: if (printFps) { - logInfo("framerate: %d fps", fps); + logInfo("%d fps", fps); } } @@ -190,7 +184,8 @@ public: } // be a good citizen and give back what you don't need - sleep(std::min(nextStep, nextDraw), true); + Timer::sleep(std::min(std::min(nextStep, nextDraw), + Timer::getNextFire()), true); } while (running);