X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fobject.cpp;h=7a896b6581b40c849e5a3296c513260038b4c230;hb=f7ab597d035a053311c1a8c5baa51b090262f045;hp=7a23d11a04e4779ee13da5e094a80a059cc4f147;hpb=7fe7e3ec8f296d2f7fefeaf76f384362fcc27e64;p=r2c2.git diff --git a/source/libr2c2/object.cpp b/source/libr2c2/object.cpp index 7a23d11..7a896b6 100644 --- a/source/libr2c2/object.cpp +++ b/source/libr2c2/object.cpp @@ -2,6 +2,7 @@ #include "object.h" using namespace std; +using namespace Msp; namespace R2C2 { @@ -95,7 +96,7 @@ const Shape *Object::get_shape() const return get_type().get_shape(); } -bool Object::collide_ray(const Ray &ray) const +bool Object::collide_ray(const Ray &ray, float *d) const { const Shape *s = get_shape(); if(!s) @@ -103,7 +104,16 @@ bool Object::collide_ray(const Ray &ray) const Transform reverse_trans = Transform::rotation(rotation, Vector(0, 0, -1))* Transform::translation(-position); - return s->check_intersection(reverse_trans.transform(ray)); + if(d) + { + vector > points = s->get_intersections(reverse_trans.transform(ray)); + if(points.empty()) + return false; + *d = points.front().distance; + return true; + } + else + return s->check_intersection(reverse_trans.transform(ray)); } BoundingBox Object::get_bounding_box() const