ICollideable edited

For some reason the Intersects() and Contains() methods were taking a
pointer as parameter then I am certain that I wrote it as a &-reference.
If someone edited this, there is no GIT history logged about it.

Please, DO NOT CHANGE this again, thanks
This commit is contained in:
Dander7BD 2013-11-25 14:22:38 +01:00
parent bc988eff0d
commit 311beaac14
19 changed files with 109 additions and 109 deletions

View File

@ -31,28 +31,28 @@ Box & Box::operator = ( const Box &box )
return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Box(*this) ); return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Box(*this) );
} }
bool Box::Intersects( const ICollideable *target ) const bool Box::Intersects( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_universe: return true; case Type_universe: return true;
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
case Type_ray: return Utility::Intersect( *this, *(Ray*)target, ((Ray*)target)->collisionDistance ); case Type_ray: return Utility::Intersect( *this, *(Ray*)&target, ((Ray*)&target)->collisionDistance );
case Type_sphere: return Utility::Intersect( *this, *(Sphere*)target ); case Type_sphere: return Utility::Intersect( *this, *(Sphere*)&target );
case Type_plane: return Utility::Intersect( *this, *(Plane*)target ); case Type_plane: return Utility::Intersect( *this, *(Plane*)&target );
// case Type_triangle: return false; // TODO: : // case Type_triangle: return false; // TODO: :
case Type_box_axis_aligned: return Utility::Intersect( *this, *(BoxAxisAligned*)target ); case Type_box_axis_aligned: return Utility::Intersect( *this, *(BoxAxisAligned*)&target );
case Type_box: return Utility::Intersect( *this, *(Box*)target ); case Type_box: return Utility::Intersect( *this, *(Box*)&target );
// case Type_frustrum: return false; // TODO: : // case Type_frustrum: return false; // TODO: :
default: return false; default: return false;
} }
} }
bool Box::Contains( const ICollideable *target ) const bool Box::Contains( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
// case Type_sphere: return false; // TODO: // case Type_sphere: return false; // TODO:
// case Type_triangle: return false; // TODO: // case Type_triangle: return false; // TODO:
// case Type_box_axis_aligned: return false; // TODO: // case Type_box_axis_aligned: return false; // TODO:

View File

@ -33,8 +33,8 @@ namespace Oyster { namespace Collision3D
Box & operator = ( const Box &box ); Box & operator = ( const Box &box );
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
} } } }

View File

@ -24,26 +24,26 @@ BoxAxisAligned & BoxAxisAligned::operator = ( const BoxAxisAligned &box )
::Utility::DynamicMemory::UniquePointer<ICollideable> BoxAxisAligned::Clone( ) const ::Utility::DynamicMemory::UniquePointer<ICollideable> BoxAxisAligned::Clone( ) const
{ return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new BoxAxisAligned(*this) ); } { return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new BoxAxisAligned(*this) ); }
bool BoxAxisAligned::Intersects( const ICollideable *target ) const bool BoxAxisAligned::Intersects( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_universe: return true; case Type_universe: return true;
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
case Type_ray: return Utility::Intersect( *this, *(Ray*)target, ((Ray*)target)->collisionDistance ); case Type_ray: return Utility::Intersect( *this, *(Ray*)&target, ((Ray*)&target)->collisionDistance );
case Type_sphere: return Utility::Intersect( *this, *(Sphere*)target ); case Type_sphere: return Utility::Intersect( *this, *(Sphere*)&target );
case Type_plane: return Utility::Intersect( *this, *(Plane*)target ); case Type_plane: return Utility::Intersect( *this, *(Plane*)&target );
// case Type_triangle: return false; // TODO: // case Type_triangle: return false; // TODO:
case Type_box_axis_aligned: return Utility::Intersect( *this, *(BoxAxisAligned*)target ); case Type_box_axis_aligned: return Utility::Intersect( *this, *(BoxAxisAligned*)&target );
// case Type_box: return false; // TODO: // case Type_box: return false; // TODO:
// case Type_frustrum: return false; // TODO: // case Type_frustrum: return false; // TODO:
default: return false; default: return false;
} }
} }
bool BoxAxisAligned::Contains( const ICollideable *target ) const bool BoxAxisAligned::Contains( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
// case Type_point: return false; // TODO: // case Type_point: return false; // TODO:
// case Type_sphere: return false; // TODO: // case Type_sphere: return false; // TODO:

View File

@ -28,8 +28,8 @@ namespace Oyster { namespace Collision3D
BoxAxisAligned & operator = ( const BoxAxisAligned &box ); BoxAxisAligned & operator = ( const BoxAxisAligned &box );
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
} } } }

