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 +}