coeng
diff src/sim.cc @ 8:8cce82794f90
seems to work nicely
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 15 Feb 2015 05:14:20 +0200 |
parents | af24cfbdf9b6 |
children |
line diff
1.1 --- a/src/sim.cc Sat Feb 14 10:08:00 2015 +0200 1.2 +++ b/src/sim.cc Sun Feb 15 05:14:20 2015 +0200 1.3 @@ -64,3 +64,39 @@ 1.4 { 1.5 return gravity; 1.6 } 1.7 + 1.8 +bool SimWorld::collide(const GObject *obj, HitPoint *hit) const 1.9 +{ 1.10 + CoCollider *co = COCAST(CoCollider, obj->get_component("collider")); 1.11 + if(co) { 1.12 + return collide(co, hit); 1.13 + } 1.14 + return false; // no collisions if it doesn't have a collider component 1.15 +} 1.16 + 1.17 +bool SimWorld::collide(const CoCollider *col, HitPoint *hit) const 1.18 +{ 1.19 + if(!col->shape) { 1.20 + return false; 1.21 + } 1.22 + 1.23 + // TODO do something better 1.24 + std::list<CoRigid*>::const_iterator it = rigid.begin(); 1.25 + while(it != rigid.end()) { 1.26 + const CoRigid *r = *it++; 1.27 + const GObject *obj2 = r->get_object(); 1.28 + if(!obj2 || obj2 == col->get_object()) { 1.29 + continue; 1.30 + } 1.31 + 1.32 + const CoCollider *col2 = COCAST(CoCollider, obj2->get_component("collider")); 1.33 + if(!col2 || !col2->shape) { 1.34 + continue; 1.35 + } 1.36 + 1.37 + if(col->shape->collide(col2->shape, hit)) { 1.38 + return true; 1.39 + } 1.40 + } 1.41 + return false; 1.42 +}