View File

@ -191,29 +191,29 @@ void Frustrum::WriteToByte( unsigned int &nextIndex, unsigned char targetMem[] )
::Utility::DynamicMemory::UniquePointer<ICollideable> Frustrum::Clone( ) const ::Utility::DynamicMemory::UniquePointer<ICollideable> Frustrum::Clone( ) const
{ return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Frustrum(*this) ); } { return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Frustrum(*this) ); }
bool Frustrum::Intersects( const ICollideable *target ) const bool Frustrum::Intersects( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_universe: return true; case Type_universe: return true;
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
case Type_ray: return Utility::Intersect( *this, *(Ray*)target, ((Ray*)target)->collisionDistance ); case Type_ray: return Utility::Intersect( *this, *(Ray*)&target, ((Ray*)&target)->collisionDistance );
case Type_sphere: return Utility::Intersect( *this, *(Sphere*)target ); case Type_sphere: return Utility::Intersect( *this, *(Sphere*)&target );
case Type_plane: return Utility::Intersect( *this, *(Plane*)target ); case Type_plane: return Utility::Intersect( *this, *(Plane*)&target );
// case Type_triangle: return false; // TODO: // case Type_triangle: return false; // TODO:
case Type_box_axis_aligned: return Utility::Intersect( *this, *(BoxAxisAligned*)target ); case Type_box_axis_aligned: return Utility::Intersect( *this, *(BoxAxisAligned*)&target );
case Type_box: return Utility::Intersect( *this, *(Box*)target ); case Type_box: return Utility::Intersect( *this, *(Box*)&target );
case Type_frustrum: return Utility::Intersect( *this, *(Frustrum*)target ); case Type_frustrum: return Utility::Intersect( *this, *(Frustrum*)&target );
// case Type_line: return false; // TODO: // case Type_line: return false; // TODO:
default: return false; default: return false;
} }
} }
bool Frustrum::Contains( const ICollideable *target ) const bool Frustrum::Contains( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
// case Type_ray: return false; // TODO: // case Type_ray: return false; // TODO:
// case Type_sphere: return false; // TODO: // case Type_sphere: return false; // TODO:
// case Type_plane: return false; // TODO: // case Type_plane: return false; // TODO:

View File

@ -38,8 +38,8 @@ namespace Oyster { namespace Collision3D
void WriteToByte( unsigned char targetMem[], unsigned int &nextIndex ) const; /// DEPRECATED void WriteToByte( unsigned char targetMem[], unsigned int &nextIndex ) const; /// DEPRECATED
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
// INLINE IMPLEMENTATIONS /////////////////////////////////////// // INLINE IMPLEMENTATIONS ///////////////////////////////////////

View File

@ -8,7 +8,7 @@
#include "Utilities.h" #include "Utilities.h"
namespace Oyster { namespace Collision3D /// Contains a collection of 3D shapes and intercollission algorithms. namespace Oyster { namespace Collision3D //! Contains a collection of 3D shapes and intercollission algorithms.
{ {
class ICollideable class ICollideable
{ {
@ -34,8 +34,8 @@ namespace Oyster { namespace Collision3D /// Contains a collection of 3D shapes
virtual ~ICollideable(); virtual ~ICollideable();
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const = 0; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const = 0;
virtual bool Intersects( const ICollideable *target ) const = 0; virtual bool Intersects( const ICollideable &target ) const = 0;
virtual bool Contains( const ICollideable *target ) const = 0; virtual bool Contains( const ICollideable &target ) const = 0;
}; };
} } } }
#endif #endif

View File

@ -23,9 +23,9 @@ Line & Line::operator = ( const Line &line )
::Utility::DynamicMemory::UniquePointer<ICollideable> Line::Clone( ) const ::Utility::DynamicMemory::UniquePointer<ICollideable> Line::Clone( ) const
{ return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Line(*this) ); } { return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Line(*this) ); }
bool Line::Intersects( const ICollideable *target ) const bool Line::Intersects( const ICollideable &target ) const
{ {
if( target->type == Type_universe ) if( target.type == Type_universe )
{ {
this->ray.collisionDistance = 0.0f; this->ray.collisionDistance = 0.0f;
return true; return true;
@ -38,5 +38,5 @@ bool Line::Intersects( const ICollideable *target ) const
return false; return false;
} }
bool Line::Contains( const ICollideable *target ) const bool Line::Contains( const ICollideable &target ) const
{ /* TODO: : */ return false; } { /* TODO: : */ return false; }

View File

@ -29,8 +29,8 @@ namespace Oyster { namespace Collision3D
Line & operator = ( const Line &line ); Line & operator = ( const Line &line );
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
} } } }

