Update of /cvsroot/super-tux/supertux/lib/special
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3933/lib/special
Modified Files:
collision.cpp
Log Message:
added some more non-45 degree triangle modes
Index: collision.cpp
===================================================================
RCS file: /cvsroot/super-tux/supertux/lib/special/collision.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- collision.cpp 25 Nov 2004 13:15:57 -0000 1.4
+++ collision.cpp 25 Nov 2004 16:38:30 -0000 1.5
@@ -83,29 +83,57 @@
{
if(!rectangle_rectangle(hit, rect, movement, (const Rectangle&) triangle))
return false;
-
+
Vector normal;
float c;
Vector p1;
- switch(triangle.dir) {
+ Vector tp1, tp2;
+ switch(triangle.dir & AATriangle::DEFORM_MASK) {
+ case 0:
+ tp1 = triangle.p1;
+ tp2 = triangle.p2;
+ break;
+ case AATriangle::DEFORM1:
+ tp1 = Vector(triangle.p1.x, triangle.p1.y + triangle.get_height()/2);
+ tp2 = triangle.p2;
+ break;
+ case AATriangle::DEFORM2:
+ tp1 = triangle.p1;
+ tp2 = Vector(triangle.p2.x, triangle.p1.y + triangle.get_height()/2);
+ break;
+ case AATriangle::DEFORM3:
+ tp1 = triangle.p1;
+ tp2 = Vector(triangle.p1.x + triangle.get_width()/2, triangle.p2.y);
+ break;
+ case AATriangle::DEFORM4:
+ tp1 = Vector(triangle.p1.x + triangle.get_width()/2, triangle.p1.y);
+ tp2 = triangle.p2;
+ break;
+ default:
+ assert(false);
+ }
+
+ switch(triangle.dir & AATriangle::DIRECTION_MASK) {
case AATriangle::SOUTHWEST:
p1 = Vector(rect.p1.x, rect.p2.y);
- makePlane(triangle.p1, triangle.p2, normal, c);
+ makePlane(tp1, tp2, normal, c);
break;
case AATriangle::NORTHEAST:
p1 = Vector(rect.p2.x, rect.p1.y);
- makePlane(triangle.p2, triangle.p1, normal, c);
+ makePlane(tp2, tp1, normal, c);
break;
case AATriangle::SOUTHEAST:
p1 = rect.p2;
- makePlane(Vector(triangle.p1.x, triangle.p2.y),
- Vector(triangle.p2.x, triangle.p1.y), normal, c);
+ makePlane(Vector(tp1.x, tp2.y),
+ Vector(tp2.x, tp1.y), normal, c);
break;
case AATriangle::NORTHWEST:
p1 = rect.p1;
- makePlane(Vector(triangle.p2.x, triangle.p1.y),
- Vector(triangle.p1.x, triangle.p2.y), normal, c);
+ makePlane(Vector(tp2.x, tp1.y),
+ Vector(tp1.x, tp2.y), normal, c);
break;
+ default:
+ assert(false);
}
float n_p1 = -(normal * p1);
|