Tactics: Western Philosophers Vs. Musicians  0.12
A turn-based tactical game combining rules and gameplay elements inspired by Final Fantasy Tactics and the Mayfair Exponential Game System. Unlike most games of this type, motion is in full, grid-less 3D.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
OpenSkyNet::Core::CollisionDetector Class Reference

#include <CCollisionDetector.h>

Inheritance diagram for OpenSkyNet::Core::CollisionDetector:
OpenSkyNet::Core::Updater

Classes

struct  ColInfo
 

Public Member Functions

 CollisionDetector ()
 
virtual ~CollisionDetector ()
 
virtual bool update (float dt_)
 
virtual bool setPriority (Object *obj_, OBJECT_PRIORITY prio_)
 
virtual void setCDGrid (const Math::Point<> *corners_, std::set< CD::Volume * > &obstacles_)
 
const CD::GridgetGrid () const
 
void registerCollisionListener (CollisionListener *listener_)
 
void unregisterCollisionListener (CollisionListener *listener_)
 
virtual bool getClosestRayIntersection (const Math::Point<> &rayOrigin_, const Math::Point<> &rayDir_, Utils::uint colGroup_, CD::HitInfo &hitInfo_) const
 
virtual bool enableSweepTests (Object *obj_)
 
virtual bool disableSweepTests (Object *obj_)
 
virtual bool allowPostUpdateCollisions (Object *obj_)
 
virtual bool disallowPostUpdateCollisions (Object *obj_)
 
- Public Member Functions inherited from OpenSkyNet::Core::Updater
 Updater ()
 
 Updater (UPDATER_TYPE type_, const char *typeName_, UPDATER_PRIORITY prio_, float interval_)
 
virtual ~Updater ()
 
UPDATER_TYPE getType () const
 
const std::string & getTypeName () const
 
float getInterval () const
 
void setInterval (float interval_)
 
Utils::uint getNumObjects () const
 
Utils::uint getNumObjectsThatCanUpdate () const
 
bool find (Object *obj_) const
 
UPDATER_PRIORITY getPriority () const
 
OBJECT_PRIORITY getPriority (Object *obj_) const
 

Protected Member Functions

bool doCollide (Object *collidee_, Object *collider_)
 
bool doCollideWhenSwept (Object *collidee_, Object *collider_, float dt_, CD::HitInfo &hitInfo_)
 
virtual bool addObject (Object *obj_, Updater::OBJECT_PRIORITY prio_, bool isOneShot_)
 
virtual bool removeObject (Object *obj_)
 
- Protected Member Functions inherited from OpenSkyNet::Core::Updater
virtual void removeAllObjects ()
 
int getNumToUpdate (float dt_)
 
void allObjectsUpdated ()
 
void setPriority (UPDATER_PRIORITY prio_)
 

Protected Attributes

CD::Grid _grid
 
std::list< CollisionListener * > _registeredListeners
 
Utils::uint _maxCollisionsPerVolume
 
CD::Grid::BinOccupiersMap _nonCollidingOccupiers
 
CD::Grid::OccupiedBinsMap _nonCollidingOccupiedBins
 
- Protected Attributes inherited from OpenSkyNet::Core::Updater
std::list< Object * > _objLists [OBJ_NUM_PRIORITIES]
 
ObjMap _objMap
 
UPDATER_TYPE _type
 
std::string _typeName
 
UPDATER_PRIORITY _prio
 
float _interval
 
float _dtSinceAllWereUpdated
 
float _prevTotalTimeForAllUpdates
 
float _partialUpdate
 
int _currPrio
 
std::list< Object * >::iterator _currObj
 

Additional Inherited Members

- Public Types inherited from OpenSkyNet::Core::Updater
enum  UPDATER_TYPE {
  BASE, AI, CAMERA, PATH_FINDER,
  PATH, TRANSFORM_INTERPOLATOR, PHYSICS, ANIMATION,
  COLLISION_DETECTOR, PHYS_VIS, TRANSFORM_CHANGE_DETECTOR, CORE_MAX,
  MAX =32
}
 
