Initial commit.
This commit is contained in:
commit
44b5f2392f
98 changed files with 11750 additions and 0 deletions
45
simulation.cpp
Normal file
45
simulation.cpp
Normal 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_;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue