//test if object is within BoundingBox bool Obstacle::objectWithinBoundingBox(Obstacle testObj) { if ( (testObj.getOrigin().x>=minX && testObj.getOrigin().x<=maxX) && (testObj.getOrigin().y>=minY && testObj.getOrigin().y<=maxY) && (testObj.getOrigin().z>=minZ && testObj.getOrigin().z<=maxZ)) { return true; } return false; }
bool BezierPatch::objectWithinBoundingBox(Obstacle testObj) { //test each bounding box for(int i=0;i<levelOfDetail;i++) { if ( testObj.getOrigin().x>=boundingBoxes[i].minPoints.x && testObj.getOrigin().x<=boundingBoxes[i].maxPoints.x && testObj.getOrigin().y>=boundingBoxes[i].minPoints.y && testObj.getOrigin().y<=boundingBoxes[i].maxPoints.y && testObj.getOrigin().z>=boundingBoxes[i].minPoints.z && testObj.getOrigin().z<=boundingBoxes[i].maxPoints.z) { return true; } } return false; }
bool Obstacle::objectWithinRadius(Obstacle testObj) { float actualDistance= getDistanceFromObject(testObj.getOrigin()); if( actualDistance < (spaceDimensions.x ) && actualDistance < (spaceDimensions.y ) && actualDistance < (spaceDimensions.z ) ) return true; return objectWithinBoundingBox(testObj); }
float Obstacle::getDistanceFromObject(Obstacle testObj) { float distance = ( sqrt( (testObj.getOrigin().x-getOrigin().x)*(testObj.getOrigin().x-getOrigin().x) + (testObj.getOrigin().y-getOrigin().y)*(testObj.getOrigin().y-getOrigin().y) + (testObj.getOrigin().z-getOrigin().z)*(testObj.getOrigin().z-getOrigin().z) )); return distance; }
bool processCollision(Obstacle &tmpObject) { if (!gameInPlay) return false; Point pointOnField = tmpObject.getOrigin() +tmpObject.getVelocity(); tmpObject.setOrigin(pointOnField); //Point pointOnField = currentOrigin +velocity; //Point currentVehicleOrigin = vehicle.getOrigin(); //pointOnField = pointOnField + originInSpace; //vehicle.setOrigin(pointOnField); //collision with Wall/Floor if ( abs(pointOnField.x) > courseDepth ||abs(pointOnField.z) > courseDepth ||abs(pointOnField.y) > courseDepth ) { //velocity=Point(0,0,0); //speed=0; tmpObject.setSpeed(0); //adjust the course Velocity so we don't get stuck in a wall if ( tmpObject.getOrigin().x > courseDepth) tmpObject.setOrigin(Point( courseDepth,tmpObject.getOrigin().y,tmpObject.getOrigin().z)); if ( tmpObject.getOrigin().x < -courseDepth) tmpObject.setOrigin(Point( -courseDepth,tmpObject.getOrigin().y,tmpObject.getOrigin().z)); if ( tmpObject.getOrigin().z > courseDepth) tmpObject.setOrigin(Point(tmpObject.getOrigin().x,tmpObject.getOrigin().y, courseDepth)); if ( tmpObject.getOrigin().z < -courseDepth) tmpObject.setOrigin(Point(tmpObject.getOrigin().x,tmpObject.getOrigin().y, -courseDepth)); if ( tmpObject.getOrigin().y > courseDepth) tmpObject.setOrigin(Point(tmpObject.getOrigin().x, courseDepth,tmpObject.getOrigin().z)); if ( tmpObject.getOrigin().y < -courseDepth) tmpObject.setOrigin(Point(tmpObject.getOrigin().x, -courseDepth,tmpObject.getOrigin().z)); //cout <<"Collision with Wall "<<pointOnField <<" x> depth("<<courseDepth<<endl; return true; } //collision vehicle With Pond //if(pond.objectWithinBoundingBox(tmpObject)) pond.setOrigin(pond.getOrigin()+Point(0,-30,0)); if( pond.objectWithinRadius(tmpObject)) { pond.setOrigin(pondOrigin); tmpObject.setSpeed(0); //cout << "collision with pond vehicle at "<<pointOnField<<endl; return true; } pond.setOrigin(pondOrigin); //collision with snowdrift 2; if(snowcave2.objectWithinBoundingBox(tmpObject)) { velocity = Point(0,0,0); tmpObject.setSpeed(0); //cout << "collision with snowcave2 at "<<pointOnField<<endl; return true; } if(snowcave.objectWithinBoundingBox(tmpObject)) { velocity = Point(0,0,0); tmpObject.setSpeed(0); //cout << "collision with snowcave at "<<pointOnField<<endl; return true; } //collision with snowman if(snowman.objectWithinBoundingBox(tmpObject) || snowman2.objectWithinBoundingBox(tmpObject) || snowman3.objectWithinBoundingBox(tmpObject)) { tmpObject.setSpeed(0); //cout << "collision with snowman at "<<pointOnField<<endl; return true; } //put back the vehicleOrigin() //vehicle.setOrigin(currentVehicleOrigin); return false; }//end of processCollision