00001 #ifndef TRAVEL_METHOD
00002 #define TRAVEL_METHOD
00003
00004 #include <gmtl/Matrix.h>
00005 #include <ani/Dynamics/Body.h>
00006 #include <ani/Dynamics/DynamicSystem.h>
00007 #include <ani/Dynamics/Convert.h>
00008 #include <gator/CollisionDetector.h>
00009 #include <gator/CollisionDetectorPtr.h>
00010 #include <gator/PlaneCollisionDetector.h>
00011 #include "TravelPrimitive.h"
00012 #include "CollisionDetector.h"
00013
00014 namespace gator
00015 {
00017 enum EdgeState
00018 {
00019 DOWN, UP, EDGE_DOWN, EDGE_UP
00020 };
00021
00032 class TravelMethod : public ani::DynamicSystem<ani::Body>
00033 {
00034 public:
00035 TravelMethod() : mAvatar( new ani::Body ),
00036 mCamera( new ani::Body ),
00037 mPlatform( new ani::Body ),
00038 mCollisionDetector( new PlaneCollisionDetector )
00039 {
00040 }
00041
00043 virtual void digitalInput( unsigned int id, EdgeState value ) = 0;
00044
00046 virtual void analogInput( unsigned int id, float value ) = 0;
00047
00049 virtual void xformInput( unsigned int id, const gmtl::Matrix44f& value ) = 0;
00050
00056 ani::Body& avatar() { return *mAvatar; }
00057
00063 ani::Body& camera() { return *mCamera; }
00064
00071 ani::Body& platform() { return *mPlatform; }
00072
00077 virtual void setCollisionDetector( CollisionDetectorPtr& detect )
00078 {
00079 mCollisionDetector = detect;
00080 }
00081
00082 public:
00083 virtual void setPosition( const gmtl::Matrix44f& value ) = 0;
00084 virtual gmtl::Matrix44f getPosition() = 0;
00085 virtual void setHomePosition( const gmtl::Matrix44f& value )
00086 {
00087 mHome = value;
00088 }
00089 virtual void reset()
00090 {
00091 this->setPosition( mHome );
00092 mAvatar->setVelocity( gmtl::Vec3f( 0,0,0 ) );
00093 }
00094 void setName( std::string s ) { mName = s; }
00095 std::string getName() { return mName; }
00096
00097 protected:
00102 ani::BodyPtr mAvatar, mCamera, mPlatform;
00103
00107 CollisionDetectorPtr mCollisionDetector;
00108 private:
00109
00110 gmtl::Matrix44f mHome;
00111 std::string mName;
00112
00116
00117
00121
00122 protected:
00123 };
00124 }
00125
00126 #endif