enum  UPDATER_PRIORITY {
  UPD_DISABLED, UPD_1, UPD_2, UPD_3,
  UPD_4, UPD_5, UPD_6, UPD_7,
  UPD_8, UPD_NUM_PRIORITIES
}
 
enum  OBJECT_PRIORITY {
  OBJ_DISABLED, OBJ_1, OBJ_2, OBJ_3,
  OBJ_NUM_PRIORITIES
}
 
typedef std::map< Object
*, UpdateInfo * > 
ObjMap
 

Detailed Description

Detects collisions and reports them to game objects and interested updaters.

Constructor & Destructor Documentation

OpenSkyNet::Core::CollisionDetector::CollisionDetector ( )
inline
Todo:
Only reason to call init is for g_binLookupTable initialization. Separate it from g_initialGrid.
virtual OpenSkyNet::Core::CollisionDetector::~CollisionDetector ( )
inlinevirtual

Member Function Documentation

bool CollisionDetector::addObject ( Object obj_,
Updater::OBJECT_PRIORITY  prio_,
bool  isOneShot_ 
)
protectedvirtual

Returns false if obj_ is already in this updater.

Reimplemented from OpenSkyNet::Core::Updater.

bool CollisionDetector::allowPostUpdateCollisions ( Object obj_)
virtual
bool CollisionDetector::disableSweepTests ( Object obj_)
virtual
bool CollisionDetector::disallowPostUpdateCollisions ( Object obj_)
virtual
bool CollisionDetector::doCollide ( Object collidee_,
Object collider_ 
)
inlineprotected
bool CollisionDetector::doCollideWhenSwept ( Object collidee_,
Object collider_,
float  dt_,
CD::HitInfo hitInfo_ 
)
inlineprotected
bool CollisionDetector::enableSweepTests ( Object obj_)
virtual

Per object options

bool CollisionDetector::getClosestRayIntersection ( const Math::Point<> &  rayOrigin_,
const Math::Point<> &  rayDir_,
Utils::uint  colGroup_,
CD::HitInfo hitInfo_ 
) const
virtual
Todo:
Find grid bins that intersect first?
const CD::Grid* OpenSkyNet::Core::CollisionDetector::getGrid ( ) const
inline
void OpenSkyNet::Core::CollisionDetector::registerCollisionListener ( CollisionListener listener_)
inline
bool CollisionDetector::removeObject ( Object obj_)
protectedvirtual

Returns false if obj_ is not in this updater.

Reimplemented from OpenSkyNet::Core::Updater.

void CollisionDetector::setCDGrid ( const Math::Point<> *  corners_,
std::set< CD::Volume * > &  obstacles_ 
)
virtual

NOTE: MUST be called at least once before any calls to AddObject().

bool CollisionDetector::setPriority ( Object obj_,
OBJECT_PRIORITY  prio_ 
)
virtual

Reimplemented from OpenSkyNet::Core::Updater.

void OpenSkyNet::Core::CollisionDetector::unregisterCollisionListener ( CollisionListener listener_)
inline
bool CollisionDetector::update ( float  dt_)
virtual

Returns true if all objects were updated over the current interval (that's interval, not dt_), false if objects are left to be updated (see class description).

Parameters
dt_= seconds to update an object this call. dt_ accumulates for objects not updated.
Todo:
Use a custom pool allocator

Reimplemented from OpenSkyNet::Core::Updater.

Member Data Documentation

CD::Grid OpenSkyNet::Core::CollisionDetector::_grid
protected
Utils::uint OpenSkyNet::Core::CollisionDetector::_maxCollisionsPerVolume
protected
CD::Grid::OccupiedBinsMap OpenSkyNet::Core::CollisionDetector::_nonCollidingOccupiedBins
protected
CD::Grid::BinOccupiersMap OpenSkyNet::Core::CollisionDetector::_nonCollidingOccupiers
protected
Todo:
Use a custom pool allocator
std::list<CollisionListener*> OpenSkyNet::Core::CollisionDetector::_registeredListeners
protected

The documentation for this class was generated from the following files: