grav
annotate src/sim.cc @ 0:68db0e456733
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Fri, 23 May 2014 03:13:47 +0300 |
parents | |
children | 3d541da6e48c |
rev | line source |
---|---|
nuclear@0 | 1 #include <GL/gl.h> |
nuclear@0 | 2 #include "sim.h" |
nuclear@0 | 3 |
nuclear@0 | 4 Particle::Particle() |
nuclear@0 | 5 { |
nuclear@0 | 6 mass = 1.0; |
nuclear@0 | 7 } |
nuclear@0 | 8 |
nuclear@0 | 9 void Particle::impulse(const Vector3 &imp) |
nuclear@0 | 10 { |
nuclear@0 | 11 accel += imp; |
nuclear@0 | 12 } |
nuclear@0 | 13 |
nuclear@0 | 14 void Particle::step(float dt) |
nuclear@0 | 15 { |
nuclear@0 | 16 Vector3 npos = pos + vel * dt; |
nuclear@0 | 17 |
nuclear@0 | 18 vel += accel * dt; |
nuclear@0 | 19 accel.x = accel.y = accel.z = 0.0; |
nuclear@0 | 20 |
nuclear@0 | 21 pos = npos; |
nuclear@0 | 22 } |
nuclear@0 | 23 |
nuclear@0 | 24 |
nuclear@0 | 25 // ---- SimWorld ---- |
nuclear@0 | 26 SimWorld::SimWorld() |
nuclear@0 | 27 { |
nuclear@0 | 28 set_world_bounds(1000.0f); |
nuclear@0 | 29 } |
nuclear@0 | 30 |
nuclear@0 | 31 void SimWorld::set_world_bounds(float rad) |
nuclear@0 | 32 { |
nuclear@0 | 33 radius_sq = rad * rad; |
nuclear@0 | 34 } |
nuclear@0 | 35 |
nuclear@0 | 36 void SimWorld::add_particle(const Particle &p) |
nuclear@0 | 37 { |
nuclear@0 | 38 particles.push_back(p); |
nuclear@0 | 39 } |
nuclear@0 | 40 |
nuclear@0 | 41 void SimWorld::step(float dt) |
nuclear@0 | 42 { |
nuclear@0 | 43 std::list<Particle>::iterator it = particles.begin(); |
nuclear@0 | 44 while(it != particles.end()) { |
nuclear@0 | 45 Particle *p = &*it; |
nuclear@0 | 46 p->step(dt); |
nuclear@0 | 47 |
nuclear@0 | 48 if(p->pos.length_sq() > radius_sq) { |
nuclear@0 | 49 it = particles.erase(it); |
nuclear@0 | 50 } else { |
nuclear@0 | 51 ++it; |
nuclear@0 | 52 } |
nuclear@0 | 53 } |
nuclear@0 | 54 } |
nuclear@0 | 55 |
nuclear@0 | 56 void SimWorld::draw() const |
nuclear@0 | 57 { |
nuclear@0 | 58 glBlendFunc(GL_ONE, GL_ONE); |
nuclear@0 | 59 glEnable(GL_BLEND); |
nuclear@0 | 60 |
nuclear@0 | 61 glBegin(GL_POINTS); |
nuclear@0 | 62 glColor3f(0.5, 0.6, 0.7); |
nuclear@0 | 63 |
nuclear@0 | 64 std::list<Particle>::const_iterator it = particles.begin(); |
nuclear@0 | 65 while(it != particles.end()) { |
nuclear@0 | 66 const Particle *p = &*it++; |
nuclear@0 | 67 glVertex3f(p->pos.x, p->pos.y, p->pos.z); |
nuclear@0 | 68 } |
nuclear@0 | 69 |
nuclear@0 | 70 glEnd(); |
nuclear@0 | 71 |
nuclear@0 | 72 glDisable(GL_BLEND); |
nuclear@0 | 73 } |