View File

@ -22,31 +22,31 @@ Plane & Plane::operator = ( const Plane &plane )
::Utility::DynamicMemory::UniquePointer<ICollideable> Plane::Clone( ) const ::Utility::DynamicMemory::UniquePointer<ICollideable> Plane::Clone( ) const
{ return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Plane(*this) ); } { return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Plane(*this) ); }
bool Plane::Intersects( const ICollideable *target ) const bool Plane::Intersects( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_universe: return true; case Type_universe: return true;
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
case Type_ray: return Utility::Intersect( *this, *(Ray*)target, ((Ray*)target)->collisionDistance ); case Type_ray: return Utility::Intersect( *this, *(Ray*)&target, ((Ray*)&target)->collisionDistance );
case Type_sphere: return Utility::Intersect( *this, *(Sphere*)target ); case Type_sphere: return Utility::Intersect( *this, *(Sphere*)&target );
case Type_plane: return Utility::Intersect( *this, *(Plane*)target ); case Type_plane: return Utility::Intersect( *this, *(Plane*)&target );
// case Type_triangle: return false; // TODO: // case Type_triangle: return false; // TODO:
case Type_box_axis_aligned: return Utility::Intersect( *(BoxAxisAligned*)target, *this ); case Type_box_axis_aligned: return Utility::Intersect( *(BoxAxisAligned*)&target, *this );
case Type_box: return Utility::Intersect( *(Box*)target, *this ); case Type_box: return Utility::Intersect( *(Box*)&target, *this );
case Type_frustrum: return false; // TODO: case Type_frustrum: return false; // TODO:
case Type_line: return false; // TODO: case Type_line: return false; // TODO:
default: return false; default: return false;
} }
} }
bool Plane::Contains( const ICollideable *target ) const bool Plane::Contains( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
case Type_ray: return Utility::Contains( *this, *(Ray*)target ); case Type_ray: return Utility::Contains( *this, *(Ray*)&target );
case Type_plane: return Utility::Contains( *this, *(Plane*)target ); case Type_plane: return Utility::Contains( *this, *(Plane*)&target );
// case Type_triangle: return false; // TODO: // case Type_triangle: return false; // TODO:
default: return false; default: return false;
} }

View File

@ -28,8 +28,8 @@ namespace Oyster { namespace Collision3D
Plane & operator = ( const Plane &plane ); Plane & operator = ( const Plane &plane );
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
} } } }

View File

