00001 /* 00002 00003 ************************************************************************* 00004 00005 ArmageTron -- Just another Tron Lightcycle Game in 3D. 00006 Copyright (C) 2000 Manuel Moos (manuel@moosnet.de) 00007 00008 ************************************************************************** 00009 00010 This program is free software; you can redistribute it and/or 00011 modify it under the terms of the GNU General Public License 00012 as published by the Free Software Foundation; either version 2 00013 of the License, or (at your option) any later version. 00014 00015 This program is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 GNU General Public License for more details. 00019 00020 You should have received a copy of the GNU General Public License 00021 along with this program; if not, write to the Free Software 00022 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00023 00024 *************************************************************************** 00025 00026 */ 00027 00028 #ifndef ArmageTron_SENSOR_H 00029 #define ArmageTron_SENSOR_H 00030 00031 #include "eGameObject.h" 00032 #include "eTess2.h" 00033 //#include "eGrid.h" 00034 00035 // exception that is thrown when the sensor hit something 00036 class eSensorFinished{}; 00037 00038 // sensor sent out to detect near eWalls 00039 class eSensor: public eStackGameObject{ 00040 public: 00041 REAL hit; // where is the eWall? 00042 tCHECKED_PTR_CONST(eHalfEdge) ehit; // the eWall we sense 00043 int lr; // and direction it goes to (left/right) 00044 eCoord before_hit; // a point shortly before that eWall 00045 00046 eSensor(eGameObject *o,const eCoord &start,const eCoord &d); 00047 00048 virtual void PassEdge(const eWall *w,REAL time,REAL,int =1); 00049 // virtual void PassEdge(eEdge *e,REAL time,REAL a,int recursion=1); 00050 void detect(REAL range); 00051 00052 void SetCurrentFace(eFace *f) { currentFace = f ; } 00053 00054 inline eSensor & SetInverseSpeed( REAL inverseSpeed ); 00055 inline REAL GetInverseSpeed( void ) const; 00056 inline eSensor const & GetInverseSpeed( REAL & inverseSpeed ) const; 00057 protected: 00058 tCHECKED_PTR(eGameObject) owned; 00059 private: 00060 REAL inverseSpeed_; 00061 }; 00062 00063 // ******************************************************************************* 00064 // * 00065 // * GetInverseSpeed 00066 // * 00067 // ******************************************************************************* 00071 // ******************************************************************************* 00072 00073 REAL eSensor::GetInverseSpeed( void ) const 00074 { 00075 return this->inverseSpeed_; 00076 } 00077 00078 // ******************************************************************************* 00079 // * 00080 // * GetInverseSpeed 00081 // * 00082 // ******************************************************************************* 00087 // ******************************************************************************* 00088 00089 eSensor const & eSensor::GetInverseSpeed( REAL & inverseSpeed ) const 00090 { 00091 inverseSpeed = this->inverseSpeed_; 00092 return *this; 00093 } 00094 00095 // ******************************************************************************* 00096 // * 00097 // * SetInverseSpeed 00098 // * 00099 // ******************************************************************************* 00104 // ******************************************************************************* 00105 00106 eSensor & eSensor::SetInverseSpeed( REAL inverseSpeed ) 00107 { 00108 this->inverseSpeed_ = inverseSpeed; 00109 return *this; 00110 } 00111 00112 #endif