00001 #ifndef __VECTRACER_TRACK_PHYSICAL_OBJECT_H 00002 #define __VECTRACER_TRACK_PHYSICAL_OBJECT_H 00003 00004 /* 00005 ----------------------------------------------------------------------------- 00006 Filename: TrackPhysicalObject.h 00007 Description: The physical units that make up a track. 00008 ----------------------------------------------------------------------------- 00009 */ 00010 00011 #include "Common.h" 00012 #include "GameObject.h" 00013 #include "Track.h" 00014 #include <vector> 00015 00016 class Track; 00017 00021 class TrackPhysicalObject : public GameObject 00022 { 00023 public: 00024 TrackPhysicalObject(int _val, Ogre::Vector3 _pos, Track* _track); 00025 00026 ~TrackPhysicalObject(); 00027 00028 Track* getTrack() const; 00029 void setTrack(Track* _val); 00030 00031 int getPointID() const; 00032 void setPointID(const int &_val); 00033 00035 void resetCurrent(); 00036 00038 void rebuildSegment(); 00039 00041 void calcAvRotation(); 00042 00043 void setTrackAvRotation(const Ogre::Radian &_val); 00044 Ogre::Radian getTrackAvRotation() const; 00045 00046 void setTrackAvDirection(const Ogre::Vector3 &_val); 00047 Ogre::Vector3 getTrackAvDirection() const; 00048 00049 void setTrackAvCross(const Ogre::Vector3 &_val); 00050 Ogre::Vector3 getTrackAvCross() const; 00051 00052 void setTrackAvUp(const Ogre::Vector3 &_val); 00053 Ogre::Vector3 getTrackAvUp() const; 00054 00055 void setLastDirection(const Ogre::Vector3 &_val); 00056 Ogre::Vector3 getLastDirection() const; 00057 00058 void setLastCross(const Ogre::Vector3 &_val); 00059 Ogre::Vector3 getLastCross() const; 00060 00061 void setLastUp(const Ogre::Vector3 &_val); 00062 Ogre::Vector3 getLastUp() const; 00063 00064 void setFirstDirection(const Ogre::Vector3 &_val); 00065 Ogre::Vector3 getFirstDirection() const; 00066 00067 void setFirstCross(const Ogre::Vector3 &_val); 00068 Ogre::Vector3 getFirstCross() const; 00069 00070 void setFirstUp(const Ogre::Vector3 &_val); 00071 Ogre::Vector3 getFirstUp() const; 00072 00073 void setPrevSec(TrackPhysicalObject* _val); 00074 TrackPhysicalObject* getPrevSec(); 00075 00076 void setNextSec(TrackPhysicalObject* _val); 00077 TrackPhysicalObject* getNextSec(); 00078 00079 Ogre::Real getTrackWidth() const; 00080 00081 Ogre::ManualObject* getGroundManual() const; 00082 void setGroundManual(Ogre::ManualObject* _val); 00083 00084 Ogre::ManualObject* getLeftManual() const; 00085 void setLeftManual(Ogre::ManualObject* _val); 00086 00087 Ogre::ManualObject* getRightManual() const; 00088 void setRightManual(Ogre::ManualObject* _val); 00089 00090 void createPhysicalMesh(); 00091 bool makePhysical(); 00092 00093 Ogre::MeshPtr getPhysicalMesh(); 00094 00095 void setAny(); 00096 00097 Ogre::StaticGeometry* getStaticGeometry(); 00098 00099 void tellTrackOfContact(); 00100 00101 void resetContactCheck(); 00102 protected: 00103 00104 // set ID 00105 void setID(); 00106 static int s_nextID; 00107 00108 int m_pointID; 00109 00110 Track* m_track; 00111 00112 TrackPhysicalObject* m_prevSec; 00113 TrackPhysicalObject* m_nextSec; 00114 00115 Ogre::Vector3 m_lastDirection; 00116 Ogre::Vector3 m_lastUp; 00117 Ogre::Vector3 m_lastCross; 00118 00119 Ogre::Vector3 m_firstDirection; 00120 Ogre::Vector3 m_firstUp; 00121 Ogre::Vector3 m_firstCross; 00122 00123 Ogre::Vector3 m_trackAvDirection; 00124 Ogre::Vector3 m_trackAvUp; 00125 Ogre::Vector3 m_trackAvCross; 00126 00127 Ogre::Radian m_trackAvRotation; 00128 00129 Ogre::ManualObject* m_groundManual; 00130 Ogre::ManualObject* m_leftManual; 00131 Ogre::ManualObject* m_rightManual; 00132 00133 Ogre::MeshPtr m_physicalMesh; 00134 Ogre::MeshPtr m_physicalLeft; 00135 Ogre::MeshPtr m_physicalRight; 00136 00137 Ogre::Entity* m_leftEnt; 00138 Ogre::Entity* m_rightEnt; 00139 00140 std::vector<Ogre::Vector3> m_upVectors; 00141 00142 Ogre::StaticGeometry* m_staticGeom; 00143 00144 bool m_contactCheck; 00145 }; 00146 00147 #endif