@ -21,28 +21,28 @@ Point & Point::operator = ( const Point &point )
::Utility::DynamicMemory::UniquePointer<ICollideable> Point::Clone( ) const ::Utility::DynamicMemory::UniquePointer<ICollideable> Point::Clone( ) const
{ return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Point(*this) ); } { return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Point(*this) ); }
bool Point::Intersects( const ICollideable *target ) const bool Point::Intersects( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_universe: return true; case Type_universe: return true;
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
case Type_ray: return Utility::Intersect( *(Ray*)target, *this, ((Ray*)target)->collisionDistance ); case Type_ray: return Utility::Intersect( *(Ray*)&target, *this, ((Ray*)&target)->collisionDistance );
case Type_sphere: Utility::Intersect( *(Sphere*)target, *this ); case Type_sphere: Utility::Intersect( *(Sphere*)&target, *this );
case Type_plane: return Utility::Intersect( *(Plane*)target, *this ); case Type_plane: return Utility::Intersect( *(Plane*)&target, *this );
//case Type_triangle: return false; // TODO: //case Type_triangle: return false; // TODO:
case Type_box_axis_aligned: return Utility::Intersect( *(BoxAxisAligned*)target, *this ); case Type_box_axis_aligned: return Utility::Intersect( *(BoxAxisAligned*)&target, *this );
case Type_box: return Utility::Intersect( *(Box*)target, *this ); case Type_box: return Utility::Intersect( *(Box*)&target, *this );
case Type_frustrum: return false; // TODO: case Type_frustrum: return false; // TODO:
default: return false; default: return false;
} }
} }
bool Point::Contains( const ICollideable *target ) const bool Point::Contains( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
default: return false; default: return false;
} }
} }

View File

@ -27,8 +27,8 @@ namespace Oyster { namespace Collision3D
Point & operator = ( const Point &point ); Point & operator = ( const Point &point );
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
} } } }

View File

@ -22,31 +22,31 @@ Ray & Ray::operator = ( const Ray &ray )
::Utility::DynamicMemory::UniquePointer<ICollideable> Ray::Clone( ) const ::Utility::DynamicMemory::UniquePointer<ICollideable> Ray::Clone( ) const
{ return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Ray(*this) ); } { return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Ray(*this) ); }
bool Ray::Intersects( const ICollideable *target ) const bool Ray::Intersects( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_universe: case Type_universe:
this->collisionDistance = 0.0f; this->collisionDistance = 0.0f;
return true; return true;
case Type_point: return Utility::Intersect( *this, *(Point*)target, this->collisionDistance ); case Type_point: return Utility::Intersect( *this, *(Point*)&target, this->collisionDistance );
case Type_ray: return Utility::Intersect( *this, *(Ray*)target, this->collisionDistance, ((Ray*)target)->collisionDistance ); case Type_ray: return Utility::Intersect( *this, *(Ray*)&target, this->collisionDistance, ((Ray*)&target)->collisionDistance );
case Type_sphere: return Utility::Intersect( *(Sphere*)target, *this, this->collisionDistance ); case Type_sphere: return Utility::Intersect( *(Sphere*)&target, *this, this->collisionDistance );
case Type_plane: return Utility::Intersect( *(Plane*)target, *this, this->collisionDistance ); case Type_plane: return Utility::Intersect( *(Plane*)&target, *this, this->collisionDistance );
// case Type_triangle: return false; // TODO: // case Type_triangle: return false; // TODO:
case Type_box_axis_aligned: return Utility::Intersect( *(BoxAxisAligned*)target, *this, this->collisionDistance ); case Type_box_axis_aligned: return Utility::Intersect( *(BoxAxisAligned*)&target, *this, this->collisionDistance );
case Type_box: return Utility::Intersect( *(Box*)target, *this, this->collisionDistance ); case Type_box: return Utility::Intersect( *(Box*)&target, *this, this->collisionDistance );
case Type_frustrum: return false; // TODO: case Type_frustrum: return false; // TODO:
default: return false; default: return false;
} }
} }
bool Ray::Contains( const ICollideable *target ) const bool Ray::Contains( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_point: return Utility::Intersect( *this, *(Point*)target, this->collisionDistance ); case Type_point: return Utility::Intersect( *this, *(Point*)&target, this->collisionDistance );
case Type_ray: Utility::Contains( *this, *(Ray*)target ); case Type_ray: Utility::Contains( *this, *(Ray*)&target );
default: return false; default: return false;
} }
} }

View File

@ -36,8 +36,8 @@ namespace Oyster { namespace Collision3D
Ray & operator = ( const Ray &ray ); Ray & operator = ( const Ray &ray );
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
} } } }

View File

