Initial commit.

This commit is contained in:
Mike Bostock 2012-12-14 09:47:48 -08:00
commit 44b5f2392f
98 changed files with 11750 additions and 0 deletions

45
simulation.cpp Normal file
View file

@ -0,0 +1,45 @@
// -*- C++ -*-
#include <SDL/sdl.h>
#include "simulation.h"
using namespace mbostock;
/*
* If for some reason we haven't been able to run the simulation in a long time
* (e.g., the computer went to sleep for two hours!), then we don't want to run
* the simulation a zillion times to catch up. Instead we just drop some frames
* and hope it gets better.
*/
static const uint32_t maxSkippedMs = 500;
Simulation::Simulation(uint32_t timeStepMs)
: timeStepMs_(timeStepMs), skippedMs_(0), lastTimeMs_(0), paused_(false) {
}
uint32_t Simulation::elapsedMillis() {
uint32_t currentTimeMs = SDL_GetTicks();
uint32_t differenceMs = currentTimeMs - lastTimeMs_;
lastTimeMs_ = currentTimeMs;
return differenceMs;
}
void Simulation::togglePaused() {
paused_ = !paused_;
}
void Simulation::simulate() {
if (paused_ || (lastTimeMs_ == 0)) {
lastTimeMs_ = SDL_GetTicks();
return;
}
skippedMs_ += elapsedMillis();
if (skippedMs_ > maxSkippedMs) {
skippedMs_ = timeStepMs_;
}
while (skippedMs_ >= timeStepMs_) {
step();
skippedMs_ -= timeStepMs_;
}
}