@ -18,29 +18,29 @@ Sphere & Sphere::operator = ( const Sphere &sphere )
::Utility::DynamicMemory::UniquePointer<ICollideable> Sphere::Clone( ) const ::Utility::DynamicMemory::UniquePointer<ICollideable> Sphere::Clone( ) const
{ return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Sphere(*this) ); } { return ::Utility::DynamicMemory::UniquePointer<ICollideable>( new Sphere(*this) ); }
bool Sphere::Intersects( const ICollideable *target ) const bool Sphere::Intersects( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_universe: return true; case Type_universe: return true;
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
case Type_ray: return Utility::Intersect( *this, *(Ray*)target, ((Ray*)target)->collisionDistance ); case Type_ray: return Utility::Intersect( *this, *(Ray*)&target, ((Ray*)&target)->collisionDistance );
case Type_sphere: Utility::Intersect( *this, *(Sphere*)target ); case Type_sphere: Utility::Intersect( *this, *(Sphere*)&target );
case Type_plane: return Utility::Intersect( *(Plane*)target, *this ); case Type_plane: return Utility::Intersect( *(Plane*)&target, *this );
// case Type_triangle: return false; // TODO: // case Type_triangle: return false; // TODO:
case Type_box_axis_aligned: return Utility::Intersect( *(BoxAxisAligned*)target, *this ); case Type_box_axis_aligned: return Utility::Intersect( *(BoxAxisAligned*)&target, *this );
case Type_box: return Utility::Intersect( *(Box*)target, *this ); case Type_box: return Utility::Intersect( *(Box*)&target, *this );
case Type_frustrum: return false; // TODO: case Type_frustrum: return false; // TODO:
default: return false; default: return false;
} }
} }
bool Sphere::Contains( const ICollideable *target ) const bool Sphere::Contains( const ICollideable &target ) const
{ {
switch( target->type ) switch( target.type )
{ {
case Type_point: return Utility::Intersect( *this, *(Point*)target ); case Type_point: return Utility::Intersect( *this, *(Point*)&target );
case Type_sphere: return Utility::Contains( *this, *(Sphere*)target ); case Type_sphere: return Utility::Contains( *this, *(Sphere*)&target );
// case Type_triangle: return false; // TODO: // case Type_triangle: return false; // TODO:
case Type_box_axis_aligned: return false; // TODO: case Type_box_axis_aligned: return false; // TODO:
case Type_box: return false; // TODO: case Type_box: return false; // TODO:

View File

@ -27,8 +27,8 @@ namespace Oyster { namespace Collision3D
Sphere & operator = ( const Sphere &sphere ); Sphere & operator = ( const Sphere &sphere );
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
} } } }

View File

@ -13,15 +13,15 @@ Universe & Universe::operator = ( const Universe &universe )
UniquePointer<ICollideable> Universe::Clone( ) const UniquePointer<ICollideable> Universe::Clone( ) const
{ return UniquePointer<ICollideable>( new Universe(*this) ); } { return UniquePointer<ICollideable>( new Universe(*this) ); }
bool Universe::Intersects( const ICollideable *target ) const bool Universe::Intersects( const ICollideable &target ) const
{ // universe touches everything { // universe touches everything
switch( target->type ) switch( target.type )
{ {
case Type_ray: case Type_ray:
((Ray*)target)->collisionDistance = 0.0f; ((Ray*)&target)->collisionDistance = 0.0f;
break; break;
case Type_line: case Type_line:
((Line*)target)->ray.collisionDistance = 0.0f; ((Line*)&target)->ray.collisionDistance = 0.0f;
break; break;
default: break; default: break;
} }
@ -29,6 +29,6 @@ bool Universe::Intersects( const ICollideable *target ) const
return true; return true;
} }
bool Universe::Contains( const ICollideable *target ) const bool Universe::Contains( const ICollideable &target ) const
{ return true; } // universe contains everything { return true; } // universe contains everything

View File

@ -19,8 +19,8 @@ namespace Oyster { namespace Collision3D
Universe & operator = ( const Universe &universe ); Universe & operator = ( const Universe &universe );
virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const; virtual ::Utility::DynamicMemory::UniquePointer<ICollideable> Clone( ) const;
bool Intersects( const ICollideable *target ) const; bool Intersects( const ICollideable &target ) const;
bool Contains( const ICollideable *target ) const; bool Contains( const ICollideable &target ) const;
}; };
} } } }